zim-0.65/0000775000175000017500000000000012615422672012124 5ustar jaapjaap00000000000000zim-0.65/README.txt0000664000175000017500000001260112400317054013607 0ustar jaapjaap00000000000000====== ABOUT ====== Zim - A Desktop Wiki Editor Zim is a graphical text editor used to maintain a collection of wiki pages. Each page can contain links to other pages, simple formatting and images. Pages are stored in a folder structure, like in an outliner, and can have attachments. Creating a new page is as easy as linking to a nonexistent page. All data is stored in plain text files with wiki formatting. Various plugins provide additional functionality, like a task list manager, an equation editor, a tray icon, and support for version control. Zim can be used to: * Keep an archive of notes * Take notes during meetings or lectures * Organize task lists * Draft blog entries and emails * Do brainstorming ====== COPYRIGHT ====== All files in this package, with the exception of those mentioned below are copyrighted and licensed as follows: Copyright 2008-2014 Jaap Karssenberg This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. == Translations == Translations are copyrighted by their respective translators. All translations that are entered through the launchpad website are distributed under the BSD license. See the translation files for detailed translator credits. == Included Files == The following files were included from other sources: * zim/inc/xdot.py - Copyright 2008 Jose Fonseca * zim/inc/arithmetic.py - Copyright 2010, 2011 Patricio Paez From the default Gnome icon theme: * pixmaps/task-list.png (was: stock_todo.png) * pixmaps/attachment.png (was: mail-attachment.png) From Gtk+ 2.8 * pixmaps/link.png (was: stock_connect_24.png) Other: * pixmaps/calendar.png (was: stock_calendar-view-month.png) Copyright 2007 by Jakub Steiner, released under GPL modifications copyright 2009 by Gabriel Hurley ====== INSTALLING ====== NOTE: To test zim it is not needed to install. You should be able to run it directly from the source directory by calling `./zim.py`. (To run a translated version from the source first call `./setup.py build_trans`.) First you should verify you have the dependencies zim needs. To list all dependencies check `./setup.py --requires`. You will at least need the following: * gtk+ >= 2.6 * python >= 2.6 * python-gtk * python-gobject * python-xdg (optional, but recommended) * xdg-utils (optional, but recommended) To verify zim is working properly on your system you can call the test suite using `./test.py`. Failures do not have to be critical, but in principle all tests should pass. Zim can be installed from source using: ./setup.py install Most plugins have additional requirements. These are listed in the plugin descriptions. ===== Ubuntu ===== On Ubuntu or other debian derived systems, the following packages should be installed: * python * libgtk2.0-0 * python-gtk2 * python-xdg ===== Windows ===== To install gtk, python and python-gtk on Windows see the instructions at http://www.pygtk.org . If you use python 2.5 you will also need to install the python simplejson module. This can be obtained from http://pypi.python.org . The python-xdg module is not usefull on Windows, so you can skip it. Once the dependencies are fulfilled you can run zim directly from the source directory. ===== Mac OS X ===== You can run zim on mac if you have the proper dependencies installed. If you are using Mac Ports packages installing the following ports should work: * python26 * py26-gtk * py26-simplejson * py26-xdg ===== Install Paths ===== If you install in a non-default location you may need to set the PYTHONPATH environment variable in order for zim to find it's python modules. For example, if you installed the modules below "/home/user/lib/zim" you need to set: PYTHONPATH=/home/user/lib Also zim uses the XDG paths to locate data and config files. If you get an error that zim can not find it's data files For example, if you installed the zim data files to "/home/user/share/zim" you need to set the data path like this: XDG_DATA_DIRS=/home/user/share:/usr/local/share:/usr/share ====== PACKAGING ====== To build a tree in a target directory you can use: ./setup.py install --root=/path/to/package/build/dir --skip-cmd Special attention may be needed to run xdg update commands in a post-install script. Recommended commands are: update-desktop-database update-mime-database /usr/share/mime ====== TRANSLATING ====== To contribute to translations onlne please go to http://launchpad.net. To test a new translation you can either download the snapshot from launchpad and run: ./tools/import-launchpad-translations.py launchpad-export.tar.gz Or you can edit the template zim.pot with your favourite editor. In that case you should add you new .po file to the po/ directory. After adding the .po file(s) you can compile the translation using: ./setup.py build_trans zim-0.65/contrib/0000775000175000017500000000000012615422672013564 5ustar jaapjaap00000000000000zim-0.65/contrib/zim2trac.py0000664000175000017500000001153312374655231015675 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Pablo Angulo '''Script to export zim wiki pages to trac / mediawiki To use it, call python trac2zim.py notebook output_folder prefix where prefix is a string you put before each wiki page name. It will fill output_folder with plain text files ready to be loaded with trac-admin: trac-admin /path/to/project wiki load output_folder zim links like [[:Software:note taking:zim|zim]] are flattened to wiki entries like [Software_note_taking_zim zim]. ''' import re import sys import os #buscaCabeceras=re.compile('(={1:5})([^=]*)(={1:5})') def flatten(linkName): '''Changes a zim link, possibly with categories, to a trac link it also removes accents and other spanish special characters ''' #remove final ':' character and name=linkName[:-1] if linkName[-1]==':' else linkName return removeSpecialChars(name.replace(':','_').replace(' ','_')) def removeSpecialChars(s): '''certain trac installation reported problems with special chars other trac systems loaded all files without problem the problem is only for file names and wiki pages names, not for content ''' return s.replace('á','a').replace('é','e').replace('í','i').replace('ó','o').replace('ú','u').replace('ñ','n').replace('Á','A').replace('É','E').replace('Í','I').replace('Ó','O').replace('Ú','U').replace('Ñ','ñ') cabecera=re.compile("(={1,6})([^=\/]+?)(={1,6})") inlineVerbatim=re.compile("''([^']+?)''") #~ multilineVerbatim=re.compile("\n[\t](.+?)\n") negrita=re.compile('\*\*([^\*]+?)\*\*') italic=re.compile('\/\/([^\/\n\]]+?)\/\/') bracketedURL=re.compile('\[\[(http:\/\/[^\|]+)\|([^\|]+?)\]\]') #TODO: separar links relativos y absolutos simpleRelLink=re.compile('\[\[([^:][^\|]+?)\]\]') namedRelLink=re.compile('\[\[([^:][^\|]+?)\|([^\|]+?)\]\]') simpleAbsLink=re.compile('\[\[:([^\|]+?)\]\]') namedAbsLink=re.compile('\[\[:([^\|]+?)\|([^\|]+?)\]\]') images=re.compile('([^\{])\{\{\/(.+?)\}\}') def translate(nota,prefix1,prefix2): '''Takes a note in zim format and returns a note in trac format ''' #duplicate all line breaks nota=nota.replace('\n','\n\n') # Headings mm=cabecera.search(nota) lista=[] lastIndex=0 while mm: lista.append(nota[lastIndex:mm.start()]) gg=mm.groups() iguales=len(gg[0]) lista.append("="*(7-iguales)+gg[1]+"="*(7-iguales)) lastIndex=mm.end() mm=cabecera.search(nota,lastIndex) lista.append(nota[lastIndex:]) nota=''.join(lista) #inlineVerbatim nota=inlineVerbatim.sub("{{{\\1}}}",nota) #multiline verbatim #TODO #bold nota=negrita.sub("'''\\1'''",nota) #italic nota=italic.sub("''\\1''",nota) #bracketedURL nota = bracketedURL.sub("[\\1 \\2]",nota) #~ #simple links #~ nota=simpleLink.sub("[wiki:\\1]",nota) #~ #named links #~ nota=namedLink.sub("[wiki:\\1 \\2]",nota) #simple relative links mm=simpleRelLink.search(nota) lista=[] lastIndex=0 while mm: lista.append(nota[lastIndex:mm.start()]) gg0=mm.groups()[0] lista.append("[wiki:"+prefix1+prefix2+flatten(gg0)+" "+gg0+"]") lastIndex=mm.end() mm=simpleRelLink.search(nota,lastIndex) lista.append(nota[lastIndex:]) nota=''.join(lista) mm=simpleAbsLink.search(nota) lista=[] lastIndex=0 while mm: lista.append(nota[lastIndex:mm.start()]) gg0=mm.groups()[0] lista.append("[wiki:"+prefix1+flatten(gg0)+" "+gg0+"]") lastIndex=mm.end() mm=simpleAbsLink.search(nota,lastIndex) lista.append(nota[lastIndex:]) nota=''.join(lista) #named relativelinks mm=namedRelLink.search(nota) lista=[] lastIndex=0 while mm: lista.append(nota[lastIndex:mm.start()]) gg=mm.groups() lista.append("[wiki:"+prefix1+prefix2+flatten(gg[0])+" "+gg[1]+"]") lastIndex=mm.end() mm=namedRelLink.search(nota,lastIndex) lista.append(nota[lastIndex:]) nota=''.join(lista) #named absolute links mm=namedAbsLink.search(nota) lista=[] lastIndex=0 while mm: lista.append(nota[lastIndex:mm.start()]) gg=mm.groups() lista.append("[wiki:"+prefix1+flatten(gg[0])+" "+gg[1]+"]") lastIndex=mm.end() mm=namedAbsLink.search(nota,lastIndex) lista.append(nota[lastIndex:]) nota=''.join(lista) #lists nota=nota.replace('\n* ','\n * ') #images nota=images.sub("\\1[[Image(\\2)]]",nota) return nota def processPath(pathin,pathout,prefix1,prefix2=''): for archivo in os.listdir(pathin): fullPath=os.path.join(pathin,archivo) if archivo[-3:]=='txt': fichero=open(fullPath,mode='r') nota=fichero.read() fichero.close() nota_out=translate(nota,prefix1,prefix2) #~ nameout= prefix+"_"+archivo[:-4] if prefix else archivo[:-4] fichero=open(os.path.join(pathout,prefix1+prefix2+removeSpecialChars(archivo[:-4])),mode='w') fichero.write(nota_out) fichero.close() elif os.path.isdir(fullPath): print pathin,archivo,fullPath processPath(fullPath,pathout,prefix1,prefix2+removeSpecialChars(archivo)+"_") if __name__=='__main__': pathin=sys.argv[1] pathout=sys.argv[2] prefix=sys.argv[3] processPath(pathin,pathout,prefix) zim-0.65/tests/0000775000175000017500000000000012615422672013266 5ustar jaapjaap00000000000000zim-0.65/tests/plugins.py0000664000175000017500000001302512614412356015317 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg import tests import os from zim.plugins import * from zim.fs import File from zim.gui.propertiesdialog import PropertiesDialog from tests.gui import setupGtkInterface assert len(zim.plugins.__path__) > 1 # test __path__ magic zim.plugins.__path__ = [os.path.abspath('./zim/plugins')] # set back default search path class TestPluginClasses(tests.TestCase): '''Test case to check coding and documentation of plugin classes''' def runTest(self): plugins = PluginManager.list_installed_plugins() self.assertTrue(len(plugins) > 10) self.assertTrue('spell' in plugins) self.assertTrue('linkmap' in plugins) pluginindex = File('data/manual/Plugins.txt').read() seen = { 'name': set(), 'description': set(), 'help': set(), } for name in plugins: #~ print '>>', name klass = PluginManager.get_plugin_class(name) # test plugin info for key in ('name', 'description', 'author'): self.assertTrue( klass.plugin_info.get(key), 'Plugin %s misses info field \'%s\'' % (name, key) ) for key in ('name', 'description', 'help'): self.assertIn(key, klass.plugin_info, 'Plugin %s missing "%s"' % (name, key)) value = klass.plugin_info[key] self.assertFalse( value in seen[key], 'Value for \'%s\' in %s seen before - copy-paste error ?' % (key, name) ) seen[key].add(value) # test manual page present and at least documents preferences page = klass.plugin_info['help'] self.assertTrue(page.startswith('Plugins:'), 'Help page for %s not valid' % name) rellink = "+%s" % page[8:] self.assertIn(rellink, pluginindex, 'Missing links "%s" in manual/Plugins.txt' % rellink) file = File('data/manual/' + page.replace(':', '/').replace(' ', '_') + '.txt') self.assertTrue(file.exists(), 'Missing file: %s' % file) manual = file.read() for pref in klass.plugin_preferences: label = pref[2] if '\n' in label: label, x = label.split('\n', 1) label = label.rstrip(',') self.assertIn(label, manual, 'Preference "%s" for %s plugin not documented in manual page' % (label, name)) # test dependencies data dep = klass.check_dependencies() self.assertTrue(isinstance(dep,tuple)) check, dep = dep self.assertTrue(isinstance(check,bool)) self.assertTrue(isinstance(dep,list)) for i in range(len(dep)): self.assertTrue(isinstance(dep[i],tuple)) self.assertTrue(isinstance(dep[i][0],str)) self.assertTrue(isinstance(dep[i][1],bool)) self.assertTrue(isinstance(dep[i][2],bool)) class TestPluginManager(tests.TestCase): '''Test case for TestManager infrastructure''' def testLoadAndRemovePlugin(self): manager = PluginManager() self.assertEqual(len(manager), 0) self.assertEqual(list(manager), []) obj = manager.load_plugin('calendar') self.assertEqual(len(manager), 1) self.assertEqual(list(manager), ['calendar']) self.assertEqual(manager['calendar'], obj) obj1 = manager.load_plugin('calendar') # redundant call self.assertEqual(obj1, obj) self.assertEqual(len(manager), 1) manager.remove_plugin('calendar') self.assertEqual(len(manager), 0) self.assertEqual(list(manager), []) self.assertRaises(KeyError, manager.__getitem__, 'calendar') manager.remove_plugin('calendar') # redundant call def testLoadNonExistingPlugin(self): manager = PluginManager() self.assertRaises(ImportError, manager.load_plugin, 'nonexistingplugin') def testProfileSwitch(self): # Two lists of plugins without dependencies - with some overlap list_a = ['attachmentbrowser', 'backlinkpane', 'calendar', 'distractionfree', 'insertsymbol'] list_b = ['calendar', 'distractionfree', 'insertsymbol', 'printtobrowser', 'quicknote'] manager = PluginManager() for name in list_a: manager.load_plugin(name) self.assertEqual(manager.general_preferences['plugins'], list_a) manager.general_preferences['plugins'] = list_b self.assertEqual(sorted(manager._plugins), list_b) class TestPlugins(tests.TestCase): '''Test case to initiate all (loadable) plugins and load some extensions''' def runTest(self): manager = PluginManager() preferences = manager.config.get_config_dict('/preferences.conf') self.assertFalse(preferences.modified) for name in PluginManager.list_installed_plugins(): klass = PluginManager.get_plugin_class(name) if klass.check_dependencies_ok(): manager.load_plugin(name) self.assertIn(name, manager) self.assertFalse(preferences.modified, 'Plugin "%s" modified the preferences while loading' % name) self.assertTrue(len(manager) > 3) for i, name in enumerate(manager): manager[name].preferences.emit('changed') # Checking for exceptions and infinite recursion self.assertTrue(i > 0) #~ self.assertTrue(preferences.modified) # If "False" the check while loading the plugins is not valid # FIXME this detection is broken due to autosave in ConfigManager ... notebook = tests.new_notebook(self.get_tmp_name()) ui = setupGtkInterface(self, notebook=notebook) dialog = PropertiesDialog(ui) # random dialog for obj in ( notebook, notebook.index, ui.mainwindow, ui.mainwindow.pageview, dialog, ): manager.extend(obj) for i, name in enumerate(manager): manager[name].preferences.emit('changed') # Checking for exceptions and infinite recursion for name in manager: #~ print "REMOVE:", name self.assertIsInstance(manager[name], PluginClass) manager.remove_plugin(name) self.assertNotIn(name, manager) self.assertTrue(len(manager) == 0) zim-0.65/tests/bookmarksbar.py0000664000175000017500000002016312600757677016331 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2015 Pavel_M . # This is the test for BookmarksBar plugin. # BookmarksBar is the plugin for Zim program # by Jaap Karssenberg . import tests import gtk from zim.notebook import Path from zim.plugins.bookmarksbar import * from zim.config import ConfigDict from zim.gui.clipboard import Clipboard import logging logger = logging.getLogger('zim.plugins.bookmarksbar') class TestBookmarksBar(tests.TestCase): def setUp(self): self.notebook = tests.new_notebook() self.index = self.notebook.index def runTest(self): '''There is one long test.''' ui = MockUI() ui.notebook = self.notebook ui.page = Path('Test:foo') uistate = ConfigDict() self.assertTrue(self.notebook.get_page(ui.page).exists()) PATHS = ('Parent:Daughter:Granddaughter', 'Test:tags', 'Test:foo', 'Books') LEN_PATHS = len(PATHS) PATHS_NAMES = {PATHS[0]:'name 1', PATHS[1]:'name 2', PATHS[2]:'name 3'} # Check correctness of reading uistate. uistate.setdefault('bookmarks', []) uistate.setdefault('bookmarks_names', {}) uistate['bookmarks'] = list(PATHS) uistate['bookmarks_names'] = dict(PATHS_NAMES) Bar = BookmarkBar(ui, uistate, get_page_func = lambda: '') self.assertTrue(Bar.paths == list(PATHS)) self.assertTrue(Bar.paths_names == PATHS_NAMES) uistate['bookmarks'] = [] uistate['bookmarks_names'] = {} Bar = BookmarkBar(ui, uistate, get_page_func = lambda: '') self.assertTrue(Bar.paths == []) self.assertTrue(Bar.paths_names == {}) # Add paths to the beginning of the bar. for i, path in enumerate(PATHS): Bar._add_new(path, add_bookmarks_to_beginning = True) self.assertTrue(len(Bar.paths) == i + 1) self.assertTrue(Bar.paths == list(reversed(PATHS))) # Add paths to the end of the bar. Bar.paths = [] for i, path in enumerate(PATHS): Bar._add_new(path, add_bookmarks_to_beginning = False) self.assertTrue(len(Bar.paths) == i + 1) self.assertTrue(Bar.paths == list(PATHS)) # Check that the same path can't be added to the bar. Bar._add_new(PATHS[0]) Bar._add_new(PATHS[1]) self.assertTrue(Bar.paths == list(PATHS)) # Delete paths from the bar. for i, button in enumerate(Bar.container.get_children()[2:]): path = button.zim_path self.assertTrue(path in Bar.paths) Bar.delete(button.zim_path) self.assertTrue(len(Bar.paths) == LEN_PATHS - i - 1) self.assertTrue(path not in Bar.paths) self.assertTrue(Bar.paths == []) # Check short page names. uistate['show_full_page_name'] = False for path in PATHS: Bar._add_new(path) self.assertTrue(Bar.paths == list(PATHS)) for i, button in enumerate(Bar.container.get_children()[2:]): self.assertTrue(PATHS[i] == button.zim_path) self.assertTrue(Path(PATHS[i]).basename == button.get_label()) uistate['show_full_page_name'] = True # Delete all bookmarks from the bar. Bar.delete_all() self.assertTrue(Bar.paths == []) # Check restriction of max bookmarks in the bar. pagelist = set(self.index.list_pages(None)) _enhanced_pagelist = set() for page in pagelist: _enhanced_pagelist.update( set(self.index.list_pages(page)) ) if len(_enhanced_pagelist) > MAX_BOOKMARKS: break pagelist.update(_enhanced_pagelist) self.assertTrue(len(pagelist) > MAX_BOOKMARKS) pagelist = list(pagelist) for page in pagelist: Bar._add_new(page.name) self.assertTrue(len(Bar.paths) == MAX_BOOKMARKS) self.assertTrue(Bar.paths == [a.name for a in pagelist[:MAX_BOOKMARKS]]) Bar.delete_all() # Check 'save' option in preferences. for i, path in enumerate(PATHS): Bar.on_preferences_changed({'save':False, 'add_bookmarks_to_beginning':False}) Bar._add_new(path) self.assertTrue(uistate['bookmarks'] == []) Bar.on_preferences_changed({'save':True, 'add_bookmarks_to_beginning':False}) self.assertTrue(uistate['bookmarks'] == list(PATHS[:i+1])) self.assertTrue(uistate['bookmarks'] == list(PATHS)) # Check changing a bookmark. self.assertTrue('Test' not in Bar.paths) self.assertTrue('Books' in Bar.paths) Bar.change_bookmark('Books', 'Books') self.assertTrue(Bar.paths == list(PATHS)) _b_paths = [a for a in Bar.paths if a != 'Books'] Bar.change_bookmark('Books', 'Test') self.assertTrue('Test' in Bar.paths) self.assertTrue('Books' not in Bar.paths) _e_paths = [a for a in Bar.paths if a != 'Test'] self.assertTrue(_b_paths == _e_paths) Bar.change_bookmark('Test', 'Books') self.assertTrue(Bar.paths == list(PATHS)) # Check deleting a bookmark after deleting a page in the notebook. self.assertTrue(len(Bar.paths) == LEN_PATHS) for i, path in enumerate(PATHS): self.assertTrue(path in Bar.paths) self.notebook.delete_page(Path(path)) self.assertTrue(path not in Bar.paths) self.assertTrue(len(Bar.paths) == LEN_PATHS - i - 1) self.assertTrue(Bar.paths == []) # Check reordering bookmarks. PATHS_2 = ('1','2','3','4','5') PATHS_NAMES_2 = {PATHS_2[0]:'11', PATHS_2[1]:'22', PATHS_2[2]:'33'} Bar.paths = list(PATHS_2) Bar.move_bookmark(PATHS_2[2], PATHS_2[2], 'left') self.assertTrue(Bar.paths == list(PATHS_2)) Bar.move_bookmark(PATHS_2[3], PATHS_2[3], 'right') self.assertTrue(Bar.paths == list(PATHS_2)) Bar.move_bookmark('3', '1', 'left') self.assertTrue(Bar.paths == ['3','1','2','4','5']) Bar.move_bookmark('5', '1', 'left') self.assertTrue(Bar.paths == ['3','5','1','2','4']) Bar.move_bookmark('5', '1', 'right') self.assertTrue(Bar.paths == ['3','1','5','2','4']) Bar.move_bookmark('3', '4', 'right') self.assertTrue(Bar.paths == ['1','5','2','4','3']) Bar.move_bookmark('5', '4', '-') self.assertTrue(Bar.paths == ['1','5','2','4','3']) # CHECK RENAMING # Check rename_bookmark and save options. Bar.paths = list(PATHS_2) button = gtk.Button(label = PATHS_2[0], use_underline = False) button.zim_path = PATHS_2[0] Bar.on_preferences_changed({'save':True, 'add_bookmarks_to_beginning':False}) Bar._reload_bar() def rename_check(label, path, paths_names, path_names_uistate): self.assertTrue(button.get_label() == label) self.assertTrue(button.zim_path == path) self.assertTrue(Bar.paths_names == paths_names) self.assertTrue(uistate['bookmarks_names'] == path_names_uistate) rename_check(PATHS_2[0], PATHS_2[0], {}, {}) Clipboard.set_text('new name') Bar.rename_bookmark(button) rename_check('new name', PATHS_2[0], {PATHS_2[0]:'new name'}, {PATHS_2[0]:'new name'}) Bar.on_preferences_changed({'save':False, 'add_bookmarks_to_beginning':False}) rename_check('new name', PATHS_2[0], {PATHS_2[0]:'new name'}, {}) Bar.on_preferences_changed({'save':True, 'add_bookmarks_to_beginning':False}) rename_check('new name', PATHS_2[0], {PATHS_2[0]:'new name'}, {PATHS_2[0]:'new name'}) Bar.rename_bookmark(button) rename_check(PATHS_2[0], PATHS_2[0], {}, {}) # Check delete with renaming. Bar.on_preferences_changed({'save':True, 'add_bookmarks_to_beginning':False}) paths_names_copy = dict(PATHS_NAMES_2) Bar.paths_names = dict(PATHS_NAMES_2) for key in PATHS_NAMES_2: Bar.delete(key) del paths_names_copy[key] self.assertTrue(Bar.paths_names == paths_names_copy) self.assertTrue(uistate['bookmarks_names'] == Bar.paths_names) # Check delete all with renaming. Bar.paths_names = dict(PATHS_NAMES_2) Bar.delete_all() self.assertTrue(Bar.paths_names == {}) self.assertTrue(uistate['bookmarks_names'] == {}) # Check change bookmark with renaming. Bar.paths = list(PATHS_2) Bar.paths_names = dict(PATHS_NAMES_2) paths_names_copy = dict(PATHS_NAMES_2) paths_names_copy.pop(PATHS_2[0], None) Bar.change_bookmark(PATHS_2[0], 'new path') self.assertTrue(Bar.paths_names == paths_names_copy) self.assertTrue(Bar.paths == ['new path'] + list(PATHS_2[1:])) # Check that paths and paths_names didn't change in the process. self.assertTrue(PATHS_2 == ('1','2','3','4','5')) self.assertTrue(PATHS_NAMES_2 == {PATHS_2[0]:'11', PATHS_2[1]:'22', PATHS_2[2]:'33'}) class MockUI(tests.MockObject): page = None notebook = None zim-0.65/tests/formats.py0000664000175000017500000005023312375712515015317 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2012 Jaap Karssenberg '''Test cases for the zim.formats module.''' from __future__ import with_statement import tests from zim.formats import * from zim.fs import File from zim.notebook import Path, Link from zim.parsing import link_type from zim.templates import Template if not ElementTreeModule.__name__.endswith('cElementTree'): print 'WARNING: using ElementTree instead of cElementTree' class TestFormatMixin(object): '''Mixin for testing formats, uses data in C{tests/data/formats/}''' reference_xml = File('tests/data/formats/parsetree.xml').read().rstrip('\n') reference_data = { 'wiki': 'wiki.txt', 'plain': 'plain.txt', 'html': 'export.html', 'latex': 'export.tex', 'markdown': 'export.markdown', 'reST': 'export.rst', } def testFormatInfo(self): for key in ('name', 'desc', 'mimetype', 'extension'): self.assertIsInstance(self.format.info[key], basestring, msg='Invalid key "%s" in format info' % key) for key in ('native', 'import', 'export'): self.assertIsInstance(self.format.info[key], bool, msg='Invalid key "%s" in format info' % key) if self.format.info['native'] or self.format.info['import']: self.assertTrue(hasattr(self.format, 'Parser')) if self.format.info['native'] or self.format.info['export']: self.assertTrue(hasattr(self.format, 'Dumper')) def getReferenceData(self): '''Returns reference data from C{tests/data/formats/} for the format being tested. ''' name = self.format.info['name'] assert name in self.reference_data, 'No reference data for format "%s"' % name path = 'tests/data/formats/' + self.reference_data[name] text = File(path).read() # No absolute paths ended up in reference pwd = Dir('.') self.assertFalse(pwd.path in text, 'Absolute path ended up in reference') self.assertFalse(pwd.user_path in text, 'Absolute path ended up in reference') return text def testFormat(self): '''Test if formats supports full syntax Uses data in C{tests/data/formats} as reference data. ''' # Dumper wanted = self.getReferenceData() reftree = tests.new_parsetree_from_xml(self.reference_xml) linker = StubLinker(Dir('tests/data/formats')) dumper = self.format.Dumper(linker=linker) result = ''.join(dumper.dump(reftree)) #~ print '\n' + '>'*80 + '\n' + result + '\n' + '<'*80 + '\n' self.assertMultiLineEqual(result, wanted) self.assertNoTextMissing(result, reftree) # Check that dumper did not modify the tree self.assertMultiLineEqual(reftree.tostring(), self.reference_xml) # partial dumper parttree = tests.new_parsetree_from_xml("\ntry these bold, italic") result = ''.join(dumper.dump(parttree)) #~ print ">>>%s<<<" % result self.assertFalse(result.endswith('\n')) # partial should not end with "\n" # Parser if not hasattr(self.format, 'Parser'): return input = wanted parser = self.format.Parser() result = parser.parse(input) if self.format.info['native']: self.assertMultiLineEqual(result.tostring(), self.reference_xml) else: self.assertTrue(len(result.tostring().splitlines()) > 10) # Quick check that we got back *something* string = ''.join(dumper.dump(result)) # now we may have loss of formatting, but text should all be there #~ print '\n' + '>'*80 + '\n' + string + '\n' + '<'*80 + '\n' self.assertNoTextMissing(string, reftree) _nonalpha_re = re.compile('\W') def assertNoTextMissing(self, text, tree): '''Assert that no plain text from C{tree} is missing in C{text} intended to make sure that even for lossy formats all information is preserved. ''' # TODO how to handle objects ?? assert isinstance(text, basestring) offset = 0 for elt in tree._etree.iter(): if elt.tag == 'img': elttext = (elt.tail) # img text is optional else: elttext = (elt.text, elt.tail) for wanted in elttext: if not wanted: continue wanted = self._nonalpha_re.sub(' ', wanted) # Non-alpha chars may be replaced with escapes # so no way to hard test them if wanted.isspace(): continue for piece in wanted.strip().split(): #~ print "| >>%s<< @ offset %i" % (piece, offset) try: start = text.index(piece, offset) except ValueError: self.fail('Could not find text piece "%s" in text after offset %i\n>>>%s<<<' % (piece, offset, text[offset:offset+100])) else: offset = start + len(piece) class TestListFormats(tests.TestCase): def runTest(self): for desc in list_formats(EXPORT_FORMAT): name = canonical_name(desc) format = get_format(name) self.assertTrue(format.info['export']) for desc in list_formats(TEXT_FORMAT): name = canonical_name(desc) format = get_format(name) self.assertTrue(format.info['export']) self.assertTrue(format.info['mimetype'].startswith('text/')) class TestParseTree(tests.TestCase): def setUp(self): self.xml = '''\ Head 1 Head 2 Head 3 Head 4 Head 5 Head 6 Head 7 Head 8 ''' def teststring(self): '''Test ParseTree.fromstring() and .tostring()''' tree = ParseTree() r = tree.fromstring(self.xml) self.assertEqual(id(r), id(tree)) # check return value text = tree.tostring() self.assertEqual(text, self.xml) def testcleanup_headings(self): '''Test ParseTree.cleanup_headings()''' tree = ParseTree().fromstring(self.xml) wanted = '''\ Head 1 Head 2 Head 3 Head 4 Head 5 Head 6 Head 7 Head 8 ''' tree.cleanup_headings(offset=1, max=4) text = tree.tostring() self.assertEqual(text, wanted) def testGetHeading(self): '''Test that ParseTree.get_heading() returns the first header's text. ''' tree = ParseTree().fromstring(self.xml) self.assertEqual(tree.get_heading(), "Head 1") def testSetHeading(self): '''Test ParseTree.set_heading()''' tree = ParseTree().fromstring(self.xml) tree.set_heading('Foo') wanted = '''\ Foo Head 2 Head 3 Head 4 Head 5 Head 6 Head 7 Head 8 ''' text = tree.tostring() self.assertEqual(text, wanted) def testExtend(self): tree1 = ParseTree().fromstring(self.xml) tree2 = ParseTree().fromstring(self.xml) tree = tree1 + tree2 wanted = '''\ Head 1 Head 2 Head 3 Head 4 Head 5 Head 6 Head 7 Head 8 Head 1 Head 2 Head 3 Head 4 Head 5 Head 6 Head 7 Head 8 ''' text = tree.tostring() self.assertEqual(text, wanted) def testGetEndsWithNewline(self): for xml, newline in ( ('foo', False), ('foo', False), ('foo\n', True), ('foo\n', True), ('foo\n', False), ('
  • foo
  • ', True), ('
  • foo
  • ', True), ('
  • foo
  • ', True), ): tree = ParseTree().fromstring(xml) self.assertEqual(tree.get_ends_with_newline(), newline) def testGetObjects(self): xml = File('tests/data/formats/parsetree.xml').read().rstrip('\n') tree = tests.new_parsetree_from_xml(xml) objects = list(tree.get_objects()) self.assertTrue(len(objects) >= 2) def testFindall(self): tree = ParseTree().fromstring(self.xml) wanted = [ (1, 'Head 1'), (2, 'Head 2'), (3, 'Head 3'), (2, 'Head 4'), (5, 'Head 5'), (4, 'Head 6'), (5, 'Head 7'), (6, 'Head 8'), ] found = [] for elt in tree.findall(HEADING): found.append((int(elt.get('level')), elt.gettext())) self.assertEqual(found, wanted) def testReplace(self): def replace(elt): # level 2 becomes 3 # level 3 is replaced by text # level 4 is removed # level 5 is skipped # level 1 and 6 stay as is level = int(elt.get('level')) if level == 2: elt.attrib['level'] = 3 return elt elif level == 3: return DocumentFragment(*elt) elif level == 4: return None elif level == 5: raise VisitorSkip else: return elt tree = ParseTree().fromstring(self.xml) wanted = '''\ Head 1 Head 2 Head 3 Head 4 Head 5 Head 7 Head 8 ''' tree.replace(HEADING, replace) text = tree.tostring() self.assertEqual(text, wanted) class TestTextFormat(tests.TestCase, TestFormatMixin): def setUp(self): self.format = get_format('plain') class TestWikiFormat(TestTextFormat): def setUp(self): self.format = get_format('wiki') notebook = tests.new_notebook() self.page = notebook.get_page(Path('Foo')) #~ def testHeaders(self): #~ text = '''\ #~ Content-Type: text/x-zim-wiki #~ Wiki-Format: zim 0.26 #~ Creation-Date: Unkown #~ Modification-Date: Wed, 06 Aug 2008 22:17:29 +0200 #~ #~ foo bar #~ ''' #~ tree = self.format.Parser().parse(text) #~ print '>>>\n'+tostring(tree)+'\n<<<\n' #~ self.assertEquals(tree.getroot().attrib['Content-Type'], 'text/x-zim-wiki') #~ output = self.format.Dumper().dump(tree) #~ self.assertEqual(output, text.splitlines(True)) def testUnicodeBullet(self): '''Test support for unicode bullets in source''' input = u'''\ A list • foo • bar • baz ''' text = u'''\ A list * foo * bar * baz ''' tree = self.format.Parser().parse(input) #~ print tree.tostring() output = self.format.Dumper().dump(tree) self.assertEqual(''.join(output), text) def testLink(self): '''Test iterator function for link''' # + check for bugs in link encoding text = '[[FooBar]] [[Foo|]] [[|Foo]] [[||]]' tree = self.format.Parser().parse(text) #~ print tree.tostring() found = 0 for elt in tree.findall(LINK): self.assertTrue(elt.gettext()) self.assertTrue(elt.get('href')) link = Link(self.page, **elt.attrib) self.assertEqual(elt.attrib['href'], link.href) found += 1 self.assertEqual(found, 3) def testBackward(self): '''Test backward compatibility for wiki format''' input = u'''\ test 1 2 3 Some Verbatim block here .... test 4 5 6 ''' wanted = u'''\ test 1 2 3 \''' Some Verbatim block here .... \''' test 4 5 6 ''' xml = '''\

    test 1 2 3

    	Some Verbatim block
    	here ....
    

    test 4 5 6

    ''' t = self.format.Parser(version='Unknown').parse(input) self.assertEqual(t.tostring(), xml) output = self.format.Dumper().dump(t) self.assertEqual(output, wanted.splitlines(True)) def testList(self): def check(text, xml, wanted=None): if wanted is None: wanted = text tree = self.format.Parser().parse(text) #~ print '>>>\n' + tree.tostring() + '\n<<<' self.assertEqual(tree.tostring(), xml) lines = self.format.Dumper().dump(tree) result = ''.join(lines) #~ print '>>>\n' + result + '<<<' self.assertEqual(result, wanted) # Bullet list (unordered list) text = '''\ * foo * bar * sub list * here * hmmm ''' xml = '''\

    • foo
    • bar
      • sub list
      • here
    • hmmm

    ''' check(text, xml) # Numbered list (ordered list) text = '''\ 1. foo 2. bar a. sub list b. here 3. hmmm ''' xml = '''\

    1. foo
    2. bar
      1. sub list
      2. here
    3. hmmm

    ''' check(text, xml) text = '''\ A. foo B. bar C. hmmm ''' xml = '''\

    1. foo
    2. bar
    3. hmmm

    ''' check(text, xml) text = '''\ 10. foo 11. bar 12. hmmm ''' xml = '''\

    1. foo
    2. bar
    3. hmmm

    ''' check(text, xml) # Inconsistent lists # ( If first item is number, make all items numbered in sequence # Otherwise numers will be turned into bullets ) text = '''\ 1. foo 4. bar * hmmm a. dus ''' xml = '''\

    1. foo
    2. bar
    3. hmmm
    4. dus

    ''' wanted = '''\ 1. foo 2. bar 3. hmmm 4. dus ''' check(text, xml, wanted) text = '''\ * foo 4. bar a. hmmm * dus ''' xml = '''\

    • foo
    • bar
    • hmmm
    • dus

    ''' wanted = '''\ * foo * bar * hmmm * dus ''' check(text, xml, wanted) # Mixed sub-list text = '''\ * foo * bar 1. sub list 2. here * hmmm ''' xml = '''\

    • foo
    • bar
      1. sub list
      2. here
    • hmmm

    ''' check(text, xml) # Indented list text = '''\ * foo * bar 1. sub list 2. here * hmmm ''' xml = '''\

    • foo
    • bar
      1. sub list
      2. here
    • hmmm

    ''' check(text, xml) # Double indent sub-list ? text = '''\ * foo * bar 1. sub list 2. here * hmmm ''' xml = '''\

    • foo
    • bar
        1. sub list
        2. here
    • hmmm

    ''' check(text, xml) # This is not a list text = '''\ foo. dus ja. 1.3 ''' xml = '''\

    foo. dus ja. 1.3

    ''' check(text, xml) def testIndent(self): # Test some odditied pageview can give us xml = '''\
    foo
    bar
    sub list
    here
    hmmm
    ''' wanted = '''\ foo bar sub list here hmmm ''' tree = ParseTree() tree.fromstring(xml) text = ''.join( self.format.Dumper().dump(tree) ) self.assertEqual(text, wanted) class TestHtmlFormat(tests.TestCase, TestFormatMixin): def setUp(self): self.format = get_format('html') notebook = tests.new_notebook() self.page = notebook.get_page(Path('Foo')) def testEncoding(self): '''Test HTML encoding''' builder = ParseTreeBuilder() builder.start(FORMATTEDTEXT) builder.append(PARAGRAPH, None, '"foo" & "bar"\n') builder.end(FORMATTEDTEXT) tree = builder.get_parsetree() html = self.format.Dumper(linker=StubLinker()).dump(tree) self.assertEqual(''.join(html), '

    \n<foo>"foo" & "bar"</foo>\n

    \n') # TODO add test using http://validator.w3.org def testEmptyLines(self): builder = ParseTreeBuilder() builder.start(FORMATTEDTEXT) builder.append(HEADING, {'level':1}, 'head1') builder.text('\n') builder.append(HEADING, {'level':2}, 'head2') builder.end(FORMATTEDTEXT) tree = builder.get_parsetree() html = self.format.Dumper( linker=StubLinker(), template_options={'empty_lines': 'default'} ).dump(tree) self.assertEqual(''.join(html), '

    head1

    \n\n' '
    \n\n' '

    head2

    \n\n' ) html = self.format.Dumper( linker=StubLinker(), template_options={'empty_lines': 'remove'} ).dump(tree) self.assertEqual(''.join(html), '

    head1

    \n\n' '

    head2

    \n\n' ) html = self.format.Dumper( linker=StubLinker(), template_options={'empty_lines': 'Remove'} # case sensitive ).dump(tree) self.assertEqual(''.join(html), '

    head1

    \n\n' '

    head2

    \n\n' ) def testLineBreaks(self): builder = ParseTreeBuilder() builder.start(FORMATTEDTEXT) builder.append(PARAGRAPH, None, 'bla bla bla\n' 'bla bla bla\n' ) builder.end(FORMATTEDTEXT) tree = builder.get_parsetree() html = self.format.Dumper( linker=StubLinker(), template_options={'line_breaks': 'default'} ).dump(tree) self.assertEqual(''.join(html), '

    \n' 'bla bla bla
    \n' 'bla bla bla\n' '

    \n' ) html = self.format.Dumper( linker=StubLinker(), template_options={'line_breaks': 'remove'} ).dump(tree) self.assertEqual(''.join(html), '

    \n' 'bla bla bla\n' 'bla bla bla\n' '

    \n' ) class TestMarkdownFormat(tests.TestCase, TestFormatMixin): def setUp(self): self.format = get_format('markdown') class TestRstFormat(tests.TestCase, TestFormatMixin): def setUp(self): self.format = get_format('rst') class LatexLoggingFilter(tests.LoggingFilter): logger = 'zim.formats.latex' message = ('No document type set in template', 'Could not find latex equation') class TestLatexFormat(tests.TestCase, TestFormatMixin): def setUp(self): self.format = get_format('latex') def testFormat(self): with LatexLoggingFilter(): TestFormatMixin.testFormat(self) def testFormatReference(self): # Double check reference did not get broken in updating text = self.getReferenceData() # Inlined equation is there self.assertFalse('equation001.png' in text, 'This equation should be inlined') self.assertTrue(r'\begin{math}' in text) self.assertTrue(r'\end{math}' in text) def testEncode(self): '''test the escaping of certain characters''' format = get_format('latex') input = r'\foo $ % ^ \% bar < >' wanted = r'$\backslash$foo \$ \% \^{} $\backslash$\% bar \textless{} \textgreater{}' self.assertEqual(format.Dumper.encode_text(PARAGRAPH, input), wanted) def testDocumentType(self): builder = ParseTreeBuilder() builder.start(FORMATTEDTEXT) builder.append(HEADING, {'level':1}, 'head1') builder.text('\n') builder.append(HEADING, {'level':2}, 'head2') builder.end(FORMATTEDTEXT) tree = builder.get_parsetree() for type, head1 in ( ('report', 'chapter'), ('article', 'section'), ('book', 'part'), ): lines = self.format.Dumper( linker=StubLinker(), template_options={'document_type': type} ).dump(tree) self.assertIn(head1, ''.join(lines)) class StubFile(object): def __init__(self, path, text): self.path = path self.text = text def read(self): return self.text class TestOldParseTreeBuilder(tests.TestCase): def runTest(self): '''Test OldParseTreeBuilder class''' # - Test \n before and after h / p / pre # - Test break line into lines input = '''\ foobarbaz dus
    ja
    hmm foo bar dus ja hmm dus ja grrr foo bar .
    ''' wanted = '''\ foo bar baz dus
    ja
    
    hmm foo bar dus ja hmm dus ja grrr foo bar .
    ''' # For some reason this does not work with cElementTree.XMLBuilder ... from xml.etree.ElementTree import XMLTreeBuilder builder = XMLTreeBuilder(target=OldParseTreeBuilder()) builder.feed(input) root = builder.close() tree = ParseTree(root) self.assertEqual(tree.tostring(), wanted) zim-0.65/tests/objectmanager.py0000664000175000017500000000403512521361062016432 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jaap Karssenberg import tests from zim.objectmanager import * class TestObjectManager(tests.TestCase): def runTest(self): '''Test object manager for inline objects''' manager = ObjectManager # registering self.assertFalse(manager.is_registered('classa')) self.assertFalse(manager.is_registered('classb')) self.assertFalse(manager.is_registered('foo')) manager.register_object('classa', classafactory) manager.register_object('classb', ClassB) self.assertTrue(manager.is_registered('classa')) self.assertTrue(manager.is_registered('classb')) self.assertFalse(manager.is_registered('foo')) # get objects self.assertEqual(list(manager.get_active_objects('classa')), []) self.assertEqual(list(manager.get_active_objects('classb')), []) obj = manager.get_object('classa', {}, '') self.assertTrue(isinstance(obj, ClassA)) self.assertEqual(list(manager.get_active_objects('classa')), [obj]) self.assertEqual(list(manager.get_active_objects('classb')), []) self.assertTrue(isinstance(manager.get_object('classb', {}, ''), ClassB)) self.assertTrue(isinstance(manager.get_object('foo', {}, ''), FallbackObject)) # unregister self.assertTrue(manager.is_registered('classa')) self.assertTrue(manager.unregister_object('classa')) self.assertFalse(manager.is_registered('classa')) self.assertFalse(manager.unregister_object('classa')) # find plugin from zim.plugins.sourceview import SourceViewPlugin self.assertEqual( manager.find_plugin('code'), ('sourceview', 'Source View', True, SourceViewPlugin, None) ) def classafactory(attrib, text): return ClassA(attrib, text) class ClassA(CustomObjectClass): pass class ClassB(CustomObjectClass): pass class TestFallbackObject(tests.TestCase): def runTest(self): attrib = {'type': 'foo', 'lang': 'text/html', 'foo': 'bar'} text = '''test 123\n''' obj = FallbackObject(attrib, text) self.assertEqual(obj.get_data(), text) self.assertEqual(obj.get_attrib(), attrib) zim-0.65/tests/inlinecalculator.py0000664000175000017500000000331212411243523017155 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg import tests from zim.plugins import PluginManager @tests.slowTest class TestPrintToBrowser(tests.TestCase): def runTest(self): 'Test InlineCalculator plugin' pluginklass = PluginManager.get_plugin_class('inlinecalculator') plugin = pluginklass() for text, wanted in ( ('3 + 4 =', '3 + 4 = 7'), ('3 + 4 = 1', '3 + 4 = 7'), ('3 + 4 = 1 ', '3 + 4 = 7 '), ('10 / 3 =', '10 / 3 = 3.33333333333'), # divide integers to float ! ('milage: 3 + 4 =', 'milage: 3 + 4 = 7'), ('3 + 4 = 7 + 0.5 = ', '3 + 4 = 7 + 0.5 = 7.5'), ('''\ 5.5 4.3 3.1 --- + ''', '''\ 5.5 4.3 3.1 --- + 12.9 ''' ), ): result = plugin.process_text(text) self.assertEqual(result, wanted) # Tests from clac.py self test for test in '''\ 1+2 == 3 sqrt(-1) == j -2*asin(-1) == pi abs(sin(pi)) < 1e-9 abs(1-cos(0)) < 1e-9 round( 3.1 + -4.8j) == (3-5j) ceil( 3.1 + -4.8j) == (4-4j) abs( 3-4j) == 5 degrees(pi) == 180 radians(180) == pi abs( exp(j*pi) + 1 ) < 1e-9 # pow(1.2,3.4) == 1.2**3.4 ldexp(1.2,3) == 1.2 * 2 ** 3 modf(1.2)[1] == 1 log(81,3) == 4 gcd(6,8) == 2 lcm(6,8) == 24 angle( exp( j*pi ) ) == pi # log(-1)**2 == -1*pow(pi,2) round( degrees(phase( e**(2j)))) == 115 # sum( [ round(42 * exp(j*2*x*pi/4)) for x in range(4)] ) == 0 oct(8) == '010' 0x42-042-42 == -10 # 1k == 1024 # 1m == 2**20 # 1g == 2**30 2**10-1 == 1023 # 2**1k == 2**1024 '''.splitlines(): if test.startswith('#'): continue #~ print 'TESTING:', test self.assertTrue(plugin.safe_eval(test)) self.assertRaises(Exception, plugin.process_text, 'open("/etc/passwd")') # global self.assertRaises(Exception, plugin.process_text, 'self') # local zim-0.65/tests/templates.py0000664000175000017500000004220312411261574015633 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''Test cases for the zim.templates module.''' from __future__ import with_statement import tests from zim.fs import File, Dir, FileNotFoundError from zim.templates import * from zim.templates.parser import * from zim.templates.expression import * from zim.templates.expressionparser import * from zim.templates.processor import * from zim.parser import SimpleTreeElement, SimpleTreeBuilder, BuilderTextBuffer E = SimpleTreeElement class TestExpressionParser(tests.TestCase): def runTest(self): ## Test atoms p = ExpressionParser() for text, wanted in ( ('True', ExpressionLiteral(True)), ('False', ExpressionLiteral(False)), ('None', ExpressionLiteral(None)), ('"foo\\tbar"', ExpressionLiteral("foo\tbar")), ('123', ExpressionLiteral(123)), ('1.2', ExpressionLiteral(1.2)), ('1E+3', ExpressionLiteral(1E+3)), ('x', ExpressionParameter('x')), ('foo.bar', ExpressionParameter('foo.bar')), ): self.assertEqual(p.parse(text), wanted) ## Test compound expressions p = ExpressionParser() for text, wanted in ( ('x or y', ExpressionOperator( operator.or_, ExpressionParameter('x'), ExpressionParameter('y') )), ('x == y', ExpressionOperator( operator.eq, ExpressionParameter('x'), ExpressionParameter('y') )), ('not x', ExpressionUnaryOperator( operator.not_, ExpressionParameter('x') )), ('[1, a, True]', ExpressionList([ ExpressionLiteral(1), ExpressionParameter('a'), ExpressionLiteral(True), ])), ('[[1, a], [True, False]]', ExpressionList([ ExpressionList([ ExpressionLiteral(1), ExpressionParameter('a'), ]), ExpressionList([ ExpressionLiteral(True), ExpressionLiteral(False), ]) ])), ('func(1, a)', ExpressionFunctionCall( ExpressionParameter('func'), ExpressionList([ ExpressionLiteral(1), ExpressionParameter('a'), ]) )), ('func([1, a])', ExpressionFunctionCall( ExpressionParameter('func'), ExpressionList([ ExpressionList([ ExpressionLiteral(1), ExpressionParameter('a'), ]) ]) )), ('func(1, func(a))', ExpressionFunctionCall( ExpressionParameter('func'), ExpressionList([ ExpressionLiteral(1), ExpressionFunctionCall( ExpressionParameter('func'), ExpressionList([ ExpressionParameter('a'), ]) ) ]) )), ('[func(1, a), x == y]', ExpressionList([ ExpressionFunctionCall( ExpressionParameter('func'), ExpressionList([ ExpressionLiteral(1), ExpressionParameter('a'), ]) ), ExpressionOperator( operator.eq, ExpressionParameter('x'), ExpressionParameter('y') ) ])), ): self.assertEqual(p.parse(text), wanted) ## Test operator precedence expr = ExpressionParser().parse('a or b and not c < d and f or x') # Read as: '(a or ((b and ((not (c < d)) and f)) or x))' wanted = ExpressionOperator( operator.or_, ExpressionParameter('a'), ExpressionOperator( operator.or_, ExpressionOperator( operator.and_, ExpressionParameter('b'), ExpressionOperator( operator.and_, ExpressionUnaryOperator( operator.not_, ExpressionOperator( operator.lt, ExpressionParameter('c'), ExpressionParameter('d') ) ), ExpressionParameter('f') ) ), ExpressionParameter('x') ) ) #~ print '\nEXPRESSION:', expr self.assertEqual(expr, wanted) ## Invalid syntaxes p = ExpressionParser() for t in ( 'x > y > z', # chaining comparison operators not allowed 'x > not y', # 'not' has higher precendence, can not appear here 'not not x', # double operator 'x and and y', # double operator '[x,,y]', # double "," - missing element '(1,2)', # Tuple not supported '1 2', # Two expressions, instead of one '1, 2', # Two expressions, instead of one '1.2.3', # Invalid literal '<>', # just an operator '', # empty expression has no meaning ): self.assertRaises(ExpressionSyntaxError, p.parse, t) # TODO check for meaningfull error messages for these # TODO any edge cases ? class TestExpression(tests.TestCase): def runTest(self): expr = ExpressionList([ ExpressionLiteral('foooo'), ExpressionParameter('foo'), ExpressionParameter('a.b'), ExpressionOperator( operator.le, ExpressionParameter('n'), ExpressionLiteral(2) ), ExpressionFunctionCall( ExpressionParameter('addone'), ExpressionList([ ExpressionParameter('n') ]) ), ]) result = expr( { 'foo': 'FOO', 'a': { 'b': 'BAR' }, 'n': 1, 'addone': ExpressionFunction(lambda a: a+1) } ) wanted = ['foooo', 'FOO', 'BAR', True, 2] self.assertEqual(result, wanted) class TestExpressionFunctionCall(tests.TestCase): def runTest(self): class Foo(object): def __init__(self, prefix): self.prefix = prefix @ExpressionFunction def string(self, string): return self.prefix + string # Test ExpressionFunction works as decorator (bound method) foo = Foo('FOO') self.assertIsInstance(foo.string, ExpressionFunction) self.assertEqual(foo.string('bar'), 'FOObar') # Test get builtin from dict mydict = { 'len': ExpressionFunction(lambda o: len(o)), 'mylist': ['a', 'b', 'c'], } args = ExpressionList([ExpressionParameter('mylist')]) var = ExpressionParameter('len') func = ExpressionFunctionCall(var, args) self.assertEqual(func(mydict), 3) # Test get object method from attr mydict = {'foo': foo} args = ExpressionList([ExpressionLiteral('BAR')]) var = ExpressionParameter('foo.string') func = ExpressionFunctionCall(var, args) self.assertEqual(func(mydict), 'FOOBAR') # Test implicit types mydict = { 'somedict': {'a': 'AAA', 'b': 'BBB', 'c': 'CCC'}, 'somelist': ['x', 'y', 'z'], 'somestring': 'FOOBAR', } args = ExpressionList() # empty args for name, wanted in ( ('somedict.sorted', ['a', 'b', 'c']), ('somelist.len', 3), ('somestring.lower', 'foobar'), ('somedict.b.lower', 'bbb'), ('somelist.1.upper', 'Y'), ): var = ExpressionParameter(name) func = ExpressionFunctionCall(var, args) self.assertEqual(func(mydict), wanted) class TestExpressionObjects(tests.TestCase): def runTest(self): # Test proper object type for attributes for obj in ( ExpressionStringObject('foo'), ExpressionDictObject({'foo': 'bar'}), ExpressionListObject(['a', 'b', 'c']), ): for name in obj._fmethods: self.assertTrue(hasattr(obj, name)) function = getattr(obj, name) self.assertIsInstance(function, ExpressionFunction) # Test getitem, iter, len, str # and one or two functions of each type data = {'a': 'b', 'c': 'd', 'e': 'f'} mydict = ExpressionDictObject(data) self.assertEqual(mydict['c'], data['c']) self.assertEqual(list(mydict), list(data)) self.assertEqual(len(mydict), len(data)) self.assertEqual(str(mydict), str(data)) self.assertEqual(mydict.get('c'), data.get('c')) mylist = ExpressionListObject(['a', 'b', 'c']) self.assertEqual(mylist[1], 'b') self.assertEqual(mylist.get(1), 'b') self.assertIsNone(mylist.get(5)) mystring = ExpressionStringObject('foo') self.assertEqual(mystring.upper(), "FOO") class TestTemplateBuilderTextBuffer(tests.TestCase): def runTest(self): builder = SimpleTreeBuilder() buffer = TemplateBuilderTextBuffer(builder) buffer.start('FOO') buffer.text('foo\n\t\t') buffer.rstrip() buffer.append('BAR') buffer.lstrip() buffer.text(' \n\n\t\tdus\n\n') buffer.rstrip() buffer.append('BAR') buffer.lstrip() buffer.text('\n') buffer.end('FOO') result = builder.get_root() #~ print result self.assertEqual(result, [ E('FOO', None, [ u'foo', E('BAR', None, []), u'\n\t\tdus\n', E('BAR', None, []), ]) ]) class TestTemplateParser(tests.TestCase): # Include all elements recognized by parser and various forms # of whitespace stripping, no need to excersize all expressions # - ExpressionParser is tested separately TEMPLATE = '''\ [% foo %] [% GET foo %] [% bar = "test" %] [% SET bar = "test" %] DO SOMETHING SOMETHING ELSE [%- ELSE %] YET SOMETHING ELSE [% END %] Switch: [% IF foo %]AAA[% ELSE %]BBB[% END %] [% BLOCK bar -%] BAR [% END %] [% FOR a IN b %] AAA [% END %] [% FOREACH a IN b %] AAA [% END %] [% FOREACH a = b %] AAA [% END %] FOO ''' WANTED = [ E('TEMPLATE', None, [ E('GET', {'expr': ExpressionParameter('foo')}, []), '\n', # whitespace around GET remains intact E('GET', {'expr': ExpressionParameter('foo')}, []), '\n', E('SET', { 'var': ExpressionParameter('bar'), 'expr': ExpressionLiteral('test') }, []), # no whitespace here - SET chomps E('SET', { 'var': ExpressionParameter('bar'), 'expr': ExpressionLiteral('test') }, []), '\n', # only one "\n" here! # no indenting before block level items like IF E('IF', {'expr': ExpressionParameter('foo')}, [ '\tDO SOMETHING\n' # indenting intact ]), E('ELIF', {'expr': ExpressionParameter('foo')}, [ 'SOMETHING ELSE' # stripped on both sides ]), E('ELSE', None, [ '\tYET SOMETHING ELSE\n' # indenting intact ]), '\nSwitch:\t', E('IF', {'expr': ExpressionParameter('foo')}, [ 'AAA' ]), E('ELSE', None, [ 'BBB' ]), '\n\n', # two "\n" here because IF .. ELSE is inline '\n', # another empty line after block is taken out # 3 times same loop by different syntax E('FOR', { 'var': ExpressionParameter('a'), 'expr': ExpressionParameter('b'), }, [ '\tAAA\n' ]), '\n', E('FOR', { 'var': ExpressionParameter('a'), 'expr': ExpressionParameter('b'), }, [ '\tAAA\n' ]), '\n', E('FOR', { 'var': ExpressionParameter('a'), 'expr': ExpressionParameter('b'), }, [ '\tAAA\n' ]), '\n', ]), E('BLOCK', {'name': 'bar'}, ['BAR\n']), # indenting before "[% BLOCK .." and before "BAR" both gone E('BLOCK', {'name': 'foo'}, ['\tFOO\n']), # indenting intact ] def runTest(self): parser = TemplateParser() root = parser.parse(self.TEMPLATE) #~ print root self.assertEqual(root, self.WANTED) # TODO Test exceptions # - invalid expression # - lower case keyword # - invalide sequence IF / ELSE class TestTemplateContextDict(tests.TestCase): def runTest(self): data = {'a': 'AAA', 'b': 'BBB', 'c': 'CCC'} context = TemplateContextDict(data) for name in context._fmethods: func = getattr(context, name) self.assertIsInstance(func, ExpressionFunction) # make sure we can use as regular dict context['d'] = 'DDD' self.assertEqual(context.pop('d'), 'DDD') class TestTemplateLoopState(tests.TestCase): def runTest(self): items = ['aaa', 'bbb', 'ccc'] loop = TemplateLoopState(len(items), None) myiter = MovingWindowIter(items) for i, stateitems in enumerate(myiter): loop._update(i, myiter) self.assertEqual(loop.size, 3) self.assertEqual(loop.max, 2) self.assertEqual(loop.prev, None if i == 0 else items[i-1]) self.assertEqual(loop.current, items[i]) self.assertEqual(loop.next, None if i == 2 else items[i+1]) self.assertEqual(loop.index, i) self.assertEqual(loop.count, i+1) self.assertEqual(loop.first, True if i == 0 else False) self.assertEqual(loop.last, True if i == 2 else False) self.assertEqual(loop.parity, 'odd' if i % 2 else 'even') self.assertEqual(loop.even, False if i % 2 else True) self.assertEqual(loop.odd, True if i % 2 else False) self.assertEqual(i, 2) class TestTemplateProcessor(tests.TestCase): def testGetSet(self): # test 'GET', 'SET' processor = TemplateProcessor([ E('TEMPLATE', None, [ E('SET', { 'var': ExpressionParameter('aaa.bbb'), 'expr': ExpressionLiteral('foo') }), E('GET', {'expr': ExpressionParameter('aaa.bbb')}), ]) ]) output = [] context = TemplateContextDict({'aaa': TemplateContextDict({})}) processor.process(output, context) self.assertEqual(output, ['foo']) output = [] context = TemplateContextDict({'aaa': {}}) with self.assertRaises(AssertionError): processor.process(output, context) def testIfElifElse(self): # test 'IF', 'ELIF', 'ELSE', processor = TemplateProcessor([ E('TEMPLATE', None, [ E('IF', {'expr': ExpressionParameter('a')}, ['A']), E('ELIF', {'expr': ExpressionParameter('b')}, ['B']), E('ELIF', {'expr': ExpressionParameter('c')}, ['C']), E('ELSE', {}, ['D']), ]) ]) for context, wanted in ( ({'a': True}, ['A']), ({'a': False, 'b': True}, ['B']), ({'a': False, 'b': False, 'c': True}, ['C']), ({'a': False, 'b': False, 'c': False}, ['D']), ): lines = [] processor.process(lines, TemplateContextDict(context)) self.assertEqual(lines, wanted) def testFor(self): # test 'FOR' processor = TemplateProcessor([ E('TEMPLATE', None, [ E('FOR', { 'var': ExpressionParameter('iter'), 'expr': ExpressionParameter('items'), }, [ E('GET', {'expr': ExpressionParameter('loop.count')}), ': ', E('GET', {'expr': ExpressionParameter('iter')}), '\n', ]) ]) ]) context = {'items': ['aaa', 'bbb', 'ccc']} lines = [] processor.process(lines, TemplateContextDict(context)) self.assertEqual(''.join(lines), '1: aaa\n2: bbb\n3: ccc\n') def testInclude(self): # test 'INCLUDE', processor = TemplateProcessor([ E('TEMPLATE', None, [ E('INCLUDE', {'expr': ExpressionParameter('foo')}), E('INCLUDE', {'expr': ExpressionParameter('foo')}), E('INCLUDE', {'expr': ExpressionParameter('foo')}), ]), E('BLOCK', {'name': 'foo'}, 'FOO\n'), ]) lines = [] processor.process(lines, TemplateContextDict({'foo': 'foo'})) self.assertEqual(''.join(lines), 'FOO\nFOO\nFOO\n') class TestTemplateList(tests.TestCase): def runTest(self): categories = list_template_categories() self.assertIn('html', categories) self.assertIn('wiki', categories) for cat in categories: templates = list_templates(cat) #~ print '>>', cat, templates self.assertGreater(len(templates), 0) for name, filename in templates: template = get_template(cat, name) self.assertIsInstance(template, Template) class TestTemplateFunctions(tests.TestCase): def testFuncLen(self): func = build_template_functions()['len'] self.assertIsInstance(func, ExpressionFunction) self.assertEqual( func([1, 2, 3]), 3 ) def testFuncSorted(self): func = build_template_functions()['sorted'] self.assertIsInstance(func, ExpressionFunction) self.assertEqual( func(['bbb', 'aaa', 'ccc']), ['aaa', 'bbb', 'ccc'] ) def testFuncReversed(self): func = build_template_functions()['reversed'] self.assertIsInstance(func, ExpressionFunction) self.assertEqual( func(['bbb', 'aaa', 'ccc']), ['ccc', 'aaa', 'bbb'] ) def testFuncRange(self): func = build_template_functions()['range'] self.assertIsInstance(func, ExpressionFunction) self.assertEqual( func(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9] ) def testFuncStrftime(self): from datetime import date func = build_template_functions()['strftime'] self.assertIsInstance(func, ExpressionFunction) self.assertTrue(func('%Y %m %d')) self.assertEqual( func('%Y %m %d', date(2014, 05, 26)), '2014 05 26' ) def testFuncStrfcal(self): from datetime import date func = build_template_functions()['strfcal'] self.assertIsInstance(func, ExpressionFunction) self.assertTrue(func('%Y %W')) self.assertEqual( func('%Y %W', date(2014, 05, 26)), '2014 22' ) def testHTMLEncode(self): func = build_template_functions()['html_encode'] self.assertIsInstance(func, ExpressionFunction) self.assertEqual(func('foo'), '<a>foo</a>') def testURLEncode(self): func = build_template_functions()['url_encode'] self.assertIsInstance(func, ExpressionFunction) self.assertEqual(func('/foo/bar baz'), '%2Ffoo%2Fbar%20baz') class TestTemplate(tests.TestCase): def runTest(self): from pprint import pprint from zim.fs import File file = File('./tests/data/TestTemplate.html') templ = Template(file) #~ pprint(templ.parts) # parser output output = [] templ.process(output, { 'title': 'THIS IS THE TITLE', 'generator': { 'name': 'ZIM VERSION', }, 'navigation': { 'prev': None, 'next': None, }, 'links': {}, 'pages': [ { # page 'name': 'page', 'heading': 'HEAD', 'body': 'BODY', 'properties': { 'type': 'PAGE', }, 'backlinks': [ {'name': 'LINK1'}, {'name': 'LINK2'}, {'name': 'LINK3'}, ], 'attachments': [ {'name': 'FILE1', 'basename': 'FILE1', 'size': '1k'}, {'name': 'FILE2', 'basename': 'FILE2', 'size': '1k'}, ], }, ], 'uri': ExpressionFunction(lambda l: "URL:%s" % l['name']), 'anchor': ExpressionFunction(lambda l: "ANCHOR:%s" % l['name']), }) #~ print ''.join(output) # TODO assert something ### Test empty template OK as well dir = Dir(self.create_tmp_dir()) file = dir.file('empty.html') self.assertRaises(FileNotFoundError, Template, file) file.touch() templ = Template(file) output = [] templ.process(output, {}) self.assertEqual(output, []) zim-0.65/tests/calendar.py0000664000175000017500000001631712614412356015416 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008,2014 Jaap Karssenberg from __future__ import with_statement import tests from datetime import date as dateclass import zim.datetimetz from zim.plugins import PluginManager from zim.notebook import Path from zim.templates import get_template from zim.formats import get_dumper from zim.plugins.calendar import NotebookExtension, \ MainWindowExtensionDialog, MainWindowExtensionEmbedded, \ CalendarDialog from tests.gui import setupGtkInterface class TestCalendarFunctions(tests.TestCase): def testDatesForWeeks(self): from zim.plugins.calendar import dates_for_week zim.datetimetz.FIRST_DAY_OF_WEEK = \ zim.datetimetz.MONDAY start, end = dates_for_week(2012, 17) self.assertEqual(start, dateclass(2012, 4, 23)) # a monday self.assertEqual(end, dateclass(2012, 4, 29)) # a sunday zim.datetimetz.FIRST_DAY_OF_WEEK = \ zim.datetimetz.SUNDAY start, end = dates_for_week(2012, 17) self.assertEqual(start, dateclass(2012, 4 ,22)) # a sunday self.assertEqual(end, dateclass(2012, 4, 28)) # a saturday start, end = dates_for_week(2013, 1) self.assertEqual(start, dateclass(2012, 12 ,30)) # a sunday self.assertEqual(end, dateclass(2013, 1, 5)) # a saturday start, end = dates_for_week(2009, 53) self.assertEqual(start, dateclass(2009, 12 ,27)) # a sunday self.assertEqual(end, dateclass(2010, 1, 2)) # a saturday def testWeekCalendar(self): from zim.plugins.calendar import weekcalendar sunday = dateclass(2012, 4 ,22) monday = dateclass(2012, 4, 23) nextsunday = dateclass(2012, 4, 29) zim.datetimetz.FIRST_DAY_OF_WEEK = \ zim.datetimetz.MONDAY self.assertEqual(weekcalendar(sunday), (2012, 16, 7)) self.assertEqual(weekcalendar(monday), (2012, 17, 1)) self.assertEqual(weekcalendar(nextsunday), (2012, 17, 7)) zim.datetimetz.FIRST_DAY_OF_WEEK = \ zim.datetimetz.SUNDAY self.assertEqual(weekcalendar(sunday), (2012, 17, 1)) self.assertEqual(weekcalendar(monday), (2012, 17, 2)) self.assertEqual(weekcalendar(nextsunday), (2012, 18, 1)) dec31 = dateclass(2012, 12, 31) jan1 = dateclass(2013, 1, 1) self.assertEqual(weekcalendar(dec31), (2013, 1, 2)) self.assertEqual(weekcalendar(jan1), (2013, 1, 3)) dec31 = dateclass(2009, 12, 31) jan1 = dateclass(2010, 1, 1) self.assertEqual(weekcalendar(dec31), (2009, 53, 5)) self.assertEqual(weekcalendar(jan1), (2009, 53, 6)) def testDateRangeFromPath(self): from zim.plugins.calendar import daterange_from_path # Day for path in (Path('Foo:2012:04:27'), Path('Foo:2012:4:27')): type, start, end = daterange_from_path(path) self.assertEqual(type, 'day') self.assertEqual(start, dateclass(2012, 4, 27)) self.assertEqual(end, dateclass(2012, 4, 27)) # Week zim.datetimetz.FIRST_DAY_OF_WEEK = \ zim.datetimetz.MONDAY type, start, end = daterange_from_path(Path('Foo:2012:Week 17')) self.assertEqual(type, 'week') self.assertEqual(start, dateclass(2012, 4, 23)) # a monday self.assertEqual(end, dateclass(2012, 4, 29)) # a sunday # Month for path in (Path('Foo:2012:04'), Path('Foo:2012:4')): type, start, end = daterange_from_path(path) self.assertEqual(type, 'month') self.assertEqual(start, dateclass(2012, 4, 1)) self.assertEqual(end, dateclass(2012, 4, 30)) # Year type, start, end = daterange_from_path(Path('Foo:2012')) self.assertEqual(type, 'year') self.assertEqual(start, dateclass(2012, 1, 1)) self.assertEqual(end, dateclass(2012, 12, 31)) @tests.slowTest class TestCalendarPlugin(tests.TestCase): def testMainWindowExtensions(self): pluginklass = PluginManager.get_plugin_class('calendar') plugin = pluginklass() notebook = tests.new_notebook(self.get_tmp_name()) ui = setupGtkInterface(self, notebook=notebook) plugin.preferences['embedded'] = True self.assertEqual(plugin.extension_classes['MainWindow'], MainWindowExtensionEmbedded) plugin.extend(ui.mainwindow) ext = list(plugin.extensions) self.assertEqual(len(ext), 1) self.assertIsInstance(ext[0], MainWindowExtensionEmbedded) plugin.preferences.changed() # make sure no errors are triggered ext[0].go_page_today() self.assertTrue(ui.page.name.startswith('Journal:')) plugin.preferences['embedded'] = False self.assertEqual(plugin.extension_classes['MainWindow'], MainWindowExtensionDialog) plugin.extend(ui.mainwindow) # plugin does not remember objects, manager does that ext = list(plugin.extensions) self.assertEqual(len(ext), 1) self.assertIsInstance(ext[0], MainWindowExtensionDialog) plugin.preferences.changed() # make sure no errors are triggered def test_dialog(dialog): self.assertIsInstance(dialog, CalendarDialog) dialog.do_today('xxx') ui.open_page(Path('foo')) with tests.DialogContext(test_dialog): ext[0].show_calendar() plugin.preferences['embedded'] = True # switch back def testNotebookExtension(self): pluginklass = PluginManager.get_plugin_class('calendar') plugin = pluginklass() notebook = tests.new_notebook(self.get_tmp_name()) plugin.extend(notebook) ext = list(plugin.extensions) self.assertEqual(len(ext), 1) self.assertIsInstance(ext[0], NotebookExtension) page = Path('Foo') link = notebook.suggest_link(page, '2014-01-06') self.assertEqual(link.name, 'Journal:2014:01:06') link = notebook.suggest_link(page, 'foo') self.assertIsNone(link) def testNamespace(self): pluginklass = PluginManager.get_plugin_class('calendar') plugin = pluginklass() today = dateclass.today() for namespace in (Path('Calendar'), Path(':')): plugin.preferences['namespace'] = namespace path = plugin.path_from_date(today) self.assertTrue(isinstance(path, Path)) self.assertTrue(path.ischild(namespace)) date = plugin.date_from_path(path) self.assertTrue(isinstance(date, dateclass)) self.assertEqual(date, today) from zim.plugins.calendar import DAY, WEEK, MONTH, YEAR zim.datetimetz.FIRST_DAY_OF_WEEK = \ zim.datetimetz.MONDAY plugin.preferences['namespace'] = Path('Calendar') date = dateclass(2012, 4, 27) for setting, wanted, start in ( (DAY, 'Calendar:2012:04:27', dateclass(2012, 4, 27)), (WEEK, 'Calendar:2012:Week 17', dateclass(2012, 4, 23)), (MONTH, 'Calendar:2012:04', dateclass(2012, 4, 1)), (YEAR, 'Calendar:2012', dateclass(2012, 1, 1)), ): plugin.preferences['granularity'] = setting path = plugin.path_from_date(date) self.assertEqual(path.name, wanted) self.assertEqual(plugin.date_from_path(path), start) path = plugin.path_for_month_from_date(date) self.assertEqual(path.name, 'Calendar:2012:04') def testTemplate(self): pluginklass = PluginManager.get_plugin_class('calendar') plugin = pluginklass() plugin.preferences['namespace'] = Path('Calendar') notebook = tests.new_notebook() plugin.extend(notebook) dumper = get_dumper('wiki') zim.datetimetz.FIRST_DAY_OF_WEEK = \ zim.datetimetz.MONDAY for path in ( Path('Calendar:2012'), Path('Calendar:2012:04:27'), Path('Calendar:2012:Week 17'), Path('Calendar:2012:04'), ): tree = notebook.get_template(path) lines = dumper.dump(tree) #~ print lines self.assertTrue(not 'Created' in ''.join(lines)) # No fall back if 'Week' in path.name: days = [l for l in lines if l.startswith('=== ')] self.assertEqual(len(days), 7) zim-0.65/tests/errors.py0000664000175000017500000001052512374655231015160 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2010 Jaap Karssenberg from __future__ import with_statement import tests import logging import zim.errors from zim.gui.widgets import ErrorDialog class StubError(zim.errors.Error): description = '''\ Some description here ''' def __init__(self, i): self.msg = 'Error %i' % i class TestErrors(tests.TestCase): def runTest(self): '''Check base class for errors''' wanted = '''\ Error 6 Some description here ''' self.assertEqual(str(StubError(6)), wanted) self.assertEqual(unicode(StubError(6)), wanted) self.assertEqual(repr(StubError(6)), '') class CatchAllLogging(tests.LoggingFilter): def __init__(self): tests.LoggingFilter.__init__(self) self.records = [] def filter(self, record): self.records.append(record) return False class TestExceptionHandler(tests.TestCase): def setUp(self): logger = logging.getLogger('zim') self.oldlevel = logger.getEffectiveLevel() logger.setLevel(logging.DEBUG) def tearDown(self): logger = logging.getLogger('zim') logger.setLevel(self.oldlevel) def testExceptionHandlerWithGtk(self): def error_dialog_with_trace(dialog): self.assertIsInstance(dialog, ErrorDialog) self.assertTrue(dialog.showing_trace) def error_dialog_without_trace(dialog): self.assertIsInstance(dialog, ErrorDialog) self.assertFalse(dialog.showing_trace) zim.errors.set_use_gtk(True) try: self.assertTrue(zim.errors.use_gtk_errordialog) with tests.DialogContext( error_dialog_with_trace, error_dialog_with_trace, error_dialog_without_trace, error_dialog_without_trace, ): with tests.LoggingFilter( logger='zim.gui', message='Running ErrorDialog' ): self.testExceptionHandler() except: zim.errors.set_use_gtk(False) raise else: zim.errors.set_use_gtk(False) self.assertFalse(zim.errors.use_gtk_errordialog) def testExceptionHandler(self): ## Handle unexpected error or bug try: raise AssertionError, 'My AssertionError' except: myfilter = CatchAllLogging() with myfilter: zim.errors.exception_handler('Test Error') records = myfilter.records # Should log one error message with traceback self.assertEqual(len(records), 1) self.assertEqual(records[0].getMessage(), 'Test Error') self.assertEqual(records[0].levelno, logging.ERROR) self.assertIsNotNone(records[0].exc_info) else: assert False ## Show caught bug try: raise AssertionError, 'My AssertionError' except Exception, error: myfilter = CatchAllLogging() with myfilter: zim.errors.show_error(error) records = myfilter.records # Should log one error message with traceback self.assertEqual(len(records), 1) self.assertEqual(records[0].getMessage(), 'Looks like you found a bug') self.assertEqual(records[0].levelno, logging.ERROR) self.assertIsNotNone(records[0].exc_info) else: assert False ## Handle normal application error try: raise zim.errors.Error('My normal Error') except: myfilter = CatchAllLogging() with myfilter: zim.errors.exception_handler('Test Error') records = myfilter.records # Should log a debug message with traceback # and user error message without traceback self.assertEqual(len(records), 2) self.assertEqual(records[0].getMessage(), 'Test Error') self.assertEqual(records[0].levelno, logging.DEBUG) self.assertIsNotNone(records[0].exc_info) self.assertEqual(records[1].getMessage(), 'My normal Error') self.assertEqual(records[1].levelno, logging.ERROR) self.assertIsNone(records[1].exc_info) else: assert False ## Handle normal IOError try: open('/some/non/existing/file/').read() except: myfilter = CatchAllLogging() with myfilter: zim.errors.exception_handler('Test IOError') records = myfilter.records # Should log a debug message with traceback # and user error message without traceback self.assertEqual(len(records), 2) self.assertEqual(records[0].getMessage(), 'Test IOError') self.assertEqual(records[0].levelno, logging.DEBUG) self.assertIsNotNone(records[0].exc_info) self.assertIn('/some/non/existing/file/', records[1].getMessage()) # do not test exact message - could be localized self.assertEqual(records[1].levelno, logging.ERROR) self.assertIsNone(records[1].exc_info) else: assert False zim-0.65/tests/utils.py0000664000175000017500000000766312374655231015015 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012-2013 Jaap Karssenberg import tests from copy import copy from zim.utils import * class TestNaturalSorting(tests.TestCase): def runTest(self): input = [ 'a', 'Aa', 'AA', # (these last 2 should be swapped due to case) '1.1 foo', '10.1.1 bar', '2.1 dus', '1.01 foo', 'foo2bar', 'foo10bar', 'foo01bar', ] wanted = [ '1.01 foo', '1.1 foo', '2.1 dus', '10.1.1 bar', 'a', 'AA', 'Aa', 'foo01bar', 'foo2bar', 'foo10bar', ] # TODO: add utf-8 test data and set matching locale result = natural_sorted(input) self.assertEqual(result, wanted) self.assertTrue(id(result) != id(input)) result = copy(input) natural_sort(result) self.assertEqual(result, wanted) input = [(1, 'b'), (2, 'a')] wanted = [(2, 'a'), (1, 'b')] result = natural_sorted(input, key=lambda t: t[1]) self.assertEqual(result, wanted) self.assertTrue(id(result) != id(input)) class TestOrderedDict(tests.TestCase): def runTest(self): items = [('foo', 1), ('bar', 2), ('baz', 3)] mydict = OrderedDict(items) self.assertIsInstance(repr(mydict), str) self.assertEqual(mydict.items(), items) self.assertEqual(list(mydict), [i[0] for i in items]) self.assertEqual(mydict.keys(), [i[0] for i in items]) mydict['bar'] = 'X' mydict.setdefault('foo', 'dus') items = [('foo', 1), ('bar', 'X'), ('baz', 3)] self.assertEqual(mydict.items(), items) self.assertEqual(list(mydict), [i[0] for i in items]) self.assertEqual(mydict.keys(), [i[0] for i in items]) del mydict['bar'] mydict['bar'] = 'Y' items = [('foo', 1), ('baz', 3), ('bar', 'Y')] self.assertEqual(mydict.items(), items) self.assertEqual(list(mydict), [i[0] for i in items]) self.assertEqual(mydict.keys(), [i[0] for i in items]) mydict.pop('foo') mydict.setdefault('foo', 'dus') items = [('baz', 3), ('bar', 'Y'), ('foo', 'dus')] self.assertEqual(mydict.items(), items) self.assertEqual(list(mydict), [i[0] for i in items]) self.assertEqual(mydict.keys(), [i[0] for i in items]) class TestMovingWindowIterBuffer(tests.TestCase): def runTest(self): mylist = ['a', 'b', 'c', 'd'] myiter = MovingWindowIter(mylist) self.assertEqual(iter(myiter), myiter, 'MovingWindowIter should be an iter, not an iterable') seen = [] n = len(mylist) for i, t in enumerate(myiter): seen.append(t[1]) if i == 0: self.assertEqual(t, (None, mylist[0], mylist[1])) self.assertFalse(myiter.last) elif i == n-1: self.assertEqual(t, (mylist[-2], mylist[-1], None)) self.assertTrue(myiter.last) else: self.assertEqual(t, (mylist[i-1], mylist[i], mylist[i+1])) self.assertFalse(myiter.last) self.assertEqual(seen, mylist) import threading class TestFunctionThread(tests.TestCase): def runTest(self): def foo(*args): return 'FOO: ' + ', '.join(args) # Function OK, no lock func = FunctionThread(foo, ('a', 'b', 'c')) self.assertFalse(func.done) func.start() func.join() self.assertTrue(func.done) self.assertFalse(func.error) self.assertEqual(func.result, 'FOO: a, b, c') # Function OK, with lock lock = threading.Lock() func = FunctionThread(foo, ('a', 'b', 'c'), lock=lock) self.assertFalse(func.done) func.start() lock.acquire() self.assertTrue(func.done) self.assertFalse(func.error) self.assertEqual(func.result, 'FOO: a, b, c') ### def error(*args): raise AssertionError, 'FOO' # Function raises, no lock func = FunctionThread(error, ('a', 'b', 'c')) self.assertFalse(func.done) func.start() func.join() self.assertTrue(func.done) self.assertTrue(func.error) self.assertEqual(func.exc_info[0], AssertionError) # Function raises, with lock #~ lock = threading.Lock() #~ func = FunctionThread(error, ('a', 'b', 'c')) #~ self.assertFalse(func.done) #~ func.start() #~ lock.acquire() #~ self.assertTrue(func.done) #~ self.assertTrue(func.error) #~ self.assertEqual(func.exc_info[0], AssertionError) zim-0.65/tests/stores.py0000664000175000017500000003172412374655231015167 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008,2014 Jaap Karssenberg '''Test cases for basic stores modules.''' from __future__ import with_statement import tests import os import time from zim.fs import File, Dir, FileWriteError from zim.errors import TrashNotSupportedError from zim.notebook import Notebook, Path, LookupError, PageExistsError import zim.stores from zim.formats import ParseTree def walk(store, namespace=None): if namespace == None: namespace = Path(':') for page in store.get_pagelist(namespace): yield namespace, page if page.haschildren: for parent, child in walk(store, page): # recurs yield parent, child def ascii_page_tree(store, namespace=None, level=0): '''Returns an ascii page tree. Used for debugging the test''' if namespace is None: namespace = store.namespace if namespace.isroot: basename = '' else: basename = namespace.basename text = ' '*level + basename + '\n' level += 1 for page in store.get_pagelist(namespace): if page.haschildren: text += ascii_page_tree(store, page, level) # recurs else: text += ' '*level + page.basename + '\n' return text class FilterOverWriteWarning(tests.LoggingFilter): logger = 'zim.fs' message = 'mtime check failed' class TestUtils(tests.TestCase): def testFilenameEncodeing(self): '''Test mapping page names to filenames''' import zim.fs realencoding = zim.fs.ENCODING try: zim.fs.ENCODING = 'utf-8' pagename = u'utf8:\u03b1\u03b2\u03b3' filename = zim.stores.encode_filename(pagename) self.assertEqual(filename, u'utf8/\u03b1\u03b2\u03b3') roundtrip = zim.stores.decode_filename(filename) self.assertEqual(roundtrip, pagename) zim.fs.ENCODING = 'ascii' pagename = u'utf8:\u03b1\u03b2\u03b3' filename = zim.stores.encode_filename(pagename) self.assertEqual(filename, u'utf8/%CE%B1%CE%B2%CE%B3') roundtrip = zim.stores.decode_filename(filename) self.assertEqual(roundtrip, pagename) zim.fs.ENCODING = 'gb2312' pagename = u'utf8:\u2022:\u4e2d\u6587:foo' # u2022 can not be encoded in gb2312 filename = zim.stores.encode_filename(pagename) self.assertEqual(filename, u'utf8/%E2%80%A2/\u4e2d\u6587/foo') roundtrip = zim.stores.decode_filename(filename) self.assertEqual(roundtrip, pagename) except Exception: zim.fs.ENCODING = realencoding raise else: zim.fs.ENCODING = realencoding # try roundtrip with actual current encoding pagename = u'utf8:\u03b1\u03b2\u03b3:\u2022:\u4e2d\u6587:foo' filename = zim.stores.encode_filename(pagename) roundtrip = zim.stores.decode_filename(filename) self.assertEqual(roundtrip, pagename) class TestReadOnlyStore(object): # This class does not inherit from TestCase itself as it is used # as a mixin for TestCase classes below but isn't a test case # in itself def normalize_index(self): '''Make sure the index conains namespaces for all page names''' pages = self.index.copy() for name in pages: parts = name.split(':') parts.pop() while parts: self.index.add(':'.join(parts)) parts.pop() def testIndex(self): '''Test we get a proper index for the memory store''' names = set() for parent, page in walk(self.store): self.assertTrue(len(page.name) > 0) self.assertTrue(len(page.basename) > 0) self.assertTrue(page.namespace == parent.name) names.add( page.name ) #~ import pprint #~ pprint.pprint(self.index) #~ pprint.pprint(names) self.assertTrue(u'utf8:\u03b1\u03b2\u03b3' in names) # Check usage of unicode self.assertEqual(names, self.index) class TestStoresMemory(TestReadOnlyStore, tests.TestCase): '''Test the store.memory module''' def setUp(self): klass = zim.stores.get_store('memory') self.store = klass(path=Path(':'), notebook=Notebook()) self.index = set() for name, text in tests.WikiTestData: self.store.set_node(Path(name), text) self.index.add(name) self.normalize_index() def testManipulate(self): '''Test moving and deleting pages in the memory store''' # Check we can get / store a page page = self.store.get_page(Path('Test:foo')) self.assertTrue(page.get_parsetree()) self.assertTrue('Foo' in ''.join(page.dump('plain'))) self.assertFalse(page.modified) wikitext = tests.WikiTestData.get('roundtrip') page.parse('wiki', wikitext) self.assertEqual(''.join(page.dump('wiki')), wikitext) self.assertTrue(page.modified) self.store.store_page(page) self.assertFalse(page.modified) self.assertEqual(''.join(page.dump('wiki')), wikitext) page = self.store.get_page(Path('Test:foo')) self.assertEqual(''.join(page.dump('wiki')), wikitext) page = self.store.get_page(Path('Test:foo')) text = page.dump('plain') newtext = ['Some new content\n'] assert newtext != text self.assertEqual(page.dump('plain'), text) page.parse('plain', newtext) self.assertEqual(page.dump('plain'), newtext) self.assertTrue(page.modified) re = self.store.revert_page(page) self.assertFalse(re) # no return value self.assertEqual(page.dump('plain'), text) # object reverted self.assertFalse(page.modified) # no longer modified page = self.store.get_page(page) # new object self.assertEqual(page.dump('plain'), text) page.parse('plain', newtext) self.assertEqual(page.dump('plain'), newtext) self.store.store_page(page) page = self.store.get_page(page) # new object self.assertEqual(page.dump('plain'), newtext) # check revert page triggers ui object page._ui_object = tests.MockObject() self.store.revert_page(page) self.assertEqual(page._ui_object.mock_calls[-1][0], 'set_parsetree') if hasattr(page, 'source') and isinstance(page.source, File): # check revert also works when the actual file changed # (and not trigger mtime check failure) from tests.fs import modify_file_mtime, FilterOverWriteWarning page = self.store.get_page(Path('Test:foo')) text = page.dump('plain') newtext = ['Foo bar baz\n'] othertext = ['Dus ja\n'] assert newtext != text assert othertext != text page.parse('plain', newtext) modify_file_mtime(page.source.path, lambda p: open(p, 'w').writelines(othertext)) with FilterOverWriteWarning(): self.assertRaises(FileWriteError, self.store.store_page, page) self.store.revert_page(page) self.assertEqual(page.dump('plain'), othertext) page.parse('plain', newtext) self.store.store_page(page) page = self.store.get_page(page) # new object self.assertEqual(page.dump('plain'), newtext) # check test setup OK for path in (Path('Test:BAR'), Path('NewPage')): page = self.store.get_page(path) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) # check errors self.assertRaises(LookupError, self.store.move_page, Path('NewPage'), Path('Test:BAR')) self.assertRaises(PageExistsError, self.store.move_page, Path('Test:foo'), Path('TaskList')) for oldpath, newpath in ( (Path('Test:foo'), Path('Test:BAR')), (Path('TaskList'), Path('NewPage:Foo:Bar:Baz')), ): page = self.store.get_page(oldpath) text = page.dump('wiki') self.assertTrue(page.haschildren) #~ print ascii_page_tree(self.store) self.store.move_page(oldpath, newpath) #~ print ascii_page_tree(self.store) # newpath should exist and look like the old one page = self.store.get_page(newpath) self.assertTrue(page.haschildren) self.assertEqual(page.dump('wiki'), text) # oldpath should be deleted page = self.store.get_page(oldpath) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) # let's delete the newpath again page = self.store.get_page(newpath) self.assertTrue(self.store.delete_page(page)) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) page = self.store.get_page(newpath) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) # delete again should silently fail self.assertFalse(self.store.delete_page(newpath)) # check cleaning up works OK page = self.store.get_page(Path('NewPage')) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) # check case-sensitive move self.store.move_page(Path('utf8'), Path('UTF8')) page = self.store.get_page(Path('utf8')) # self.assertFalse(page.haschildren) - fails on case-insensitive FS self.assertFalse(Path('utf8') in list(self.store.get_pagelist(Path(':')))) self.assertTrue(Path('UTF8') in list(self.store.get_pagelist(Path(':')))) newpage = self.store.get_page(Path('UTF8')) self.assertTrue(newpage.haschildren) self.assertFalse(newpage == page) # TODO here we only move dir case insensitive - also test file # check hascontents page = self.store.get_page(Path('NewPage')) tree = ParseTree().fromstring('') self.assertFalse(tree.hascontent) page.set_parsetree(tree) self.assertFalse(page.hascontent) self.store.store_page(page) page = self.store.get_page(Path('NewPage')) self.assertFalse(page.hascontent) # check trashing trashing = True try: page = self.store.get_page(Path('TrashMe')) self.assertTrue(page.haschildren) self.assertTrue(page.hascontent) self.store.trash_page(page) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) page = self.store.get_page(Path('TrashMe')) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) except TrashNotSupportedError: trashing = False print '(trashing not supported for this store)' self.assertTrue(page.haschildren) self.assertTrue(page.hascontent) page = self.store.get_page(Path('TrashMe')) self.assertTrue(page.haschildren) self.assertTrue(page.hascontent) page = self.store.get_page(Path('NonExistingPage')) if trashing: # fail silently for non-existing page self.assertFalse(self.store.trash_page(page)) else: # check error consistent self.assertRaises(TrashNotSupportedError, self.store.trash_page, page) class TextXMLStore(TestReadOnlyStore, tests.TestCase): xml = u'''\
    Fooo! Foooo Barrr Fooo barrr bazzz Utf8 content here
    ''' def setUp(self): buffer = StubFile(self.xml) klass = zim.stores.get_store('xml') self.store = klass(path=Path(':'), notebook=Notebook(), file=buffer) self.index = set(['Foo', 'Foo:Bar', 'Baz', u'utf8:\u03b1\u03b2\u03b3']) self.normalize_index() def testIndex(self): '''Test we get a proper index for the XML store''' TestReadOnlyStore.testIndex(self) def testContent(self): page = self.store.get_page(Path('Foo:Bar')) self.assertEqual(page.dump(format='wiki'), ['Foooo Barrr\n']) ref = self.xml.replace("'", '"') self.assertEqual(''.join(self.store.dump()), ref) @tests.slowTest class TestFiles(TestStoresMemory): '''Test the store.files module''' def setUp(self): TestStoresMemory.setUp(self) tmpdir = self.create_tmp_dir(u'_some_utf8_here_\u0421\u0430\u0439') self.dir = Dir([tmpdir, 'store-files']) self.mem = self.store klass = zim.stores.get_store('files') self.store = klass(path=Path(':'), notebook=Notebook(), dir=self.dir) for parent, page in walk(self.mem): if page.hascontent: mypage = self.store.get_page(page) mypage.set_parsetree(page.get_parsetree()) self.store.store_page(mypage) def modify(self, path, func): mtime = os.stat(path).st_mtime m = mtime i = 0 while m == mtime: time.sleep(1) func(path) m = os.stat(path).st_mtime i += 1 assert i < 5 #~ print '>>>', m, mtime def testIndex(self): '''Test we get a proper index for files store''' TestStoresMemory.testIndex(self) def testManipulate(self): '''Test moving and deleting pages in the files store''' TestStoresMemory.testManipulate(self) # test overwrite check page = self.store.get_page(Path('Test:overwrite')) page.parse('plain', 'BARRR') self.store.store_page(page) self.assertTrue('BARRR' in ''.join(page.dump('plain'))) self.modify(page.source.path, lambda p: open(p, 'w').write('bar')) with FilterOverWriteWarning(): self.assertRaises(FileWriteError, self.store.store_page, page) # test headers page = self.store.get_page(Path('Test:New')) page.parse('plain', 'Foo Bar') self.store.store_page(page) self.assertEqual(page.properties['Content-Type'], 'text/x-zim-wiki') self.assertEqual(page.properties['Wiki-Format'], 'zim 0.4') self.assertTrue('Creation-Date' in page.properties) firstline = page.source.readlines()[0] self.assertEqual(firstline, 'Content-Type: text/x-zim-wiki\n') # test moving page into itself oldpath = Path('Test:New') newpath = Path('Test:New:NewSub') self.store.move_page(oldpath, newpath) page = self.store.get_page(newpath) self.assertEqual(page.dump('plain'), ['Foo Bar\n']) class StubFile(File): def __init__(self, text): self.text = text def read(self): return self.text def readlines(self): return self.text.splitlines(True) def write(self, *a): assert False def writelines(self, *a): assert False def open(self, *a): assert False def exists(self): return len(self.text) > 0 zim-0.65/tests/translations.py0000664000175000017500000001111512377624456016371 0ustar jaapjaap00000000000000 import re from glob import glob from tests import TestCase class TestTranslations(TestCase): def runTest(self, verbose=False): '''Sanity check translation files''' pot_creation_date = None for file in ['translations/zim.pot'] + glob('translations/*.po'): if verbose: print 'Checking %s' % file t = TranslationFile(file) if file == 'translations/zim.pot': text = open(file).read() self.assertFalse('namespace' in text.lower()) pot_creation_date = t.headers['POT-Creation-Date'] else: if not t.headers['POT-Creation-Date'] == pot_creation_date: print 'WARNING: Translation not based on up to date template: %s' % file self.assertTrue(t.nplural > 0, 'Missing number of plurals: %s' % file) t.assertValid() class TranslationMessage(object): @property def nplural(self): return len(self.msgstr) def __init__(self, lineno, text): self.lineno = lineno self.msgid = None self.msgid_plural = None self.msgstr = [] self.comment = '' text = text.replace('"\n"', '') for line in text.splitlines(): if line.startswith('#'): self.comment += line else: type, msg = line.split(' ', 1) if type == 'msgid': self.msgid = msg elif type == 'msgid_plural': self.msgid_plural = msg elif type.startswith('msgstr'): self.msgstr.append(msg) else: raise AssertionError, \ 'Could not parse line: %s %s' % (type, msg) assert self.msgid, 'No msgid found' assert self.msgstr, 'No msgstr found' _format_string_re = re.compile('%(?:\(\w+\))?\w') # match "%s", "%d" etc. but also "%(foo)s" - but not just "%" def check_nplural(self, nplural): if self.msgid_plural and self.msgstr[0] != '""': return self.nplural == nplural else: return True def check_format_strings(self): '''Check format strings in msgid_plural and msgstr''' if 'strftime' in self.comment: return self._check_strftime_string() else: return self._check_format_strings() def _check_format_strings(self): wanted = sorted( self._format_string_re.findall(self.msgid) ) if not wanted: return True # no string format used for msg in [self.msgid_plural] + self.msgstr: if msg and not msg == '""': got = sorted( self._format_string_re.findall(msg) ) if not got == wanted: return False else: return True def _check_strftime_string(self): for msg in self.msgstr: if msg and not msg == '""': for c in re.findall('\%(.)', msg): if c not in 'aAwdbBmyYHIpMSfzZjUWcxX%': # valid charaters based on doc for datetime module # other characters may be valid depending on platform # but not robust return False else: return True class TranslationFile(object): def __init__(self, file): self.file = file self.messages = [] buffer = [] lineno = 0 msgidlineno = 0 def flush(): if not buffer \ or all(line.startswith('#') for line in buffer): return try: text = ''.join(buffer) message = TranslationMessage(msgidlineno, text) self.messages.append(message) except AssertionError, error: raise AssertionError, \ 'Error while parsing %s msgid on line %i\n' % (self.file, msgidlineno) + error.message for line in open(file): lineno += 1 if not line or line.isspace(): flush() buffer = [] else: if line.startswith('msgid '): msgidlineno = lineno buffer.append(line) else: flush() plural_forms = self.headers['Plural-Forms'] m = re.search(r'nplurals=(\d+);', plural_forms) if m: self.nplural = int( m.group(1) ) else: self.nplural = None @property def headers(self): message = self.get('""') lines = message.msgstr[0].strip().strip('"').split('\\n') headers = {} for line in lines: if not line: continue k, v = line.strip('"').replace('\\n', '').split(': ', 1) headers[k] = v return headers def get(self, msgid): for message in self.messages: if message.msgid == msgid: return message else: return None def assertValid(self): for message in self.messages: if self.nplural and not message.check_nplural(self.nplural): raise AssertionError, \ 'Number of plural forms NOK in %s msgid on line %i\n' % (self.file, message.lineno) + message.msgid if not message.check_format_strings(): raise AssertionError, \ 'Error with format strings in %s msgid on line %i\n' % (self.file, message.lineno) + message.msgid if __name__ == '__main__': TestTranslations().runTest(verbose=True) zim-0.65/tests/gui.py0000664000175000017500000006422412614412356014431 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2014 Jaap Karssenberg from __future__ import with_statement import tests import os import gtk from zim.errors import Error from zim.config import ConfigManager, VirtualConfigManager from zim.notebook import get_notebook_list, Path, Page, NotebookInfo, NotebookConfig from zim.formats import ParseTree from zim.fs import File, Dir from zim.gui.clipboard import Clipboard import zim.gui def setupGtkInterface(test, klass=None, notebook=None): '''Setup a new GtkInterface object for testing. Will have test notebook, and default preferences. @param test: the test that wants to use this ui object @param klass: the klass to use, defaults to L{GtkInterface}, but could be partially mocked subclass ''' if klass is None: klass = zim.gui.GtkInterface # start filtering filter = FilterNoSuchImageWarning() filter.wrap_test(test) # create interface object with new notebook if notebook is None: dirpath = test.get_tmp_name() notebook = tests.new_notebook(fakedir=dirpath) config = VirtualConfigManager() ui = klass(config=config, notebook=notebook) ui.mainwindow.init_uistate() ui.open_page(Path('Test:foo:bar')) return ui @tests.slowTest class TestDialogs(tests.TestCase): def setUp(self): path = self.create_tmp_dir() self.ui = MockUI('Test:foo:bar', fakedir=path) def testOpenPageDialog(self): '''Test OpenPageDialog dialog (Jump To...)''' for name, path in ( (':foo', ':foo'), ('foo', ':Test:foo'), ('baz', ':Test:foo:baz'), ('+baz', ':Test:foo:bar:baz'), ): dialog = zim.gui.OpenPageDialog(self.ui) dialog.form.widgets['page'].set_text(name) dialog.assert_response_ok() self.assertEqual(self.ui.mock_calls[-1], ('open_page', Path(path))) def testNewPageDialog(self): '''Test NewPageDialog''' self.ui.mainwindow = tests.MockObject() self.ui.mainwindow.pageview = tests.MockObject() for name, path in ( (':new', ':new'), ('foo:new', ':Test:foo:new'), ('new', ':Test:foo:new'), ('+new', ':Test:foo:bar:new'), ): dialog = zim.gui.NewPageDialog(self.ui) dialog.form.widgets['page'].set_text(name) dialog.assert_response_ok() self.assertEqual(self.ui.mock_calls[-1], ('save_page',)) self.assertEqual(self.ui.mock_calls[-2], ('open_page', Path(path))) page = self.ui.notebook.get_page(Path(path)) self.assertTrue(page.exists()) page.modified = False # HACK so we can clean up self.ui.notebook.delete_page(page) for name, path in ( (':new', ':Test:foo:bar:new'), ('foo:new', ':Test:foo:bar:foo:new'), ('new', ':Test:foo:bar:new'), ('+new', ':Test:foo:bar:new'), ): dialog = zim.gui.NewPageDialog(self.ui, subpage=True) dialog.form.widgets['page'].set_text(name) dialog.assert_response_ok() self.assertEqual(self.ui.mock_calls[-1], ('save_page',)) self.assertEqual(self.ui.mock_calls[-2], ('open_page', Path(path))) page = self.ui.notebook.get_page(Path(path)) self.assertTrue(page.exists()) page.modified = False # HACK so we can clean up self.ui.notebook.delete_page(page) dialog = zim.gui.NewPageDialog(self.ui) dialog.form.widgets['page'].set_text(':Test:foo') self.assertRaises(Error, dialog.assert_response_ok) def testSaveCopyDialog(self): '''Test SaveCopyDialog''' tmp_dir = self.create_tmp_dir('testSaveCopyDialog') file = File((tmp_dir, 'save_copy.txt')) self.assertFalse(file.exists()) dialog = zim.gui.SaveCopyDialog(self.ui) dialog.set_file(file) #~ dialog.assert_response_ok() #~ self.assertTrue(file.exists()) def testImportPageDialog(self): '''Test ImportPageDialog''' tmp_dir = self.create_tmp_dir('testImportPageDialog') file = File((tmp_dir, 'import_page.txt')) file.write('test 123\n') self.assertTrue(file.exists()) dialog = zim.gui.ImportPageDialog(self.ui) dialog.set_file(file) #~ dialog.assert_response_ok() #~ self.assertEqual(self.ui.mock_calls[-1], ('open_page', Path(':import_page'))) #~ self.assertTrue(self.ui.notebook.get_page(':import_page').exists()) def testMovePageDialog(self): '''Test MovePageDialog''' # Can't test much here except for the call to do_move_page self.ui.mock_method('do_move_page', True) dialog = zim.gui.MovePageDialog(self.ui, path=Path('Test:foo:bar')) self.assertTrue(dialog.form['update']) self.assertTrue(dialog.form.widgets['update'].get_property('sensitive')) dialog.form['parent'] = Path('New') dialog.assert_response_ok() self.assertEqual(self.ui.mock_calls[-1], ('do_move_page', Path('Test:foo:bar'), Path('New:bar'), True)) dialog = zim.gui.MovePageDialog(self.ui, path=Path('New:bar')) self.assertFalse(dialog.form['update']) self.assertFalse(dialog.form.widgets['update'].get_property('sensitive')) dialog.form['parent'] = Path('foo') dialog.assert_response_ok() self.assertEqual(self.ui.mock_calls[-1], ('do_move_page', Path('New:bar'), Path('foo:bar'), False)) def testRenamePageDialog(self): '''Test RenamePageDialog''' # Can't test much here except for the call to do_rename_page self.ui.mock_method('do_rename_page', True) dialog = zim.gui.RenamePageDialog(self.ui, path=Path('Test:foo:bar')) self.assertTrue(dialog.form['update']) self.assertTrue(dialog.form.widgets['update'].get_property('sensitive')) self.assertFalse(dialog.form['head']) # There is no heading self.assertTrue(dialog.form.widgets['head'].get_property('sensitive')) dialog.form['name'] = 'New' dialog.assert_response_ok() self.assertEqual(self.ui.mock_calls[-1], ('do_rename_page', Path('Test:foo:bar'), 'New', False, True)) dialog = zim.gui.RenamePageDialog(self.ui, path=Path('New:bar')) self.assertFalse(dialog.form['update']) self.assertFalse(dialog.form.widgets['update'].get_property('sensitive')) self.assertFalse(dialog.form['head']) self.assertFalse(dialog.form.widgets['head'].get_property('sensitive')) dialog.form['name'] = 'New' dialog.assert_response_ok() self.assertEqual(self.ui.mock_calls[-1], ('do_rename_page', Path('New:bar'), 'New', False, False)) def testRenamePageDialogWithHeadingChanges(self): '''Test RenamePageDialog's heading auto-change option depending on whether we have a changed heading or not. ''' tree = ParseTree().fromstring('') tree.set_heading("bar") self.ui.page = Page(Path("Test:foo:bar"), parsetree=tree) self.ui.notebook.get_page = lambda path: self.ui.page dialog = zim.gui.RenamePageDialog(self.ui, path=Path("Test:foo:bar")) self.assertTrue(dialog.form['head']) tree.set_heading("different") dialog = zim.gui.RenamePageDialog(self.ui, path=Path("Test:foo:bar")) self.assertFalse(dialog.form['head']) def testDeletePageDialog(self): '''Test DeletePageDialog''' # just check inputs are OK - skip output dialog = zim.gui.DeletePageDialog(self.ui, path=Path('Test:foo:bar')) self.assertTrue(dialog.links_checkbox.get_active()) self.assertTrue(dialog.links_checkbox.get_property('sensitive')) dialog = zim.gui.DeletePageDialog(self.ui, path=Path('New')) self.assertFalse(dialog.links_checkbox.get_active()) self.assertFalse(dialog.links_checkbox.get_property('sensitive')) dialog.assert_response_ok() def testAttachFileDialog(self): '''Test AttachFileDialog''' tmp_dir = self.create_tmp_dir('testAttachFileDialog') file = File((tmp_dir, 'file_to_be_attached')) file.write('Test 1 2 3\n') newfile = File((tmp_dir, 'attachments', 'Test', 'foo', 'file_to_be_attached')) self.assertTrue(file.exists()) self.assertFalse(newfile.exists()) dialog = zim.gui.AttachFileDialog(self.ui, path=Path('Test:foo')) dialog.set_file(file) #~ dialog.assert_response_ok() #~ self.assertTrue(file.exists()) # No move or delete happened #~ self.assertTrue(newfile.exists()) #~ self.assertTrue(newfile.compare(file)) def testSearchDialog(self): '''Test SearchDialog''' from zim.gui.searchdialog import SearchDialog self.ui.notebook = tests.new_notebook() dialog = SearchDialog(self.ui) dialog.query_entry.set_text('Foo') dialog.query_entry.activate() model = dialog.results_treeview.get_model() self.assertTrue(len(model) > 3) self.ui.mainwindow = tests.MockObject() self.ui.mainwindow.pageview = tests.MockObject() col = dialog.results_treeview.get_column(0) dialog.results_treeview.row_activated((0,), col) def testCustomToolDialog(self): '''Test CustomTool dialogs''' from zim.gui.customtools import CustomToolManagerDialog from zim.gui.customtools import EditCustomToolDialog ## CustomToolManager dialog dialog = CustomToolManagerDialog(self.ui) properties = { 'Name': 'Foo', 'Comment': 'Test Foo', 'X-Zim-ExecTool': 'foo %u', 'X-Zim-ReadOnly': False, 'X-Zim-ShowInToolBar': False, 'X-Zim-ReplaceSelection': False, } dialog.manager.create(**properties) dialog.listview.refresh() dialog.destroy() ## Edit custom tool dialog dialog = EditCustomToolDialog(self.ui) input = { 'Name': 'Foo', 'Comment': 'Test Foo', 'X-Zim-ExecTool': 'foo %u', 'X-Zim-ReadOnly': False, 'X-Zim-ShowInToolBar': False, 'X-Zim-ReplaceSelection': False, } dialog.form.update(input) output = dialog.assert_response_ok() input['Icon'] = None self.assertEqual(output, input) def testPropertiesDialog(self): '''Test PropertiesDialog''' from zim.gui.propertiesdialog import PropertiesDialog self.ui.readonly = True dialog = PropertiesDialog(self.ui) dialog.assert_response_ok() from zim.config import INIConfigFile notebook = self.ui.notebook file = notebook.dir.file('notebook.zim') notebook.config = NotebookConfig(file) self.ui.readonly = False config1 = { 'name': 'Notebook Foo', 'interwiki': None, 'home': Path('Home'), 'icon': './icon.png', 'document_root': File('/foo').path, # win32 save test 'profile': None, } config2 = { 'name': 'Notebook Bar', 'interwiki': 'FooBar', 'home': Path('HomeSweetHome'), 'icon': './picture.png', 'document_root': File('/bar').path, # win32 save test 'profile': 'foo', } notebook.save_properties(**config1) for key in config1: self.assertEqual(notebook.config['Notebook'][key], config1[key]) dialog = PropertiesDialog(self.ui) dialog.assert_response_ok() for key in config1: self.assertEqual(notebook.config['Notebook'][key], config1[key]) self.assertEqual(notebook.name, config1['name']) self.assertEqual(notebook.get_home_page(), config1['home']) self.assertEqual(notebook.icon, notebook.dir.file(config1['icon']).path) self.assertEqual(notebook.document_root, Dir(config1['document_root'])) dialog = PropertiesDialog(self.ui) dialog.form.update(config2) dialog.assert_response_ok() for key in config1: self.assertEqual(notebook.config['Notebook'][key], config2[key]) self.assertEqual(notebook.name, config2['name']) self.assertEqual(notebook.get_home_page(), config2['home']) self.assertEqual(notebook.icon, notebook.dir.file(config2['icon']).path) self.assertEqual(notebook.document_root, Dir(config2['document_root'])) def testPreferencesDialog(self): '''Test PreferencesDialog''' from zim.gui.preferencesdialog import PreferencesDialog, PluginConfigureDialog self.clear_tmp_dir() gui = setupGtkInterface(self) gui.register_preferences('GtkInterface', zim.gui.ui_preferences) gui.register_preferences('PageView', zim.gui.pageview.ui_preferences) self.ui.preferences_register = gui.preferences_register self.ui.preferences = gui.preferences self.ui.plugins = gui.plugins self.ui.config = gui.config ## Test get/set simple value self.assertEquals(self.ui.preferences['GtkInterface']['toggle_on_ctrlspace'], False) dialog = PreferencesDialog(self.ui) self.assertEquals(dialog.forms['Interface']['toggle_on_ctrlspace'], False) dialog.assert_response_ok() self.assertEquals(self.ui.preferences['GtkInterface']['toggle_on_ctrlspace'], False) dialog = PreferencesDialog(self.ui) dialog.forms['Interface']['toggle_on_ctrlspace'] = True dialog.assert_response_ok() self.assertEquals(self.ui.preferences['GtkInterface']['toggle_on_ctrlspace'], True) ## Test font button text_style = gui.config.get_config_dict('/style.conf') text_style['TextView']['font'] = 'Sans 12' dialog = PreferencesDialog(self.ui) self.assertEquals(dialog.forms['Interface']['use_custom_font'], True) dialog.assert_response_ok() self.assertEqual(text_style['TextView']['font'], 'Sans 12') self.assertFalse(any(['use_custom_font' in d for d in self.ui.preferences.values()])) text_style['TextView']['font'] = 'Sans 12' dialog = PreferencesDialog(self.ui) self.assertEquals(dialog.forms['Interface']['use_custom_font'], True) dialog.forms['Interface']['use_custom_font'] = False dialog.assert_response_ok() self.assertEqual(text_style['TextView']['font'], None) self.assertFalse(any(['use_custom_font' in d for d in self.ui.preferences.values()])) ## Plugin Config dialog from zim.plugins.calendar import CalendarPlugin plugin = CalendarPlugin() pref_dialog = PreferencesDialog(self.ui) dialog = PluginConfigureDialog(pref_dialog, plugin) dialog.assert_response_ok() def testTemplateEditorDialog(self): from zim.gui.templateeditordialog import TemplateEditorDialog dialog = TemplateEditorDialog(self.ui) # TODO what to test here ?? dialog.assert_response_ok() def testRecentChangesDialog(self): from zim.gui.recentchangesdialog import RecentChangesDialog self.clear_tmp_dir() ui = setupGtkInterface(self) dialog = RecentChangesDialog(ui) dialog.assert_response_ok() # Test for ExportDialog can be found in test/export.py # Test for NotebookDialog is in separate class below class FilterNoSuchImageWarning(tests.LoggingFilter): logger = 'zim.gui.pageview' message = 'No such image:' @tests.slowTest class TestGtkInterface(tests.TestCase): def setUp(self): self.ui = setupGtkInterface(self) def tearDown(self): self.ui.close() def testInitialization(self): '''Test Gtk interface initialization''' # test read only (starts readonly because notebook has no dir or file) self.assertTrue(self.ui.readonly) self.ui.set_readonly(False) self.assertFalse(self.ui.readonly) self.ui.set_readonly(True) self.assertTrue(self.ui.readonly) # TODO more tests for readonly pages etc. # test populating menus menu = gtk.Menu() self.ui.populate_popup('page_popup', menu) items = menu.get_children() self.assertGreater(len(items), 3) # check registering an URL handler func = tests.Counter(True) self.ui.register_url_handler('foo', func) self.ui.open_url('foo://bar') self.assertTrue(func.count == 1) self.ui.unregister_url_handler(func) # check default plugins are loaded self.assertGreaterEqual(len(self.ui.plugins), 3) def testMainWindow(self): '''Test main window''' path = Path('Test:foo:bar') window = self.ui.mainwindow self.assertTrue(window.uistate['show_menubar']) window.toggle_menubar() self.assertFalse(window.uistate['show_menubar']) window.toggle_menubar() self.assertTrue(window.uistate['show_menubar']) self.assertTrue(window.uistate['show_toolbar']) window.toggle_toolbar() self.assertFalse(window.uistate['show_toolbar']) window.toggle_toolbar() self.assertTrue(window.uistate['show_toolbar']) self.assertTrue(window.uistate['show_statusbar']) window.toggle_statusbar() self.assertFalse(window.uistate['show_statusbar']) window.toggle_statusbar() self.assertTrue(window.uistate['show_statusbar']) self.assertTrue(window.uistate['left_pane'][0]) window.toggle_panes() self.assertFalse(window.uistate['left_pane'][0]) window.toggle_panes() self.assertTrue(window.uistate['left_pane'][0]) # note: focus starts at sidepane due to toggle_panes above self.assertEqual(window.get_focus(), window.pageindex.treeview) self.assertEqual(window.get_selected_path(), path) window.toggle_sidepane_focus() self.assertEqual(window.get_focus(), window.pageview.view) self.assertEqual(window.get_selected_path(), path) window.toggle_sidepane_focus() self.assertEqual(window.get_focus(), window.pageindex.treeview) # TODO also check this with "show_sidepane" off self.assertEqual(window.uistate['pathbar_type'], zim.gui.PATHBAR_RECENT) for style in ( zim.gui.PATHBAR_NONE, zim.gui.PATHBAR_HISTORY, zim.gui.PATHBAR_PATH, zim.gui.PATHBAR_RECENT, ): window.set_pathbar(style) self.assertEqual(window.uistate['pathbar_type'], style) # TODO specific test for pathbar to exercize history, add / move / remove pages etc. # note: no default style here - system default unknown for style in ( zim.gui.TOOLBAR_ICONS_AND_TEXT, zim.gui.TOOLBAR_ICONS_ONLY, zim.gui.TOOLBAR_TEXT_ONLY, ): window.set_toolbar_style(style) self.assertEqual(window.preferences['GtkInterface']['toolbar_style'], style) # note: no default style here - system default unknown for size in ( zim.gui.TOOLBAR_ICONS_LARGE, zim.gui.TOOLBAR_ICONS_SMALL, zim.gui.TOOLBAR_ICONS_TINY, ): window.set_toolbar_size(size) self.assertEqual(window.preferences['GtkInterface']['toolbar_size'], size) # FIXME: test fails because "readonly" not active because notebook was already readonly, so action never activatable #~ self.assertTrue(ui.readonly) #~ self.assertTrue(window.uistate['readonly']) #~ window.toggle_readonly() #~ self.assertFalse(ui.readonly) #~ self.assertFalse(window.uistate['readonly']) #~ window.toggle_readonly() #~ self.assertTrue(ui.readonly) #~ self.assertTrue(window.uistate['readonly']) def testNavigation(self): '''Test navigating the notebook with gtk interface''' # build up some history history = ( Path('Test:foo:bar'), Path('Test:'), Path('Test:foo:'), Path('Test:foo:bar'), ) for path in history: self.ui.open_page(path) self.assertEqual(self.ui.page, path) # check forward & backward for path in reversed(history[:-1]): self.assertTrue(self.ui.open_page_back()) self.assertEqual(self.ui.page, path) self.assertFalse(self.ui.open_page_back()) for path in history[1:]: self.assertTrue(self.ui.open_page_forward()) self.assertEqual(self.ui.page, path) self.assertFalse(self.ui.open_page_forward()) # check upward and downward for path in (Path('Test:foo:'), Path('Test:')): self.assertTrue(self.ui.open_page_parent()) self.assertEqual(self.ui.page, path) self.assertFalse(self.ui.open_page_parent()) for path in (Path('Test:foo:'), Path('Test:foo:bar')): self.assertTrue(self.ui.open_page_child()) self.assertEqual(self.ui.page, path) self.assertFalse(self.ui.open_page_child()) # previous and next self.assertTrue(self.ui.open_page_previous()) self.assertTrue(self.ui.open_page_next()) self.assertEqual(self.ui.page, Path('Test:foo:bar')) def testSave(self): '''Test saving a page from the interface''' self.ui.set_readonly(False) self.ui.open_page(Path('Non-exsiting:page')) self.assertFalse(self.ui.page.exists()) self.assertTrue(self.ui.page.get_parsetree() is None) self.assertTrue(self.ui.mainwindow.pageview._showing_template) # check HACK self.ui.save_page() self.assertFalse(self.ui.page.get_parsetree() is None) def testPageMove(self): oldpath, newpath = Path('Movers:Stator:Mover'), Path('Movers:Mover') # Open page and process message queue to sync tree view indexpath = self.ui.notebook.index.lookup_path(oldpath) self.ui.open_page(indexpath) while gtk.events_pending(): gtk.main_iteration(False) # Test actual moving page = self.ui.notebook.get_page(oldpath) text = page.dump('wiki') self.ui.notebook.index.ensure_update() self.ui.notebook.move_page(oldpath, newpath) self.ui.notebook.index.ensure_update() # newpath should exist and look like the old one page = self.ui.notebook.get_page(newpath) self.assertEqual(page.dump('wiki'), text) # oldpath should be deleted page = self.ui.notebook.get_page(oldpath) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) # TODO notebook manipulation (new (sub)page, rename, delete ..) # merge with tests for dialogs (?) def testClipboard(self): self.ui.copy_location() self.assertEqual(Clipboard.get_text(), 'Test:foo:bar') @tests.slowTest class TestClickLink(tests.TestCase): '''Test to check pageview and GtkInterface play together nicely when a link is clicked ''' def setUp(self): class MyMock(zim.gui.GtkInterface, tests.MockObjectBase): def __init__(self, *arg, **kwarg): zim.gui.GtkInterface.__init__(self, *arg, **kwarg) tests.MockObjectBase.__init__(self) for method in ( 'open_notebook', 'open_page', 'open_file', '_open_with_emailclient', '_open_with_webbrowser', '_open_with_filebrowser', '_open_with', ): self.mock_method(method, None) self.ui = setupGtkInterface(self, klass=MyMock) def runTest(self): self.assertRaises(AssertionError, self.ui.open_url, 'foo@bar.com') # this is not a URI, "mailto:foo@bar.com" is # Note: same list of test uris is testing in tests.parsing as well for href, type in ( ('zim+file://foo/bar?dus.txt', 'notebook'), ('file:///foo/bar', 'file'), ('http://foo/bar', 'http'), ('http://192.168.168.100', 'http'), ('file+ssh://foo/bar', 'file+ssh'), ('mailto:foo@bar.com', 'mailto'), ('mailto:foo.com', 'page'), ('foo@bar.com', 'mailto'), ('mailto:foo//bar@bar.com', 'mailto'), # is this a valid mailto uri ? ('mid:foo@bar.org', 'mid'), ('cid:foo@bar.org', 'cid'), ('./foo/bar', 'file'), ('/foo/bar', 'file'), ('~/foo', 'file'), ('C:\\foo', 'file'), ('wp?foo', 'interwiki'), ('http://foo?bar', 'http'), ('\\\\host\\foo\\bar', 'smb'), ('foo', 'page'), ('foo:bar', 'page'), ): #~ print ">> LINK %s (%s)" % (href, type) #~ self.ui.open_url(href) self.ui.mainwindow.pageview.do_link_clicked({'href': href}) msg = "Clicked: \"%s\" resulted in: \"%s\"" % (href, self.ui.mock_calls[-1]) if type == 'notebook': self.assertTrue(self.ui.mock_calls[-1][0] == 'open_notebook', msg=msg) elif type == 'page': self.assertTrue(self.ui.mock_calls[-1][0] == 'open_page', msg=msg) elif type == 'file': self.assertTrue(self.ui.mock_calls[-1][0] == 'open_file', msg=msg) elif type == 'mailto': self.assertTrue(self.ui.mock_calls[-1][0] in ('_open_with_emailclient', '_open_with'), msg=msg) elif type == 'smb' and os.name == 'nt': self.assertTrue(self.ui.mock_calls[-1][0] == '_open_with_filebrowser', msg=msg) else: self.assertTrue(self.ui.mock_calls[-1][0] in ('_open_with_webbrowser', '_open_with'), msg=msg) self.ui.mock_calls = [] # reset # Some more tests that may not be covered above for href, type in ( ('zim+file://foo/bar?dus.txt', 'notebook'), ('file:///foo/bar', 'file'), ('mailto:foo@bar.com', 'mailto'), ): #~ print ">> OPEN_URL %s (%s)" % (href, type) self.ui.open_url(href) msg = "open_url('%s')\nResulted in: %s" % (href, self.ui.mock_calls[-1]) if type == 'notebook': self.assertTrue(self.ui.mock_calls[-1][0] == 'open_notebook', msg=msg) elif type == 'file': self.assertTrue(self.ui.mock_calls[-1][0] == '_open_with_webbrowser', msg=msg) elif type == 'mailto': self.assertTrue(self.ui.mock_calls[-1][0] in ('_open_with_emailclient', '_open_with'), msg=msg) self.ui.mock_calls = [] # reset # TODO test plugin with custom handler @tests.slowTest class TestNotebookDialog(tests.TestCase): def setUp(self): config = ConfigManager() list = config.get_config_file('notebooks.list') file = list.file if file.exists(): file.remove() def runTest(self): from zim.gui.notebookdialog import prompt_notebook, \ AddNotebookDialog, NotebookDialog tmpdir = self.create_tmp_dir() dir1 = Dir(tmpdir + '/mynotebook1') dir2 = Dir(tmpdir + '/mynotebook2') # First time we get directly the AddNotebookDialog def doAddNotebook(dialog): self.assertTrue(isinstance(dialog, AddNotebookDialog)) dialog.form['name'] = 'Foo' dialog.form['folder'] = dir1.path dialog.assert_response_ok() with tests.DialogContext(doAddNotebook): info = prompt_notebook() self.assertIsNotNone(info) self.assertEqual(info.uri, dir1.uri) # Second time we get the list def testNotebookDialog(dialog): self.assertTrue(isinstance(dialog, NotebookDialog)) selection = dialog.treeview.get_selection() selection.select_path((0,)) # select first and only notebook dialog.assert_response_ok() with tests.DialogContext(testNotebookDialog): info = prompt_notebook() self.assertIsNotNone(info) self.assertEqual(info.uri, dir1.uri) # Third time we add a notebook and set the default def doAddNotebook(dialog): self.assertTrue(isinstance(dialog, AddNotebookDialog)) dialog.form['name'] = 'Bar' dialog.form['folder'] = dir2.path dialog.assert_response_ok() def testAddNotebook(dialog): self.assertTrue(isinstance(dialog, NotebookDialog)) with tests.DialogContext(doAddNotebook): dialog.do_add_notebook() dialog.combobox.set_active(0) selection = dialog.treeview.get_selection() selection.select_path((1,)) # select newly added notebook dialog.assert_response_ok() with tests.DialogContext(testAddNotebook): info = prompt_notebook() self.assertIsNotNone(info) self.assertEqual(info.uri, dir2.uri) # Check the notebook exists and the notebook list looks like it should for dir in (dir1, dir2): self.assertTrue(dir.exists()) self.assertTrue(dir.file('notebook.zim').exists()) list = get_notebook_list() self.assertTrue(len(list) == 2) self.assertEqual(list[0], NotebookInfo(dir1.uri, name='Foo')) self.assertEqual(list[1], NotebookInfo(dir2.uri, name='Bar')) self.assertEqual(list.default, NotebookInfo(dir1.uri, name='Foo')) # Now unset the default and again check the notebook list def unsetDefault(dialog): self.assertTrue(isinstance(dialog, NotebookDialog)) dialog.combobox.set_active(-1) selection = dialog.treeview.get_selection() selection.select_path((1,)) # select newly added notebook dialog.assert_response_ok() with tests.DialogContext(unsetDefault): info = prompt_notebook() self.assertIsNotNone(info) self.assertEqual(info.uri, dir2.uri) list = get_notebook_list() self.assertTrue(len(list) == 2) self.assertTrue(list.default is None) class MockUI(tests.MockObject): def __init__(self, page=None, fakedir=None): tests.MockObject.__init__(self) self.tmp_dir = self.create_tmp_dir() if page and not isinstance(page, Path): self.page = Path(page) else: self.page = page self.mainwindow = None self.notebook = tests.new_notebook(fakedir=fakedir) zim-0.65/tests/widgets.py0000664000175000017500000002125312411243031015271 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jaap Karssenberg import tests from zim.fs import File, Dir from zim.notebook import Path from zim.gui.widgets import * class TestFunctions(tests.TestCase): def runTest(self): self.assertEqual(encode_markup_text(' &bar'), '<foo> &bar') self.assertEqual(decode_markup_text('<foo> &bar'), ' &bar') self.assertEqual(decode_markup_text('<foo> &bar'), ' &bar') class TestInputEntry(tests.TestCase): def runTest(self): '''Test InputEntry widget''' entry = InputEntry() self.assertTrue(entry.get_input_valid()) self.assertEqual(entry.get_text(), '') # test unicode nd whitespace entry.set_text(u'\u2022 foo ') text = entry.get_text() self.assertTrue(isinstance(text, unicode)) self.assertEqual(text, u'\u2022 foo') self.assertTrue(entry.get_input_valid()) # test set invalid + change entry.set_input_valid(False) self.assertFalse(entry.get_input_valid()) entry.set_text(u'foo bar') self.assertTrue(entry.get_input_valid()) # test invalid but now with allow_empty=False entry = InputEntry(allow_empty=False) self.assertFalse(entry.get_input_valid()) entry.set_text(u'foo bar') self.assertTrue(entry.get_input_valid()) entry.set_text(u'') self.assertFalse(entry.get_input_valid()) # and with a function entry = InputEntry(check_func=lambda text: text.startswith('a')) self.assertFalse(entry.get_input_valid()) entry.set_text(u'foo bar') self.assertFalse(entry.get_input_valid()) entry.set_text(u'aa foo bar') self.assertTrue(entry.get_input_valid()) entry.set_text(u'') self.assertFalse(entry.get_input_valid()) # and with placeholder text entry = InputEntry(allow_empty=False, placeholder_text='PLACEHOLDER') self.assertEqual(entry.get_text(), u'') self.assertFalse(entry.get_input_valid()) entry.set_text(u'foo bar') self.assertEqual(entry.get_text(), u'foo bar') self.assertTrue(entry.get_input_valid()) entry.set_text(u'') self.assertEqual(entry.get_text(), u'') self.assertFalse(entry.get_input_valid()) class TestFileEntry(tests.TestCase): def setUp(self): path = self.get_tmp_name() self.notebook = tests.new_notebook(fakedir=path) self.entry = FileEntry() def runTest(self): '''Test FileEntry widget''' path = Path('Foo:Bar') entry = self.entry entry.set_use_relative_paths(self.notebook, path) home = Dir('~') dir = self.notebook.dir for file, text in ( (home.file('zim-test.txt'), '~/zim-test.txt'), (dir.file('Foo/Bar/test.txt'), './test.txt'), (File('/test.txt'), File('/test.txt').path), # win32 save ): entry.set_file(file) self.assertEqual(entry.get_text(), text) self.assertEqual(entry.get_file(), file) self.notebook.config['Notebook']['document_root'] = './notebook_document_root' self.notebook.do_properties_changed() # parse config doc_root = self.notebook.document_root self.assertEqual(doc_root, dir.subdir('notebook_document_root')) for file, text in ( (home.file('zim-test.txt'), '~/zim-test.txt'), (dir.file('Foo/Bar/test.txt'), './test.txt'), (File('/test.txt'), File('/test.txt').uri), # win32 save (doc_root.file('test.txt'), '/test.txt'), ): entry.set_file(file) self.assertEqual(entry.get_text(), text) self.assertEqual(entry.get_file(), file) entry.set_use_relative_paths(self.notebook, None) for file, text in ( (home.file('zim-test.txt'), '~/zim-test.txt'), (dir.file('Foo/Bar/test.txt'), './Foo/Bar/test.txt'), (File('/test.txt'), File('/test.txt').uri), # win32 save (doc_root.file('test.txt'), '/test.txt'), ): entry.set_file(file) self.assertEqual(entry.get_text(), text) self.assertEqual(entry.get_file(), file) entry.set_use_relative_paths(notebook=None) for file, text in ( (home.file('zim-test.txt'), '~/zim-test.txt'), #~ (dir.file('Foo/Bar/test.txt'), './test.txt'), (File('/test.txt'), File('/test.txt').path), # win32 save ): entry.set_file(file) self.assertEqual(entry.get_text(), text) self.assertEqual(entry.get_file(), file) class TestPageEntry(tests.TestCase): entryklass = PageEntry def setUp(self): path = self.get_tmp_name() self.notebook = tests.new_notebook(fakedir=path) self.reference = Path('Test:foo') self.entry = self.entryklass(self.notebook, self.reference) def runTest(self): '''Test PageEntry widget''' entry = self.entry reference = self.reference entry.set_path(Path('Test')) self.assertEqual(entry.get_text(), ':Test') self.assertEqual(entry.get_path(), Path('Test')) entry.set_text('bar') self.assertEqual(entry.get_path(), Path('Bar')) # resolved due to placeholder entry.set_text('non existing') self.assertEqual(entry.get_path(), Path('Test:non existing')) entry.set_text('+bar') self.assertEqual(entry.get_path(), Path('Test:foo:bar')) entry.set_text(':bar') self.assertEqual(entry.get_path(), Path('Bar')) ## Test completion def get_completions(entry): completion = entry.get_completion() model = completion.get_model() return [r[0] for r in model] entry.set_text('+T') self.assertEqual(get_completions(entry), ['+bar']) entry.set_text(':T') completions = get_completions(entry) self.assertTrue(len(completions) > 5 and ':Test' in completions) entry.set_text('T') self.assertTrue(len(completions) > 5 and ':Test' in completions) # completion now has full notebook entry.set_text('Test:') self.assertEqual(get_completions(entry), ['Test:foo', 'Test:Foo Bar', 'Test:Foo(Bar)', 'Test:tags', 'Test:wiki']) class TestNamespaceEntry(TestPageEntry): entryklass = NamespaceEntry def runTest(self): '''Test NamespaceEntry widget''' entry = self.entry entry.set_text('') entry.do_focus_in_event(gtk.gdk.Event(gtk.gdk.FOCUS_CHANGE)) self.assertTrue(entry.get_input_valid()) self.assertEqual(entry.get_text(), '') # No '' or something ! self.assertEqual(entry.get_path(), Path(':')) entry.do_focus_out_event(gtk.gdk.Event(gtk.gdk.FOCUS_CHANGE)) self.assertTrue(entry.get_input_valid()) self.assertEqual(entry.get_text(), '') # No '' or something ! self.assertEqual(entry.get_path(), Path(':')) TestPageEntry.runTest(self) class TestLinkEntry(TestPageEntry, TestFileEntry): entryklass = LinkEntry def runTest(self): '''Test LinkEntry widget''' TestPageEntry.runTest(self) TestFileEntry.runTest(self) class TestInputForm(tests.TestCase): def runTest(self): '''Test InputForm widget''' inputs = [ ('foo', 'string', 'Foo'), ('bar', 'password', 'Bar'), ('check', 'bool', 'Check'), ('width', 'int', 'Width', (0, 10)), ('app', 'choice', 'Application', ['foo', 'bar', 'baz']), ('page', 'page', 'Page'), ('namespace', 'namespace', 'Namespace'), #~ ('link', 'link', 'Link'), ('file', 'file', 'File'), ('image', 'image', 'Image'), ('folder', 'dir', 'Folder') ] values1 = { 'foo': '', 'bar': 'dus', 'check': True, 'width': 1, 'app': 'foo', 'page': ':foo:bar:Baz', # explicit string input 'namespace': ':foo:bar:Baz', #~ 'link': '+Baz', 'file': '/foo/bar', 'image': '/foo/bar.png', 'folder': '/foo/bar', } values2 = { 'foo': 'tja', 'bar': 'hmm', 'check': False, 'width': 3, 'app': 'bar', 'page': Path(':Dus:Baz'), # explicit Path input 'namespace': Path(':Dus:Baz'), #~ 'link': ':Foo', 'file': '/foo/bar/baz', 'image': '/foo.png', 'folder': '/foo/bar/baz', } def assertEqual(U, V): self.assertEqual(set(U.keys()), set(V.keys())) for k, v in V.items(): if isinstance(U[k], Path) and isinstance(v, basestring): v = Path(v) elif isinstance(U[k], File) and isinstance(v, basestring): v = File(v) elif isinstance(U[k], Dir) and isinstance(v, basestring): v = Dir(v) self.assertEqual(U[k], v) notebook = tests.new_notebook() form = InputForm(inputs, values1, notebook=notebook) for input in inputs: name = input[0] self.assertTrue(form.widgets[name], 'Missing input "%s"' % name) assertEqual(form, values1) form.update(values2) assertEqual(form, values2) config = {} config.update(form) assertEqual(config, values2) form.show_all() form.focus_first() i = 0 while form.focus_next(): i += 1 self.assertEqual(i, 9) @tests.slowTest class TestFileDialog(tests.TestCase): def runTest(self): tmp_dir = self.create_tmp_dir() file = File((tmp_dir, 'test.txt')) file.write('test 123') self.assertTrue(file.exists()) dialog = FileDialog(None, 'Test') dialog.set_file(file) #~ myfile = dialog.get_file() #~ self.assertTrue(myfile) #~ self.assertTrue(myfile == file) #~ dialog.assert_response_ok() #~ self.assertTrue(dialog.result == file) # TODO select multiple # TODO select folder # TODO add filters zim-0.65/tests/history.py0000664000175000017500000002514212374655231015346 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg from __future__ import with_statement import tests import copy import zim.history from zim.history import History, HistoryPath, RecentPath from zim.notebook import Path from zim.config import INIConfigFile class VirtualFile(object): ### TODO - proper class for this in zim.fs ### unify with code in config manager def __init__(self, lines): self.lines = lines def readlines(self): return self.lines def connect(self, handler, *a): pass def disconnect(self, handler): pass class TestHistory(tests.TestCase): def setUp(self): zim.history.MAX_HISTORY = 100 self.notebook = tests.new_notebook() self.pages = [self.notebook.get_page(Path(name)) for name in self.notebook.testdata_manifest] def assertCurrentEquals(self, history, path): current = history.get_current() self.assertTrue(isinstance(current, HistoryPath)) self.assertEqual(current.name, path.name) def assertHistoryEquals(self, history, pages): self._checkPaths(history.get_history(), pages, HistoryPath) def assertRecentEquals(self, history, pages): self._checkPaths(history.get_recent(), pages, RecentPath) def _checkPaths(self, paths, wanted, klass): paths = list(paths) paths.reverse() self.assertTrue(any(isinstance(p, klass) for p in paths), 'All should have klass: %s' % klass) self.assertEqual([p.name for p in paths], [p.name for p in wanted]) def testState(self): history = History(self.notebook) for page in self.pages: history.append(page) self.assertHistoryEquals(history, self.pages) path = history.get_current() self.assertEqual(history.get_state(path), (None, None)) path.cursor = 42 self.assertEqual(history.get_state(path), (42, None)) def testLinear(self): '''Walk back and forth through the history''' history = History(self.notebook) self.assertTrue(history.get_current() is None) for page in self.pages: history.append(page) self.assertHistoryEquals(history, self.pages) self.assertCurrentEquals(history, self.pages[-1]) pages = list(history.get_history()) self.assertEqual(pages[0], history.get_current()) self.assertEqual(len(pages), len(self.pages)) self.assertEqual(pages[0].cursor, None) # Newly appended pages should not have the cursor # set - pageview has logic to do the right thing when # no cursor is set. Setting default e.g. 0 will # overrule this logic. # walk backwards for i in range(2, len(self.pages)+1): prev = history.get_previous() self.assertFalse(prev is None) self.assertEqual(prev.name, self.pages[-i].name) self.assertFalse(prev.is_last) history.set_current(prev) self.assertCurrentEquals(history, self.pages[0]) self.assertTrue(history.get_previous() is None) self.assertTrue(prev.is_first) self.assertHistoryEquals(history, self.pages) # walk forward for i in range(1, len(self.pages)): next = history.get_next() self.assertFalse(next is None) self.assertEqual(next.name, self.pages[i].name) self.assertFalse(next.is_first) history.set_current(next) self.assertCurrentEquals(history, self.pages[-1]) self.assertTrue(history.get_next() is None) self.assertTrue(history.get_current().is_last) self.assertHistoryEquals(history, self.pages) # Add page multiple times current = history.get_current() path = Path(current.name) for j in range(5): history.append(path) self.assertHistoryEquals(history, self.pages) # history does not store duplicates self.assertEquals(history.get_current(), current) # Test dropping forward stack historylist = list(history.get_history()) path1 = historylist[10] path2 = historylist[0] history.set_current(path1) self.assertEquals(history.get_current(), path1) # rewind self.assertHistoryEquals(history, self.pages) # no change history.append(path2) # new path - drop forward stack i = len(pages) - 10 wanted = self.pages[:i] + [path2] self.assertHistoryEquals(history, wanted) # Test max entries default_max_history = zim.history.MAX_HISTORY zim.history.MAX_HISTORY = 3 for page in self.pages: history.append(page) zim.history.MAX_HISTORY = default_max_history self.assertHistoryEquals(history, self.pages[-3:]) def testUnique(self): '''Get recent pages from history''' default_max_recent = zim.history.MAX_RECENT zim.history.MAX_RECENT = len(self.pages) + 1 history = History(self.notebook) for page in self.pages: history.append(page) self.assertHistoryEquals(history, self.pages) unique = list(history.get_recent()) self.assertEqual(unique[0], history.get_current()) self.assertEqual(len(unique), len(self.pages)) for page in self.pages: history.append(page) self.assertHistoryEquals(history, 2 * self.pages) unique = list(history.get_recent()) self.assertEqual(unique[0], history.get_current()) self.assertEqual(len(unique), len(self.pages)) unique = set([page.name for page in unique]) # collapse doubles self.assertEqual(len(unique), len(self.pages)) zim.history.MAX_RECENT = 3 history = History(self.notebook) for page in self.pages: history.append(page) zim.history.MAX_RECENT = default_max_recent self.assertHistoryEquals(history, self.pages) unique = list(history.get_recent()) self.assertEqual(unique[0], history.get_current()) self.assertEqual(len(unique), 3) def testChildren(self): '''Test getting namespace from history''' history = History(self.notebook) for name in ('Test:wiki', 'Test:foo:bar', 'Test:foo', 'TaskList:bar'): page = self.notebook.get_page(Path(name)) history.append(page) self.assertEqual(history.get_child(Path('Test')), Path('Test:foo')) self.assertEqual(history.get_grandchild(Path('Test')), Path('Test:foo:bar')) self.assertEqual(history.get_child(Path('NonExistent')), None) self.assertEqual(history.get_grandchild(Path('NonExistent')), None) history.append(self.notebook.get_page(Path('Test:wiki'))) self.assertEqual(history.get_child(Path('Test')), Path('Test:wiki')) self.assertEqual(history.get_grandchild(Path('Test')), Path('Test:wiki')) page = self.notebook.get_page(Path('Some:deep:nested:page')) history.append(page) self.assertEqual(history.get_child(Path('Some')), Path('Some:deep')) self.assertEqual(history.get_grandchild(Path('Some')), Path('Some:deep:nested:page')) def testMovePage(self): '''Test history is updated for moved pages''' history = History(self.notebook) for page in self.pages: history.append(page) self.assertIn(Path('Test:wiki'), list(history.get_history())) history._on_page_moved(self.notebook, Path('Test'), Path('New'), False) self.assertNotIn(Path('Test:wiki'), list(history.get_history())) self.assertIn(Path('New:wiki'), list(history.get_history())) history._on_page_moved(self.notebook, Path('New'), Path('Test'), False) self.assertNotIn(Path('New:wiki'), list(history.get_history())) self.assertIn(Path('Test:wiki'), list(history.get_history())) self.assertHistoryEquals(history, self.pages) def testDeletedNotInUnique(self): '''Test if deleted pages and their children show up in unique history list''' zim.history.MAX_RECENT = len(self.pages) + 1 history = History(self.notebook) for page in self.pages: history.append(page) for page in self.pages: history.append(page) self.assertHistoryEquals(history, 2 * self.pages) uniques = list(history.get_recent()) self.assertEqual(len(uniques), len(self.pages)) page = history.get_current() history._on_page_deleted(self.notebook, page) uniques = list(history.get_recent()) self.assertTrue(len(uniques) < len(self.pages)) i = len(uniques) history.set_current(page) uniques = list(history.get_recent()) self.assertEqual(len(uniques), i + 1) # Not same as len(self.pages) because of deleted children for page in self.pages: history._on_page_deleted(self.notebook, page) uniques = list(history.get_recent()) self.assertEqual(len(uniques), 0) self.assertEqual( len(list(history.get_history())), 2 * len(self.pages) ) for page in history.get_history(): history.set_current(page) uniques = list(history.get_recent()) self.assertEqual(len(uniques), len(self.pages)) def testSerialize(self): '''Test parsing the history from the state file''' uistate = INIConfigFile(VirtualFile([])) history = History(self.notebook, uistate) for page in self.pages: history.append(page) self.assertHistoryEquals(history, self.pages) self.assertCurrentEquals(history, self.pages[-1]) # rewind 2 for i in range(2): prev = history.get_previous() history.set_current(prev) # check state #~ import pprint #~ pprint.pprint(uistate) self.assertHistoryEquals(history, uistate['History']['list']) self.assertRecentEquals(history, uistate['History']['recent']) self.assertEqual(uistate['History']['current'], len(self.pages) - 3) # clone uistate by text lines = uistate.dump() newuistate = INIConfigFile(VirtualFile(lines)) newuistate['History'].setdefault('list', []) newuistate['History'].setdefault('recent', []) newuistate['History'].setdefault('current', 0) # check new state self.assertHistoryEquals(history, [Path(t[0]) for t in newuistate['History']['list']]) self.assertRecentEquals(history, [Path(t[0]) for t in newuistate['History']['recent']]) self.assertEqual(newuistate['History']['current'], len(self.pages) - 3) # and compare resulting history object newhistory = History(self.notebook, newuistate) self.assertEqual(list(newhistory.get_history()), list(history.get_history())) self.assertEqual(list(newhistory.get_recent()), list(history.get_recent())) self.assertEqual(newhistory.get_current(), history.get_current()) # Check recent is initialized if needed newuistate = INIConfigFile(VirtualFile(lines)) newuistate['History'].setdefault('recent', []) newuistate['History'].pop('recent') newhistory = History(self.notebook, newuistate) self.assertEqual(list(newhistory.get_history()), list(history.get_history())) self.assertEqual(list(newhistory.get_recent()), list(history.get_recent())) self.assertEqual(newhistory.get_current(), history.get_current()) def testRobustness(self): '''Test history can deal with garbage data''' uistate = INIConfigFile(VirtualFile([])) uistate['History'].input({ 'list': 'FOOOO', 'recent': [["BARRRR", 0]], 'cursor': 'Not an integer', }) with tests.LoggingFilter( logger='zim.config', message='Invalid config' ): with tests.LoggingFilter( logger='zim.history', message='Could not parse' ): history = History(self.notebook, uistate) self.assertEqual(list(history.get_history()), []) self.assertEqual(list(history.get_recent()), []) self.assertIsNone(history.get_current()) zim-0.65/tests/datetimetz.py0000664000175000017500000000375512374655231016025 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2014 Jaap Karssenberg from __future__ import with_statement import tests import warnings import zim.datetimetz as datetime class TestDateTimeZ(tests.TestCase): # FIXME would be better to test correctness of results # but first check functions do not give errors def setUp(self): with warnings.catch_warnings(): warnings.simplefilter("ignore") try: import babel except ImportError: pass def runTest(self): # now() dt = datetime.now() s = dt.isoformat() self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = dt.strftime("%z") self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = dt.strftime("%Z") self.assertTrue(isinstance(s, basestring) and len(s) > 0) # strftime s = datetime.strftime('%a', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strftime('%%', dt) self.assertEqual(s, '%') s = datetime.strftime('%u', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strftime('%V', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) # strfcal s = datetime.strfcal('%w', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strfcal('%W', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strfcal('%Y', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strfcal('%%', dt) self.assertEqual(s, '%') # weekcalendar year, week, weekday = datetime.weekcalendar(dt) self.assertTrue(isinstance(year, int) and 1900 < year and 3000 > year) self.assertTrue(isinstance(week, int) and 1 <= week and 53 >= week) self.assertTrue(isinstance(weekday, int) and 1 <= weekday and 7 >= weekday) # dates_for_week start, end = datetime.dates_for_week(year, week) self.assertTrue(isinstance(start, datetime.date)) self.assertTrue(isinstance(end, datetime.date)) self.assertTrue(start <= dt.date() and end >= dt.date()) zim-0.65/tests/printtobrowser.py0000664000175000017500000000113212411243417016730 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg import tests from zim.plugins import PluginManager from zim.notebook import Path @tests.slowTest class TestPrintToBrowser(tests.TestCase): def runTest(self): 'Test PrintToBrowser plugin' pluginklass = PluginManager.get_plugin_class('printtobrowser') plugin = pluginklass() notebook = tests.new_notebook() page = notebook.get_page(Path('Test:foo')) file = plugin.print_to_file(notebook, page) self.assertTrue(file.exists()) content = file.read() self.assertTrue('

    Foo

    ' in content) zim-0.65/tests/versioncontrol.py0000664000175000017500000004531712614412356016735 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg from __future__ import with_statement import tests from tests.gui import setupGtkInterface import os import tempfile import gtk from zim.fs import File, Dir from zim.applications import Application from zim.notebook import Path from zim.plugins.versioncontrol import * import zim.plugins.versioncontrol.bzr import zim.plugins.versioncontrol.hg import zim.plugins.versioncontrol.git import zim.plugins.versioncontrol.fossil # We define our own tmp dir here instead of using tests.create_tmp_dir # because sources are probably under change control already - want to # avoid mixing up the files def get_tmp_dir(name): if 'REAL_TMP' in os.environ: # Set in tests/__init__.py dir = Dir(os.environ['REAL_TMP']) else: dir = Dir(tempfile.gettempdir()) #~ print "TMPDIR:", dir dir = dir.subdir('test_versioncontrol').subdir(name) if dir.exists(): dir.remove_children() dir.remove() assert not dir.exists() return dir WIKITEXT = File('tests/data/formats/wiki.txt').read() # Contains some unicode UTF8_COMMENT = u'Commit \u03b1\u03b2\u03b3' @tests.slowTest class TestVCS(tests.TestCase): def testDetectVCS(self): root = Dir(self.create_tmp_dir()) root.subdir('.bzr').touch() self.assertEqual(VCS._detect_in_folder(root), ('bzr', root)) subdir = root.subdir('Foo/Bar') subdir.touch() self.assertEqual(VCS._detect_in_folder(subdir), ('bzr', root)) subroot = root.subdir('subroot') subroot.subdir('.git').touch() self.assertEqual(VCS._detect_in_folder(subroot), ('git', subroot)) subdir = subroot.subdir('Foo/Bar') subdir.touch() self.assertEqual(VCS._detect_in_folder(subdir), ('git', subroot)) subroot = root.subdir('subfold') subroot.file('.fslckout').touch() self.assertEqual(VCS._detect_in_folder(subroot), ('fossil', subroot)) subdir = subroot.subdir('Foo/Bar') subdir.touch() self.assertEqual(VCS._detect_in_folder(subdir), ('fossil', subroot)) @tests.slowTest @tests.skipUnless( any( map(VCS.check_dependencies, (VCS.BZR, VCS.GIT, VCS.HG)) ), 'Missing dependencies') class TestMainWindowExtension(tests.TestCase): def runTest(self): plugin = VersionControlPlugin() dir = get_tmp_dir('versioncontrol_TestMainWindowExtension') notebook = tests.new_files_notebook(dir) ui = setupGtkInterface(self, notebook=notebook) plugin.extend(notebook) plugin.extend(ui.mainwindow) notebook_ext = plugin.get_extension(NotebookExtension) self.assertIsInstance(notebook_ext, NotebookExtension) window_ext = plugin.get_extension(MainWindowExtension) self.assertIsInstance(window_ext, MainWindowExtension) ## init & save version self.assertIsNone(notebook_ext.vcs) def init(dialog): self.assertIsInstance(dialog, VersionControlInitDialog) choice = dialog.combobox.get_active_text() self.assertTrue(choice and not choice.isspace()) dialog.emit('response', gtk.RESPONSE_YES) with tests.DialogContext(init, SaveVersionDialog): window_ext.save_version() self.assertIsNotNone(notebook_ext.vcs) window_ext._autosave_thread.join() self.assertFalse(notebook_ext.vcs.modified) ## save version again page = notebook.get_page(Path('Foo')) page.parse('wiki', 'foo!') notebook.store_page(page) self.assertTrue(notebook_ext.vcs.modified) with tests.DialogContext(SaveVersionDialog): window_ext.save_version() window_ext._autosave_thread.join() self.assertFalse(notebook_ext.vcs.modified) ## show versions with tests.DialogContext(VersionsDialog): window_ext.show_versions() ## auto-save plugin.preferences['autosave'] = True page = notebook.get_page(Path('Fooooo')) page.parse('wiki', 'foo!') notebook.store_page(page) self.assertTrue(notebook_ext.vcs.modified) ui.emit('quit') self.assertFalse(notebook_ext.vcs.modified) @tests.slowTest class TestVersionsDialog(tests.TestCase): def testSideBySide(self): app = get_side_by_side_app() if Application('meld').tryexec(): self.assertIsNotNone(app) if app is None: print '\nCould not find an application for side-by-side comparison' else: self.assertTrue(app.tryexec) def testDialog(self): pass # TODO test other dialog functions class VersionControlBackendTests(object): def setUp(self): zim.plugins.versioncontrol.TEST_MODE = False def tearDown(self): zim.plugins.versioncontrol.TEST_MODE = True # TODO - unify test cases with single interface test ##################################################### # # BAZAAR BACKEND TEST # ##################################################### @tests.slowTest @tests.skipUnless(VCS.check_dependencies(VCS.BZR), 'Missing dependencies') class TestBazaar(VersionControlBackendTests, tests.TestCase): def runTest(self): '''Test Bazaar version control''' root = get_tmp_dir('versioncontrol_TestBazaar') vcs = VCS.create(VCS.BZR, root, root) vcs.init() #~ for notebookdir in (root, root.subdir('foobar')): #~ detected = VersionControlPlugin._detect_vcs(notebookdir) #~ self.assertEqual(detected.__class__, BazaarVCS) #~ del detected # don't keep multiple instances around subdir = root.subdir('foo/bar') file = subdir.file('baz.txt') file.write('foo\nbar\n') self.assertEqual(''.join(vcs.get_status()), '''\ added: .bzrignore foo/ foo/bar/ foo/bar/baz.txt ''' ) vcs.commit('test 1') self.assertRaises(NoChangesError, vcs.commit, 'test 1') ignorelines = lambda line: not (line.startswith('+++') or line.startswith('---')) # these lines contain time stamps diff = vcs.get_diff(versions=(0, 1)) diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ === added file '.bzrignore' @@ -0,0 +1,1 @@ +**/.zim === added directory 'foo' === added directory 'foo/bar' === added file 'foo/bar/baz.txt' @@ -0,0 +1,2 @@ +foo +bar ''' ) file.write('foo\nbaz\n') diff = vcs.get_diff() diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ === modified file 'foo/bar/baz.txt' @@ -1,2 +1,2 @@ foo -bar +baz ''' ) vcs.revert() self.assertEqual(vcs.get_diff(), ['=== No Changes\n']) file.write('foo\nbaz\n') vcs.commit('test 2') diff = vcs.get_diff(versions=(1, 2)) diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ === modified file 'foo/bar/baz.txt' @@ -1,2 +1,2 @@ foo -bar +baz ''' ) versions = vcs.list_versions() #~ print 'VERSIONS>>', versions self.assertTrue(len(versions) == 2) self.assertTrue(len(versions[0]) == 4) self.assertEqual(versions[0][0], '1') self.assertEqual(versions[0][3], u'test 1\n') self.assertTrue(len(versions[1]) == 4) self.assertEqual(versions[1][0], '2') self.assertEqual(versions[1][3], u'test 2\n') lines = vcs.get_version(file, version=1) self.assertEqual(''.join(lines), '''\ foo bar ''' ) annotated = vcs.get_annotated(file) lines = [] for line in annotated: # get rid of user name ann, text = line.split('|') lines.append(ann[0]+' |'+text) self.assertEqual(''.join(lines), '''\ 1 | foo 2 | baz ''' ) #~ print 'TODO - test moving a file' file.rename(root.file('bar.txt')) diff = vcs.get_diff() diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ === renamed file 'foo/bar/baz.txt' => 'bar.txt' ''' ) # Test unicode support file.write(WIKITEXT) diff = vcs.get_diff() diff = ''.join(diff) self.assertIsInstance(diff, unicode) vcs.commit(UTF8_COMMENT) versions = vcs.list_versions() self.assertTrue(UTF8_COMMENT in versions[-1][-1]) self.assertIsInstance(versions[-1][-1], unicode) ### Test delete ### file.remove() file.dir.cleanup() diff = vcs.get_diff() vcs.commit('deleted file') ##################################################### # # GIT BACKEND TEST # ##################################################### @tests.slowTest @tests.skipUnless(VCS.check_dependencies(VCS.GIT), 'Missing dependencies') class TestGit(VersionControlBackendTests, tests.TestCase): def runTest(self): '''Test Git version control''' root = get_tmp_dir('versioncontrol_TestGit') vcs = VCS.create(VCS.GIT, root, root) vcs.init() #~ for notebookdir in (root, root.subdir('foobar')): #~ detected = VersionControlPlugin._detect_vcs(notebookdir) #~ self.assertEqual(detected.__class__, BazaarVCS) #~ del detected # don't keep multiple instances around subdir = root.subdir('foo/bar') file = subdir.file('baz.txt') file.write('foo\nbar\n') self.assertEqual(''.join(vcs.get_status(porcelain=True)), 'A .gitignore\n' 'A foo/bar/baz.txt\n' ) vcs.update_staging() vcs.commit('test 1') #[master 0f4132e] test 1 # 1 files changed, 3 insertions(+), 0 deletions(-) # create mode 100644 foo/bar/baz.txt # git plugin doesnt support this atm #self.assertRaises(NoChangesError, vcs.commit, 'test 1') file = subdir.file('bar.txt') file.write('second\ntest\n') self.assertEqual(''.join(vcs.get_status(porcelain=True)), 'A foo/bar/bar.txt\n' ) vcs.update_staging() vcs.commit('test 2') #[master dbebdf1] test 2 # 0 files changed, 0 insertions(+), 0 deletions(-) # create mode 100644 foo/bar/bar.txt # git plugin doesnt support this atm #self.assertRaises(NoChangesError, vcs.commit, 'test 2') # these lines contain file perms & hashes ignorelines = lambda line: not (line.startswith('new') or line.startswith('index')) diff = vcs.get_diff(versions=('HEAD')) # john@joran:~/code/zim/TEST$ git diff master^ # diff --git a/foo/bar/bar.txt b/foo/bar/bar.txt # new file mode 100644 # index 0000000..e69de29 diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ diff --git a/foo/bar/bar.txt b/foo/bar/bar.txt --- /dev/null +++ b/foo/bar/bar.txt @@ -0,0 +1,2 @@ +second +test ''' ) file.write('second\nbaz\n') diff = vcs.get_diff() diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ diff --git a/foo/bar/bar.txt b/foo/bar/bar.txt --- a/foo/bar/bar.txt +++ b/foo/bar/bar.txt @@ -1,2 +1,2 @@ second -test +baz ''' ) vcs.revert() self.assertEqual(vcs.get_status(porcelain=True), []) file.write('second\nbaz\n') vcs.commit('test 3') diff = vcs.get_diff(versions=('HEAD', 'HEAD^')) diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ diff --git a/foo/bar/bar.txt b/foo/bar/bar.txt --- a/foo/bar/bar.txt +++ b/foo/bar/bar.txt @@ -1,2 +1,2 @@ second -test +baz ''' ) versions = vcs.list_versions() self.assertTrue(isinstance(versions,list)) #~ print 'VERSIONS>>', versions self.assertTrue(len(versions) == 3) self.assertTrue(isinstance(versions[0],tuple)) self.assertTrue(len(versions[0]) == 4) self.assertTrue(isinstance(versions[0][0],basestring)) self.assertTrue(isinstance(versions[0][1],basestring)) self.assertTrue(isinstance(versions[0][2],basestring)) self.assertTrue(isinstance(versions[0][3],basestring)) self.assertEqual(versions[0][3], u'test 1\n') self.assertTrue(len(versions[1]) == 4) self.assertEqual(versions[1][3], u'test 2\n') self.assertTrue(len(versions[2]) == 4) self.assertEqual(versions[2][3], u'test 3\n') # slightly different, we check the 2nd file lines = vcs.get_version(file, version='HEAD^') self.assertEqual(''.join(lines), '''\ second test ''' ) #john@joran:/tmp/test_versioncontrol/versioncontrol_TestGit$ git annotate -t foo/bar/bar.txt #09be0483 (John Drinkwater 1309533637 +0100 1)second #526fb2b5 (John Drinkwater 1309533637 +0100 2)baz #john@joran:/tmp/test_versioncontrol/versioncontrol_TestGit$ git blame -s foo/bar/bar.txt #09be0483 1) second #526fb2b5 2) baz annotated = vcs.get_annotated(file) lines = [] for line in annotated: # get rid of commit hash, its unique commit, num, text = line.split(' ') lines.append(num+' '+text) self.assertEqual(''.join(lines), '''\ 1) second 2) baz ''' ) # Test unicode support file.write(WIKITEXT) diff = vcs.get_diff() diff = ''.join(diff) self.assertIsInstance(diff, unicode) vcs.commit(UTF8_COMMENT) versions = vcs.list_versions() self.assertIn(UTF8_COMMENT, versions[-1][-1]) self.assertIsInstance(versions[-1][-1], unicode) ### Test delete ### file.remove() file.dir.cleanup() diff = vcs.get_diff() vcs.commit('deleted file') # XXX ignore renames and deletions? # Below is a test that we dont need to handle, as we can be quite ignorant of them. Especially considering # how git tracks file moves, ie, it doesnt. # file.rename(root.file('bar.txt')) # diff = vcs.get_diff() #john@joran:~/code/zim/TEST$ git diff #diff --git a/foo/bar/bar.txt b/foo/bar/bar.txt #deleted file mode 100644 #… #john@joran:~/code/zim/TEST$ git commit -a -m "Moved test 4" #[master b099d98] Moved test 4 # 1 files changed, 0 insertions(+), 0 deletions(-) # rename foo/bar/{bar.txt => boo.txt} (100%) ##################################################### # # MERCURIAL BACKEND TEST # ##################################################### @tests.slowTest @tests.skipUnless(VCS.check_dependencies(VCS.HG), 'Missing dependencies') class TestMercurial(VersionControlBackendTests, tests.TestCase): def runTest(self): '''Test Mercurial version control''' root = get_tmp_dir('versioncontrol_TestMercurial') vcs = VCS.create(VCS.HG, root, root) vcs.init() #~ for notebookdir in (root, root.subdir('foobar')): #~ detected = VersionControlPlugin._detect_vcs(notebookdir) #~ self.assertEqual(detected.__class__, BazaarVCS) #~ del detected # don't keep multiple instances around subdir = root.subdir('foo/bar') file = subdir.file('baz.txt') file.write('foo\nbar\n') self.assertEqual(''.join(vcs.get_status()), '''\ A .hgignore A foo/bar/baz.txt ''' ) vcs.commit('test 1') self.assertRaises(NoChangesError, vcs.commit, 'test 1') ignorelines = lambda line: not (line.startswith('+++') or line.startswith('---')) # these lines contain time stamps file.write('foo\nbaz\n') diff = vcs.get_diff() diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ diff --git a/foo/bar/baz.txt b/foo/bar/baz.txt @@ -1,2 +1,2 @@ foo -bar +baz ''' ) vcs.revert() self.assertEqual(vcs.get_diff(), ['=== No Changes\n']) file.write('foo\nbaz\n') vcs.commit('test 2') diff = vcs.get_diff(versions=(0, 1)) diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ diff --git a/foo/bar/baz.txt b/foo/bar/baz.txt @@ -1,2 +1,2 @@ foo -bar +baz ''' ) versions = vcs.list_versions() #~ print 'VERSIONS>>', versions self.assertTrue(len(versions) == 2) self.assertTrue(len(versions[0]) == 4) self.assertEqual(versions[0][0], str(0)) self.assertEqual(versions[0][3], u'test 1') self.assertTrue(len(versions[1]) == 4) self.assertEqual(versions[1][0], str(1)) self.assertEqual(versions[1][3], u'test 2') lines = vcs.get_version(file, version=0) self.assertEqual(''.join(lines), '''\ foo bar ''' ) annotated = vcs.get_annotated(file) lines = [] for line in annotated: # get rid of user name ann, text = line.split(':') lines.append(ann[0]+':'+text) self.assertEqual(''.join(lines), '''\ 0: foo 1: baz ''' ) #~ print 'TODO - test moving a file' file.rename(root.file('bar.txt')) diff = vcs.get_diff() diff = ''.join(filter(ignorelines, diff)) self.assertEqual(diff, '''\ diff --git a/foo/bar/baz.txt b/bar.txt rename from foo/bar/baz.txt rename to bar.txt ''' ) # Test deleting file root.file('bar.txt').remove() vcs.commit('test deleting') # Test unicode support file.write(WIKITEXT) diff = vcs.get_diff() diff = ''.join(diff) self.assertIsInstance(diff, unicode) vcs.commit(UTF8_COMMENT) versions = vcs.list_versions() self.assertTrue(UTF8_COMMENT in versions[-1][-1]) self.assertIsInstance(versions[-1][-1], unicode) ### Test delete ### file.remove() file.dir.cleanup() diff = vcs.get_diff() vcs.commit('deleted file') ##################################################### # # FOSSIL BACKEND TEST # ##################################################### @tests.slowTest @tests.skipUnless(VCS.check_dependencies(VCS.FOSSIL), 'Missing dependencies') class TestFossil(VersionControlBackendTests, tests.TestCase): def runTest(self): '''Test Fossil version control''' root = get_tmp_dir('versioncontrol_TestFossil') vcs = VCS.create(VCS.FOSSIL, root, root) vcs.init() subdir = root.subdir('foo/bar') file = subdir.file('baz.txt') file.write('foo\nbar\n') vcs.on_path_created(None,file) self.assertEqual(''.join(vcs.get_status()), 'ADDED foo/bar/baz.txt\n' ) vcs.update_staging() vcs.commit('test 1') file = subdir.file('bar.txt') file.write('second\ntest\n') vcs.on_path_created(None,file) self.assertEqual(''.join(vcs.get_status()), 'ADDED foo/bar/bar.txt\n' ) vcs.update_staging() vcs.commit('test 2') versions = vcs.list_versions() self.assertTrue(isinstance(versions,list)) #~ print 'VERSIONS>>', versions self.assertTrue(len(versions) == 3) self.assertTrue(isinstance(versions[0],tuple)) self.assertTrue(len(versions[0]) == 4) self.assertTrue(isinstance(versions[0][0],basestring)) self.assertTrue(isinstance(versions[0][1],basestring)) self.assertTrue(isinstance(versions[0][2],basestring)) self.assertTrue(isinstance(versions[0][3],basestring)) self.assertEqual(versions[0][3], u'test 2 ') self.assertTrue(len(versions[1]) == 4) self.assertEqual(versions[1][3], u'test 1 ') # slightly different, we check the 2nd file lines = vcs.get_version(file, version=versions[0][0]) self.assertEqual(''.join(lines), '''\ second test ''' ) diff = vcs.get_diff(versions=(versions[2][0], versions[0][0])) diff = ''.join(diff) self.assertEqual(diff, '''\ ADDED foo/bar/bar.txt ADDED foo/bar/baz.txt ''' ) file.write('second\nbaz\n') diff = vcs.get_diff() diff = ''.join(diff) self.assertEqual(diff, '''\ Index: foo/bar/bar.txt ================================================================== --- foo/bar/bar.txt +++ foo/bar/bar.txt @@ -1,2 +1,2 @@ second -test +baz ''' ) vcs.revert() self.assertEqual(vcs.get_status(), []) file.write('second\nbaz\n') vcs.commit('test 3') versions = vcs.list_versions() diff = vcs.get_diff(versions=(versions[1][0], versions[0][0])) diff = ''.join(diff) self.assertEqual(diff, '''\ Index: foo/bar/bar.txt ================================================================== --- foo/bar/bar.txt +++ foo/bar/bar.txt @@ -1,2 +1,2 @@ second -test +baz ''' ) annotated = vcs.get_annotated(file) lines = [] for line in annotated: # get rid of commit hash, its unique commit, date, num, text = line.split(None, 4) lines.append(num+' '+text) self.assertEqual('\n'.join(lines), '''\ 1: second 2: baz''' ) # Test unicode support file.write(WIKITEXT) diff = vcs.get_diff() diff = ''.join(diff) self.assertIsInstance(diff, unicode) vcs.commit(UTF8_COMMENT) versions = vcs.list_versions() self.assertIn(UTF8_COMMENT, versions[0][-1]) self.assertIsInstance(versions[0][-1], unicode) ### Test delete ### file.remove() file.dir.cleanup() diff = vcs.get_diff() vcs.commit('deleted file') zim-0.65/tests/__init__.py0000664000175000017500000003743712614726741015420 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg '''Zim test suite''' import os import sys import tempfile import shutil import logging import gettext import xml.etree.cElementTree as etree import types import glob try: import gtk except ImportError: gtk = None if sys.version_info < (2, 7, 0): try: import unittest2 as unittest from unittest2 import skip, skipIf, skipUnless except ImportError: print >>sys.stderr, '''\ For python versions < 2.7 the 'unittest2' module is needed to run the test suite. On Ubuntu or Debian install package 'python-unittest2'. ''' sys.exit(1) else: import unittest from unittest import skip, skipIf, skipUnless __unittest = 1 # needed to get stack trace OK for class TestCase gettext.install('zim', unicode=True, names=('_', 'gettext', 'ngettext')) FAST_TEST = False #: determines whether we skip slow tests or not # This list also determines the order in which tests will executed __all__ = [ 'package', 'translations', 'datetimetz', 'utils', 'errors', 'signals', 'actions', 'environ', 'fs', 'config', 'applications', 'parsing', 'formats', 'templates', 'objectmanager', 'stores', 'index', 'notebook', 'history', 'export', 'www', 'search', 'widgets', 'gui', 'pageview', 'clipboard', 'main', 'plugins', 'calendar', 'printtobrowser', 'versioncontrol', 'inlinecalculator', 'tasklist', 'tags', 'imagegenerators', 'tableofcontents', 'quicknote', 'attachmentbrowser', 'insertsymbol', 'sourceview', 'tableeditor', 'bookmarksbar', 'spell', 'ipc' ] mydir = os.path.dirname(__file__) # when a test is missing from the list that should be detected for file in glob.glob(os.path.dirname(__file__) + '/*.py'): name = os.path.basename(file)[:-3] if name != '__init__' and not name in __all__: raise AssertionError, 'Test missing in __all__: %s' % name # get our own data dir DATADIR = os.path.abspath(os.path.join(mydir, 'data')) # get our own tmpdir TMPDIR = os.path.abspath(os.path.join(mydir, 'tmp')) # Wanted to use tempfile.get_tempdir here to put everything in # e.g. /tmp/zim but since /tmp is often mounted as special file # system this conflicts with thrash support. For writing in source # dir we have conflict with bazaar controls, this is worked around # by a config mode switch in the bazaar backend of the version # control plugin if os.name == 'nt': TMPDIR = unicode(TMPDIR) else: TMPDIR = TMPDIR.encode(sys.getfilesystemencoding()) # also get the default tmpdir and put a copy in the env REAL_TMPDIR = tempfile.gettempdir() def load_tests(loader, tests, pattern): '''Load all test cases and return a unittest.TestSuite object. The parameters 'tests' and 'pattern' are ignored. ''' suite = unittest.TestSuite() for name in ['tests.'+name for name in __all__ ]: test = loader.loadTestsFromName(name) suite.addTest(test) return suite def _setUpEnvironment(): '''Method to be run once before test suite starts''' # In fact to be loaded before loading some of the zim modules # like zim.config and any that export constants from it system_data_dirs = os.environ.get('XDG_DATA_DIRS') os.environ.update({ 'ZIM_TEST_RUNNING': 'True', 'ZIM_TEST_ROOT': os.getcwd(), 'TMP': TMPDIR, 'REAL_TMP': REAL_TMPDIR, 'XDG_DATA_HOME': os.path.join(TMPDIR, 'data_home'), 'XDG_DATA_DIRS': os.path.join(TMPDIR, 'data_dir'), 'XDG_CONFIG_HOME': os.path.join(TMPDIR, 'config_home'), 'XDG_CONFIG_DIRS': os.path.join(TMPDIR, 'config_dir'), 'XDG_CACHE_HOME': os.path.join(TMPDIR, 'cache_home') }) if os.path.isdir(TMPDIR): shutil.rmtree(TMPDIR) os.makedirs(TMPDIR) hicolor = os.environ['XDG_DATA_DIRS'] + '/icons/hicolor' os.makedirs(hicolor) if system_data_dirs: # Need these since gtk pixbuf loaders are in /usr/share in # some setups, and this parameter is used to find them os.environ['XDG_DATA_DIRS'] = os.pathsep.join( (os.environ['XDG_DATA_DIRS'], system_data_dirs) ) if os.environ.get('ZIM_TEST_RUNNING') != 'True': # Do this when loaded, but not re-do in sub processes # (doing so will kill e.g. the ipc test...) _setUpEnvironment() _zim_pyfiles = [] def zim_pyfiles(): '''Returns a list with file paths for all the zim python files''' if not _zim_pyfiles: for d, dirs, files in os.walk('zim'): _zim_pyfiles.extend([d+'/'+f for f in files if f.endswith('.py')]) _zim_pyfiles.sort() for file in _zim_pyfiles: yield file # shallow copy def slowTest(obj): '''Decorator for slow tests Tests wrapped with this decorator are ignored when you run C{test.py --fast}. You can either wrap whole test classes:: @tests.slowTest class MyTest(tests.TestCase): ... or individual test functions:: class MyTest(tests.TestCase): @tests.slowTest def testFoo(self): ... def testBar(self): ... ''' if FAST_TEST: wrapper = skip('Slow test') return wrapper(obj) else: return obj class TestCase(unittest.TestCase): '''Base class for test cases''' maxDiff = None @classmethod def tearDownClass(cls): if gtk is not None: gtk_process_events() # flush any pending events / warnings def assertEqual(self, first, second, msg=None): ## HACK to work around "feature" in unittest - it does not consider ## string and unicode to be of the same type and thus does not ## show diffs if the textual content differs if type(first) in (str, unicode) \ and type(second) in (str, unicode): self.assertMultiLineEqual(first, second, msg) else: unittest.TestCase.assertEqual(self, first, second, msg) def create_tmp_dir(self, name=None): '''Returns a path to a tmp dir where tests can write data. The dir is removed and recreated empty every time this function is called with the same name from the same class. ''' self.clear_tmp_dir(name) path = self._get_tmp_name(name) os.makedirs(path) assert os.path.exists(path) # make real sure return path def get_tmp_name(self, name=None): '''Returns the same path as L{create_tmp_dir()} but without touching it. This method will raise an exception when a file or dir exists of the same name. ''' path = self._get_tmp_name(name) assert not os.path.exists(path), 'This path should not exist: %s' % path return path def clear_tmp_dir(self, name=None): '''Clears the tmp dir for this test''' path = self._get_tmp_name(name) if os.path.exists(path): shutil.rmtree(path) assert not os.path.exists(path) # make real sure def _get_tmp_name(self, name): if name: assert not os.path.sep in name, 'Don\'t use this method to get sub folders or files' name = self.__class__.__name__ + '_' + name else: name = self.__class__.__name__ if os.name == 'nt': name = unicode(name) else: name = name.encode(sys.getfilesystemencoding()) return os.path.join(TMPDIR, name) class LoggingFilter(object): '''Base class for logging filters that can be used as a context using the "with" keyword. To subclass it you only need to set the logger to be used and (the begin of) the message to filter. The message can be a string, or a list or tuple of strings. Any messages that start with this string or any of these strings are surpressed. Alternatively you can call L{wrap_test()} from test C{setUp}. This will start the filter and make sure it is cleaned up again. ''' logger = 'zim' message = None def __init__(self, logger=None, message=None): if logger: self.logger = logger if message: self.message = message self.loggerobj = logging.getLogger(self.logger) def __enter__(self): self.loggerobj.addFilter(self) def __exit__(self, *a): self.loggerobj.removeFilter(self) def filter(self, record): msg = record.getMessage() if self.message is None: return False elif isinstance(self.message, tuple): return not any(msg.startswith(m) for m in self.message) else: return not msg.startswith(self.message) def wrap_test(self, test): self.__enter__() test.addCleanup(self.__exit__) class DialogContext(object): '''Context manager to catch dialogs being opened Inteded to be used like this:: def myCustomTest(dialog): self.assertTrue(isinstance(dialog, CustomDialogClass)) # ... dialog.assert_response_ok() with DialogContext( myCustomTest, SomeOtherDialogClass ): gui.show_dialogs() In this example the first dialog that is run by C{gui.show_dialogs()} is checked by the function C{myCustomTest()} while the second dialog just needs to be of class C{SomeOtherDialogClass} and will then be closed with C{assert_response_ok()} by the context manager. This context only works for dialogs derived from zim's Dialog class as it uses a special hook in L{zim.gui.widgets}. ''' def __init__(self, *definitions): '''Constructor @param definitions: list of either classes or methods ''' self.stack = list(definitions) self.old_test_mode = None def __enter__(self): import zim.gui.widgets self.old_test_mode = zim.gui.widgets.TEST_MODE self.old_callback = zim.gui.widgets.TEST_MODE_RUN_CB zim.gui.widgets.TEST_MODE = True zim.gui.widgets.TEST_MODE_RUN_CB = self._callback def _callback(self, dialog): #~ print '>>>', dialog if not self.stack: raise AssertionError, 'Unexpected dialog run: %s' % dialog handler = self.stack.pop(0) if isinstance(handler, (type, types.ClassType)): # is a class if not isinstance(dialog, handler): raise AssertionError, 'Expected dialog of class %s, but got %s instead' % (handler, dialog.__class__) dialog.assert_response_ok() else: # assume a function handler(dialog) def __exit__(self, *error): #~ print 'ERROR', error import zim.gui.widgets zim.gui.widgets.TEST_MODE = self.old_test_mode zim.gui.widgets.TEST_MODE_RUN_CB = self.old_callback has_error = bool([e for e in error if e is not None]) if self.stack and not has_error: raise AssertionError, '%i expected dialog(s) not run' % len(self.stack) return False # Raise any errors again outside context class TestData(object): '''Wrapper for a set of test data in tests/data''' def __init__(self, format): assert format == 'wiki', 'TODO: add other formats' root = os.environ['ZIM_TEST_ROOT'] tree = etree.ElementTree(file=root+'/tests/data/notebook-wiki.xml') test_data = [] for node in tree.getiterator(tag='page'): name = node.attrib['name'] text = unicode(node.text.lstrip('\n')) test_data.append((name, text)) self._test_data = tuple(test_data) def __iter__(self): '''Yield the test data as 2 tuple (pagename, text)''' for name, text in self._test_data: yield name, text # shallow copy def get(self, pagename): '''Return text for a specific pagename''' for n, text in self._test_data: if n == pagename: return text assert False, 'Could not find data for page: %s' % pagename WikiTestData = TestData('wiki') #: singleton to be used by various tests def _expand_manifest(names): '''Build a set of all pages names and all namespaces that need to exist to host those page names. ''' manifest = set() for name in names: manifest.add(name) while name.rfind(':') > 0: i = name.rfind(':') name = name[:i] manifest.add(name) return manifest def new_parsetree(): '''Returns a new ParseTree object for testing Uses data from L{WikiTestData}, page C{roundtrip} ''' import zim.formats.wiki parser = zim.formats.wiki.Parser() text = WikiTestData.get('roundtrip') tree = parser.parse(text) return tree def new_parsetree_from_text(text, format='wiki'): import zim.formats parser = zim.formats.get_format(format).Parser() return parser.parse(text) def new_parsetree_from_xml(xml): # For some reason this does not work with cElementTree.XMLBuilder ... from xml.etree.ElementTree import XMLTreeBuilder from zim.formats import ParseTree builder = XMLTreeBuilder() builder.feed(xml) root = builder.close() return ParseTree(root) def new_page(): from zim.notebook import Path, Page page = Page(Path('roundtrip')) page.readonly = False page.set_parsetree(new_parsetree()) return page def new_page_from_text(text, format='wiki'): from zim.notebook import Path, Page page = Page(Path('Test')) page.readonly = False page.set_parsetree(new_parsetree_from_text(text, format)) return page def new_notebook(fakedir=None): '''Returns a new Notebook object with all data in memory Uses data from L{WikiTestData} @param fakedir: optional parameter to set the 'dir' attribute for the notebook and the main store which allows you to resolve file paths etc. It will not automatically touch the dir (hence it being 'fake'). ''' from zim.fs import Dir from zim.notebook import Notebook, Path from zim.index import Index notebook = Notebook(index=Index(dbfile=':memory:')) store = notebook.add_store(Path(':'), 'memory') manifest = [] for name, text in WikiTestData: manifest.append(name) store.set_node(Path(name), text) notebook.testdata_manifest = _expand_manifest(manifest) notebook.index.update() if fakedir: dir = Dir(fakedir) notebook.dir = dir store.dir = dir return notebook def new_files_notebook(dir): '''Returns a new Notebook object with a file store Uses data from L{WikiTestData} @param path: a folder path, e.g. created by L{TestCase.create_tmp_dir()} ''' from zim.fs import Dir from zim.notebook import init_notebook, Notebook, Path from zim.index import Index dir = Dir(dir) init_notebook(dir) notebook = Notebook(dir=dir) store = notebook.get_store(':') manifest = [] for name, text in WikiTestData: manifest.append(name) page = store.get_page(Path(name)) page.parse('wiki', text) store.store_page(page) notebook.testdata_manifest = _expand_manifest(manifest) notebook.index.update() return notebook class Counter(object): '''Object that is callable as a function and keeps count how often it was called. ''' def __init__(self, value=None): '''Constructor @param value: the value to return when called as a function ''' self.value = value self.count = 0 def __call__(self, *arg, **kwarg): self.count += 1 return self.value class MockObjectBase(object): '''Base class for mock objects. Mock methods can be installed with L{mock_method()}. All method calls to mock methods are logged, so they can be inspected. The attribute C{mock_calls} has a list of tuples with mock methods and arguments in order they have been called. ''' def __init__(self): self.mock_calls = [] def mock_method(self, name, return_value): '''Installs a mock method with a given name that returns a given value. ''' def my_mock_method(*arg, **kwarg): call = [name] + list(arg) if kwarg: call.append(kwarg) self.mock_calls.append(tuple(call)) return return_value setattr(self, name, my_mock_method) return my_mock_method class MockObject(MockObjectBase): '''Simple subclass of L{MockObjectBase} that automatically mocks a method which returns C{None} for any non-existing attribute. Attributes that are not methods need to be initialized explicitly. ''' def __getattr__(self, name): '''Automatically mock methods''' if name == '__zim_extension_objects__': raise AttributeError else: return self.mock_method(name, None) def gtk_process_events(*a): '''Method to simulate a few iterations of the gtk main loop''' assert gtk is not None while gtk.events_pending(): gtk.main_iteration(block=False) return True # continue def gtk_get_menu_item(menu, id): '''Get a menu item from a C{gtk.Menu} @param menu: a C{gtk.Menu} @param id: either the menu item label or the stock id @returns: a C{gtk.MenuItem} or C{None} ''' items = menu.get_children() ids = [i.get_property('label') for i in items] # gtk.ImageMenuItems that have a stock id happen to use the # 'label' property to store it... assert id in ids, \ 'Menu item "%s" not found, we got:\n' % id \ + ''.join('- %s \n' % i for i in ids) i = ids.index(id) return items[i] def gtk_activate_menu_item(menu, id): '''Trigger the 'click' action an a menu item @param menu: a C{gtk.Menu} @param id: either the menu item label or the stock id ''' item = gtk_get_menu_item(menu, id) item.activate() zim-0.65/tests/attachmentbrowser.py0000664000175000017500000001476012606211247017376 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012,2015 Jaap Karssenberg from __future__ import with_statement import tests import time from zim.fs import File, Dir from zim.plugins.attachmentbrowser.thumbnailer import * from zim.plugins.attachmentbrowser.filebrowser import FileBrowserIconView @tests.slowTest class TestThumbnailCreators(tests.TestCase): creators = [pixbufThumbnailCreator] def runTest(self): for creator in self.creators: thumbdir = Dir(self.create_tmp_dir(creator.__name__)) dir = Dir('./data/pixmaps') for i, basename in enumerate(dir.list()): file = dir.file(basename) thumbfile = thumbdir.file('thumb--' + basename) self.assertFalse(thumbfile.exists()) pixbuf = creator(file, thumbfile, THUMB_SIZE_NORMAL) self.assertIsInstance(pixbuf, gtk.gdk.Pixbuf) self.assertTrue(thumbfile.exists()) pixbuf = gtk.gdk.pixbuf_new_from_file(thumbfile.encodedpath) self.assertEqual(pixbuf.get_option('tEXt::Thumb::URI'), file.uri) self.assertTrue(pixbuf.get_option('tEXt::Thumb::URI').startswith('file:///')) # Specific requirement of spec to use file:/// and not file://localhost/ self.assertEqual(int(pixbuf.get_option('tEXt::Thumb::MTime')), int(file.mtime())) self.assertTrue(i > 3) thumbfile = thumbdir.file('thumb-test.txt') self.assertRaises( ThumbnailCreatorFailure, creator, File('./README.txt'), thumbfile, THUMB_SIZE_NORMAL ) @tests.slowTest class TestThumbnailManager(tests.TestCase): def testThumbnailFile(self): manager = ThumbnailManager() file = File(u'./foo-\u00e8\u00e1\u00f1.png') # non-existing path with unicode name self.assertTrue('%C3%A8%C3%A1%C3%B1' in file.uri) # utf encoded! basename = hashlib.md5(file.uri).hexdigest() + '.png' for file, size, wanted in ( (file, 28, LOCAL_THUMB_STORAGE_NORMAL.file(basename)), (file, 64, LOCAL_THUMB_STORAGE_NORMAL.file(basename)), (file, 128, LOCAL_THUMB_STORAGE_NORMAL.file(basename)), (file, 200, LOCAL_THUMB_STORAGE_LARGE.file(basename)), (file, 500, LOCAL_THUMB_STORAGE_LARGE.file(basename)), ): thumbfile = manager.get_thumbnail_file(file, size) self.assertEqual(thumbfile, wanted) self.assertTrue(len(thumbfile.basename) == 32+4) # lenght hexdigest according to spec + ".png" def removeThumbnail(self, manager, file): # Remove and assert thumbnail does not exist manager.remove_thumbnails(file) for size in (THUMB_SIZE_NORMAL, THUMB_SIZE_LARGE): thumbfile = manager.get_thumbnail_file(file, size) self.assertFalse(thumbfile.exists(), msg="File exists: %s" % thumbfile) def testCreateThumbnail(self): manager = ThumbnailManager() dir = Dir(self.create_tmp_dir()) file = dir.file('zim.png') File('./data/zim.png').copyto(file) self.assertTrue(file.exists()) self.assertTrue(file.isimage()) self.removeThumbnail(manager, file) # Thumbfile does not exist thumbfile, pixbuf = manager.get_thumbnail(file, 64, create=False) self.assertEqual((thumbfile, pixbuf), (None, None)) thumbfile, pixbuf = manager.get_thumbnail(file, 64) self.assertTrue(thumbfile.exists()) self.assertIsInstance(pixbuf, gtk.gdk.Pixbuf) thumbfile, pixbuf = manager.get_thumbnail(file, 64) self.assertTrue(thumbfile.exists()) self.assertIsInstance(pixbuf, gtk.gdk.Pixbuf) import stat mode = os.stat(thumbfile.encodedpath).st_mode self.assertEqual(stat.S_IMODE(mode), 0600) mode = os.stat(thumbfile.dir.dir.encodedpath).st_mode # thumnails dir self.assertEqual(stat.S_IMODE(mode), 0700) # Change mtime to make thumbfile invalid oldmtime = file.mtime() os.utime(file.encodedpath, None) self.assertNotEqual(file.mtime(), oldmtime) thumbfile, pixbuf = manager.get_thumbnail(file, 64, create=False) self.assertEqual((thumbfile, pixbuf), (None, None)) thumbfile, pixbuf = manager.get_thumbnail(file, 64) self.assertTrue(thumbfile.exists()) self.assertIsInstance(pixbuf, gtk.gdk.Pixbuf) # ensure next call to get_thumbnail cannot call create_thumbnail manager.create_thumbnail = None thumbfile, pixbuf = manager.get_thumbnail(file, 64) self.assertTrue(thumbfile.exists()) self.assertIsInstance(pixbuf, gtk.gdk.Pixbuf) # Test remove self.removeThumbnail(manager, file) @tests.slowTest class TestThumbnailQueue(tests.TestCase): def testQueue(self): queue = ThumbnailQueue() self.assertTrue(queue.queue_empty()) # Test input / output queue.queue_thumbnail_request(File('./README.txt'), 64) # put an error in the queue dir = Dir('./data/pixmaps') pixmaps = set() for basename in dir.list(): file = dir.file(basename) pixmaps.add(file) queue.queue_thumbnail_request(file, 64) self.assertFalse(queue.queue_empty()) with tests.LoggingFilter('zim.plugins.attachmentbrowser', 'Exception'): queue.start() seen = set() i = len(pixmaps) while i > 0: i -= 1 file, size, thumbfile, pixbuf, mtime = queue.get_ready_thumbnail(block=True) seen.add(file) self.assertEqual(size, 64) self.assertTrue(thumbfile.exists()) self.assertIsInstance(pixbuf, gtk.gdk.Pixbuf) self.assertEqual(mtime, file.mtime()) self.assertEqual(seen, pixmaps) # Test clear self.assertTrue(queue.queue_empty()) for file in pixmaps: queue.queue_thumbnail_request(file, 64) self.assertFalse(queue.queue_empty()) queue.start() time.sleep(0.1) queue.clear_queue() self.assertTrue(queue.queue_empty()) def testError(self): def creator_with_failure(*a): raise ThumbnailCreatorFailure def creator_with_error(*a): raise ValueError file = File('./data/zim.png') self.assertTrue(file.exists()) self.assertTrue(file.isimage()) for creator in creator_with_failure, creator_with_error: #~ print ">>", creator.__name__ queue = ThumbnailQueue(creator) queue.queue_thumbnail_request(file, 64) with tests.LoggingFilter('zim.plugins.attachmentbrowser', 'Exception'): queue.start() while not queue.queue_empty(): r = queue.get_ready_thumbnail() self.assertIsNone(r[0], None) @tests.slowTest class TestFileBrowserIconView(tests.TestCase): def runTest(self): opener = tests.MockObject() iconview = FileBrowserIconView(opener) dir = Dir('./data/pixmaps') iconview.set_folder(dir) # simulate idle events while not iconview._thumbnailer.queue_empty(): iconview._on_check_thumbnail_queue() # refresh while nothing changed iconview.refresh() while not iconview._thumbnailer.queue_empty(): iconview._on_check_thumbnail_queue() iconview.teardown_folder() ## Plugin & extention objects are loaded in generic "plugins" test ## zim-0.65/tests/ipc.py0000664000175000017500000000704512374655231014422 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg import tests import os import sys import signal import gobject import zim.ipc from zim.ipc import * import zim from zim.fs import File, get_tmpdir from zim.notebook import NotebookInfo, Path, Page from zim.stores.files import FileStorePage @tests.slowTest class TestIPC(tests.TestCase): def setUp(self): self.OLD_SERVER_ADDRESS = zim.ipc.SERVER_ADDRESS self.OLD_AUTHKEY_FILE = zim.ipc.AUTHKEY_FILE zim.ipc.SERVER_ADDRESS += '-test-%i' % os.getpid() zim.ipc.AUTHKEY_FILE = get_tmpdir().file('zim-server-authkey-test-%i' % os.getpid()) zim.ZIM_EXECUTABLE = './zim.py' def tearDown(self): stop_server_if_running() zim.ipc.SERVER_ADDRESS = self.OLD_SERVER_ADDRESS zim.ipc.AUTHKEY_FILE = self.OLD_AUTHKEY_FILE zim.ZIM_EXECUTABLE = None def runTest(self): # Test setting up the server start_server_if_not_running() server = ServerProxy() ack = server.ping() self.assertEqual(ack[0], 'ACK') start_server_if_not_running() # Should do nothing.. server = ServerProxy() self.assertEqual(server.ping(), ack) # ack has pid, so we know still same server process # Test adding a child and interact with it child = server.get_proxy(RemoteObject('tests.ipc.ChildClass', 'file:///foo')) ack = child.ping() self.assertEqual(ack[0], 'CHILD') child = server.get_proxy(RemoteObject('tests.ipc.ChildClass', 'file:///foo')) # should not vivicate again, verify by pid in ack self.assertEqual(child.ping(), ack) # Error handling self.assertRaises(ValueError, child.error) # Add a second child child2 = server.get_proxy(RemoteObject('tests.ipc.ChildClass', 'file:///bar')) # should not vivicate again, verify by pid in ack self.assertNotEqual(child2.ping(), ack) children = server.list_objects() children.sort(key=lambda c: c.id) self.assertEqual(children, [ RemoteObject('tests.ipc.ChildClass', 'file:///bar'), RemoteObject('tests.ipc.ChildClass', 'file:///foo') ]) # Test API for notebooks server._notebookklass = 'tests.ipc.ChildClass' # HACK to test convenience methods self.assertEqual(server.list_notebooks(), ['file:///bar', 'file:///foo']) proxy = server.get_notebook('file:///foo') self.assertEqual(child.ping(), ack) # Test these are serializable for obj in ( File('file:///test'), NotebookInfo('file:///test'), Path('foo'), Page(Path('foo')), FileStorePage(Path('foo'), File('file:///test'), File('file:///test'), format='wiki'), ): #~ print ">>> %r" % obj re = proxy.echo(obj) self.assertEqual(re, obj) # send a signal n = child.get_n_signals() server.emit('notebook-list-changed') self.assertEqual(child.get_n_signals(), n+1) # Wrap up server.quit() class ChildClass(object): # Mock client for the daemon to run. It doesn't do much except # telling you it's ID by touching a file. def __init__(self, id): self.id = id self.n_signals = 0 def main(self): zim.ipc.SERVER_CONTEXT._notebookklass = 'tests.ipc.ChildClass' # HACK to test convenience methods ServerProxy().connect('notebook-list-changed', self) gobject.MainLoop().run() def quit(self): gobject.MainLoop().quit() os._exit(0) # just to be sure def ping(self): return ('CHILD', os.getpid()) def echo(self, value): return value def error(self): raise ValueError, 'Test Error' def on_notebook_list_changed(self): notebooks = ServerProxy().list_notebooks() assert len(notebooks) > 0, 'list_notebooks() returned: %s' % notebooks self.n_signals += 1 def get_n_signals(self): return self.n_signals zim-0.65/tests/tasklist.py0000664000175000017500000001714412430476224015502 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jaap Karssenberg import tests import zim.plugins import zim.config import zim.formats from zim.plugins import PluginManager from zim.parsing import parse_date from zim.plugins.tasklist import * class TestTaskList(tests.TestCase): def testIndexing(self): '''Check indexing of tasklist plugin''' klass = PluginManager.get_plugin_class('tasklist') plugin = klass() notebook = tests.new_notebook() plugin.extend(notebook.index) index_ext = plugin.get_extension(IndexExtension) self.assertIsNotNone(index_ext) # Test indexing based on index signals notebook.index.flush() notebook.index.update() self.assertTrue(index_ext.db_initialized) tasks = list(index_ext.list_tasks()) self.assertTrue(len(tasks) > 5) for task in tasks: path = index_ext.get_path(task) self.assertTrue(not path is None) def testParsing(self): klass = PluginManager.get_plugin_class('tasklist') plugin = klass() notebook = tests.new_notebook() plugin.extend(notebook.index) index_ext = plugin.get_extension(IndexExtension) self.assertIsNotNone(index_ext) # Test correctnest of parsing NO_DATE = '9999' def extract_tasks(text): # Returns a nested list of tuples, where each node is # like "(TASK, [CHILD, ...]) where each task (and child) # is a tuple like (open, actionable, prio, due, description) parser = zim.formats.get_format('wiki').Parser() tree = parser.parse(text) origtree = tree.tostring() #~ print 'TREE', origtree tasks = index_ext._extract_tasks(tree) self.assertEqual(tree.tostring(), origtree) # extract should not modify the tree return tasks def t(label, open=True, due=NO_DATE, prio=0, tags='', actionable=True): # Generate a task tuple # (open, actionable, prio, due, tags, description) if tags: tags = set(unicode(tags).split(',')) else: tags = set() return [open, actionable, prio, due, tags, unicode(label)] # Note that this same text is in the test notebook # so it gets run through the index as well - keep in sync text = '''\ Try all kind of combos - see if the parser trips TODO: [ ] A [ ] B [ ] C [ ] D [ ] E FIXME: dus ~~FIXME:~~ foo [ ] Simple [ ] List [ ] List with [ ] Nested items [*] Some are done [*] Done but with open child [x] Others not [ ] FOOOOO [ ] Bar [ ] And then there are @tags [ ] Next: And due dates [ ] Date [d: 11/12] [ ] Date [d: 11/12/2012] [ ] TODO: BAR !!! TODO @home: [ ] Some more tasks !!! [ ] Foo ! * some sub item * some other item [ ] Bar TODO: dus FIXME: jaja - TODO !! @FIXME ~~TODO~~: Ignore this one - it is strike out * TODO: dus - list item * FIXME: jaja - TODO !! @FIXME - list item * ~~TODO~~: Ignore this one - it is strike out - list item * Bullet list * With tasks as sub items [ ] Sub item bullets * dus 1. Numbered list 2. With tasks as sub items [ ] Sub item numbered 3. dus Test task inheritance: [ ] Main @tag1 @tag2 ! [*] Sub1 [ ] Sub2 @tag3 !!!! [*] Sub2-1 [*] Sub2-2 @tag4 [ ] Sub2-3 [ ] Sub3 TODO: @someday [ ] A [ ] B [ ] B-1 [ ] C TODO @home [ ] main task [x] do this [ ] Next: do that [ ] Next: do something else ''' mydate = '%04i-%02i-%02i' % parse_date('11/12') wanted = [ (t('A'), []), (t('B'), []), (t('C'), []), (t('D'), []), (t('E'), []), (t('FIXME: dus'), []), (t('Simple'), []), (t('List'), []), (t('List with'), [ (t('Nested items'), []), (t('Some are done', open=False), []), (t('Done but with open child', open=True), [ (t('Others not', open=False), []), (t('FOOOOO'), []), ]), ]), (t('Bar'), []), (t('And then there are @tags', tags='tags'), []), (t('Next: And due dates', actionable=False), []), (t('Date [d: 11/12]', due=mydate), []), (t('Date [d: 11/12/2012]', due='2012-12-11'), [ (t('TODO: BAR !!!', prio=3, due='2012-12-11'), []), # due date is inherited ]), # this list inherits the @home tag - and inherits prio (t('Some more tasks !!!', prio=3, tags='home'), [ (t('Foo !', prio=1, tags='home'), []), (t('Bar', prio=3, tags='home'), []), ]), (t('TODO: dus'), []), (t('FIXME: jaja - TODO !! @FIXME', prio=2, tags='FIXME'), []), (t('TODO: dus - list item'), []), (t('FIXME: jaja - TODO !! @FIXME - list item', prio=2, tags='FIXME'), []), (t('Sub item bullets'), []), (t('Sub item numbered'), []), (t('Main @tag1 @tag2 !', prio=1, tags='tag1,tag2'), [ (t('Sub1', prio=1, open=False, tags='tag1,tag2'), []), (t('Sub2 @tag3 !!!!', prio=4, tags='tag1,tag2,tag3'), [ (t('Sub2-1', prio=4, open=False, tags='tag1,tag2,tag3'), []), (t('Sub2-2 @tag4', prio=4, open=False, tags='tag1,tag2,tag3,tag4'), []), (t('Sub2-3', prio=4, tags='tag1,tag2,tag3'), []), ]), (t('Sub3', prio=1, tags='tag1,tag2'), []), ]), (t('A', tags='someday', actionable=False), []), (t('B', tags='someday', actionable=False), [ (t('B-1', tags='someday', actionable=False), []), ]), (t('C', tags='someday', actionable=False), []), (t('main task', tags='home'), [ (t('do this', open=False, tags='home'), []), (t('Next: do that', tags='home'), []), (t('Next: do something else', tags='home', actionable=False), []), ]) ] plugin.preferences['nonactionable_tags'] = '@someday, @maybe' index_ext._set_preferences() tasks = extract_tasks(text) self.assertEqual(tasks, wanted) plugin.preferences['all_checkboxes'] = False wanted = [ (t('A'), []), (t('B'), []), (t('C'), []), (t('FIXME: dus'), []), (t('Next: And due dates', actionable=False), []), (t('TODO: BAR !!!', prio=3), []), # this list inherits the @home tag - and inherits prio (t('Some more tasks !!!', prio=3, tags='home'), [ (t('Foo !', prio=1, tags='home'), []), (t('Bar', prio=3, tags='home'), []), ]), (t('TODO: dus'), []), (t('FIXME: jaja - TODO !! @FIXME', prio=2, tags='FIXME'), []), (t('TODO: dus - list item'), []), (t('FIXME: jaja - TODO !! @FIXME - list item', prio=2, tags='FIXME'), []), (t('A', tags='someday', actionable=False), []), (t('B', tags='someday', actionable=False), [ (t('B-1', tags='someday', actionable=False), []), ]), (t('C', tags='someday', actionable=False), []), (t('main task', tags='home'), [ (t('do this', open=False, tags='home'), []), (t('Next: do that', tags='home'), []), (t('Next: do something else', tags='home', actionable=False), []), ]) ] tasks = extract_tasks(text) self.assertEqual(tasks, wanted) # TODO: more tags, due dates, tags for whole list, etc. ? #~ def testDialog(self): #~ '''Check tasklist plugin dialog''' # # TODO def testTaskListTreeView(self): klass = PluginManager.get_plugin_class('tasklist') plugin = klass() notebook = tests.new_notebook() plugin.extend(notebook.index) index_ext = plugin.get_extension(IndexExtension) self.assertIsNotNone(index_ext) notebook.index.flush() notebook.index.update() from zim.plugins.tasklist import TaskListTreeView opener = tests.MockObject() treeview = TaskListTreeView(index_ext, opener) menu = treeview.get_popup() # Check these do not cause errors - how to verify state ? tests.gtk_activate_menu_item(menu, _("Expand _All")) tests.gtk_activate_menu_item(menu, _("_Collapse All")) # Copy tasklist -> csv from zim.gui.clipboard import Clipboard tests.gtk_activate_menu_item(menu, 'gtk-copy') text = Clipboard.get_text() lines = text.splitlines() self.assertTrue(len(lines) > 10) self.assertTrue(len(lines[0].split(',')) > 3) self.assertFalse(any(' import tests import gtk from zim.actions import * class TestPrimaryKeyBinding(tests.TestCase): def runTest(self): for accel in ( # Ctrl-A or Command-A "a", "a", "A", "A", "a" ): #~ print ">>", accel, gtk_accelerator_preparse(accel) keyval, mod = gtk.accelerator_parse( gtk_accelerator_preparse(accel) ) self.assertEqual(keyval, 97) self.assertIn(mod, (gtk.gdk.CONTROL_MASK, gtk.gdk.META_MASK)) for accel in ( "A", "A", "A", '', None, ): self.assertEqual(gtk_accelerator_preparse(accel), accel) class TestAction(tests.TestCase): def runTest(self): output = [] class TestClass(object): @action('Do Action', accelerator='A') def test_action(self): return output.append('OK') self.assertIsInstance(TestClass.test_action, Action) obj = TestClass() obj.test_action() self.assertEqual(output, ['OK']) gtk_group = get_gtk_actiongroup(obj) gtk_action = gtk_group.get_action('test_action') self.assertIsInstance(gtk_action, gtk.Action) self.assertEqual(gtk_group.list_actions(), [gtk_action]) gtk_action.activate() self.assertEqual(output, ['OK', 'OK']) class TestToggleAction(tests.TestCase): def runTest(self): output = [] class TestClass(object): @toggle_action('Do Action', accelerator='A') def test_action(self, active): return output.append(active) self.assertIsInstance(TestClass.test_action, ToggleAction) obj = TestClass() obj.test_action() self.assertEqual(output, [True]) obj.test_action() self.assertEqual(output, [True, False]) obj.test_action(False) self.assertEqual(output, [True, False]) # no change obj.test_action(True) self.assertEqual(output, [True, False, True]) gtk_group = get_gtk_actiongroup(obj) gtk_action = gtk_group.get_action('test_action') self.assertIsInstance(gtk_action, gtk.ToggleAction) self.assertEqual(gtk_group.list_actions(), [gtk_action]) self.assertEqual(gtk_action.get_active(), True) # correct init state gtk_action.activate() self.assertEqual(output, [True, False, True, False]) zim-0.65/tests/tags.py0000664000175000017500000002675412421644606014612 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jaap Karssenberg import tests import gtk import pango from zim.index import Index, IndexPath, IndexTag from zim.notebook import Path from zim.gui.pageindex import FGCOLOR_COL, \ EMPTY_COL, NAME_COL, PATH_COL, STYLE_COL # Explicitly don't import * from pageindex, make clear what we re-use from zim.config import ConfigDict from zim.plugins.tags import * @tests.slowTest class TestTaggedPageTreeStore(tests.TestCase): def setUp(self): self.storeclass = TaggedPageTreeStore self.viewclass = TagsPageTreeView self.notebook = tests.new_notebook() self.index = self.notebook.index def runTest(self): '''Test TaggedPageTreeStore index interface''' # This is one big test instead of seperate sub tests because in the # subclass we generate a file based notebook in setUp, and we do not # want to do that many times. # Hooking up the treeview as well just to see if we get any errors # From the order the signals are generated. ui = MockUI() ui.notebook = self.notebook ui.page = Path('Test:foo') self.assertTrue(self.notebook.get_page(ui.page).exists()) treestore = self.storeclass(self.index) self.assertEqual(treestore.get_flags(), 0) self.assertEqual(treestore.get_n_columns(), 8) treeview = self.viewclass(ui, treestore) model = treeview.get_model() if isinstance(model, gtk.TreeModelFilter): model = model.get_model() # look inside filtered model self.assertEqual(model, treestore) self.assertEqual(treestore.get_flags(), 0) self.assertEqual(treestore.get_n_columns(), 8) self.index.update(callback=tests.gtk_process_events) tests.gtk_process_events() #~ treeview = PageTreeView(None) # just run hidden to check errors #~ treeview.set_model(treestore) n = treestore.on_iter_n_children(None) self.assertTrue(n > 0) n = treestore.iter_n_children(None) self.assertTrue(n > 0) for i in range(treestore.get_n_columns()): self.assertTrue(not treestore.get_column_type(i) is None) # Quick check for basic methods iter = treestore.on_get_iter((0,)) self.assertTrue(isinstance(iter, (PageTreeIter, PageTreeTagIter))) if self.storeclass is TaggedPageTreeStore: self.assertTrue(isinstance(iter, PageTreeIter)) self.assertTrue(isinstance(iter.indexpath, IndexPath)) self.assertFalse(iter.indexpath.isroot) else: self.assertTrue(isinstance(iter, PageTreeTagIter)) self.assertTrue(isinstance(iter.indextag, IndexTag)) basename = treestore.on_get_value(iter, 0) self.assertTrue(len(basename) > 0) self.assertEqual(iter.treepath, (0,)) self.assertEqual(treestore.on_get_path(iter), (0,)) if self.storeclass is TaggedPageTreeStore: self.assertEqual(treestore.get_treepath(iter.indexpath), (0,)) self.assertEqual(treestore.get_treepath(Path(iter.indexpath.name)), (0,)) else: self.assertEqual(treestore.get_treepath(iter.indextag), (0,)) iter2 = treestore.on_iter_children(None) if self.storeclass is TaggedPageTreeStore: self.assertEqual(iter2.indexpath, iter.indexpath) else: self.assertEqual(iter2.indextag, iter.indextag) self.assertTrue(treestore.on_get_iter((20,20,20,20,20)) is None) self.assertTrue(treestore.get_treepath(Path('nonexisting')) is None) self.assertRaises(ValueError, treestore.get_treepath, Path(':')) # Now walk through the whole tree testing the API nitems = 0 path = (0,) prevpath = None while path: #~ print 'PATH', path assert path != prevpath, 'Prevent infinite loop' nitems += 1 prevpath = path iter = treestore.get_iter(path) self.assertEqual(treestore.get_path(iter), tuple(path)) if isinstance(treestore.on_get_iter(path), PageTreeIter): self._check_indexpath_iter(treestore, iter, path) else: self._check_indextag_iter(treestore, iter, path) # Determine how to continue if treestore.iter_has_child(iter): path = path + (0,) else: path = path[:-1] + (path[-1]+1,) # increase last member while path: try: treestore.get_iter(path) except ValueError: path = path[:-1] if len(path): path = path[:-1] + (path[-1]+1,) # increase last member else: break self.assertTrue(nitems > 10) # double check sanity of loop # Check if all the signals go OK treestore.disconnect_index() del treestore self.index.flush() treestore = self.storeclass(self.index) treeview = TagsPageTreeView(ui, treestore) self.index.update(callback=tests.gtk_process_events) # Try some TreeView methods path = Path('Test:foo') self.assertTrue(treeview.set_current_page(path)) # TODO assert something treepath = treeview.get_model().get_treepath(path) self.assertTrue(not treepath is None) col = treeview.get_column(0) treeview.row_activated(treepath, col) #~ treeview.emit('popup-menu') treeview.emit('insert-link', path) treeview.emit('copy') # Check if all the signals go OK in delete for page in reversed(list(self.notebook.walk())): # delete bottom up self.notebook.delete_page(page) tests.gtk_process_events() def _check_indexpath_iter(self, treestore, iter, path): # checks specific for nodes that map to IndexPath object indexpath = treestore.get_indexpath(iter) self.assertTrue(path in treestore.get_treepaths(indexpath)) page = self.notebook.get_page(indexpath) self.assertIn(treestore.get_value(iter, NAME_COL), (page.basename, page.name)) self.assertEqual(treestore.get_value(iter, PATH_COL), page) if page.hascontent or page.haschildren: self.assertEqual(treestore.get_value(iter, EMPTY_COL), False) self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_NORMAL) self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.NORMAL_COLOR) else: self.assertEqual(treestore.get_value(iter, EMPTY_COL), True) self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_ITALIC) self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.EMPTY_COLOR) self._check_iter_children(treestore, iter, path, indexpath.haschildren) def _check_indextag_iter(self, treestore, iter, path): # checks specific for nodes that map to IndexTag object self.assertTrue(treestore.get_indexpath(iter) is None) indextag = treestore.get_indextag(iter) self.assertTrue(path in treestore.get_treepaths(indextag)) self.assertEqual(treestore.get_value(iter, NAME_COL), indextag.name) self.assertEqual(treestore.get_value(iter, PATH_COL), indextag) if indextag == treestore.untagged: self.assertEqual(treestore.get_value(iter, EMPTY_COL), True) self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_ITALIC) self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.EMPTY_COLOR) else: self.assertEqual(treestore.get_value(iter, EMPTY_COL), False) self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_NORMAL) self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.NORMAL_COLOR) if indextag == treestore.untagged: haschildren = self.index.n_list_untagged_root_pages() > 0 else: haschildren = self.index.n_list_tagged_pages(indextag) > 0 self._check_iter_children(treestore, iter, path, haschildren) def _check_iter_children(self, treestore, iter, path, haschildren): # Check API for children is consistent if haschildren: self.assertTrue(treestore.iter_has_child(iter)) child = treestore.iter_children(iter) self.assertTrue(not child is None) child = treestore.iter_nth_child(iter, 0) self.assertTrue(not child is None) parent = treestore.iter_parent(child) self.assertEqual(treestore.get_path(parent), path) childpath = treestore.get_path(child) self.assertEqual( childpath, tuple(path) + (0,)) n = treestore.iter_n_children(iter) for i in range(1, n): child = treestore.iter_next(child) childpath = treestore.get_path(child) self.assertEqual( childpath, tuple(path) + (i,)) child = treestore.iter_next(child) self.assertTrue(child is None) else: self.assertTrue(not treestore.iter_has_child(iter)) child = treestore.iter_children(iter) self.assertTrue(child is None) child = treestore.iter_nth_child(iter, 0) self.assertTrue(child is None) @tests.slowTest class TestTagsPageTreeStore(TestTaggedPageTreeStore): def setUp(self): TestTaggedPageTreeStore.setUp(self) self.storeclass = TagsPageTreeStore self.viewclass = TagsPageTreeView def runTest(self): '''Test TagsPageTreeStore index interface''' TestTaggedPageTreeStore.runTest(self) @tests.slowTest class TestTagPluginWidget(tests.TestCase): def runTest(self): ui = MockUI() ui.notebook = tests.new_notebook() uistate = ConfigDict() widget = TagsPluginWidget(ui.notebook.index, uistate, ui) # Excersize all model switches and check we still have a sane state widget.toggle_treeview() widget.toggle_treeview() path = Path('Test:foo') treepath = widget.treeview.get_model().get_treepath(path) self.assertTrue(not treepath is None) widget.disconnect_model() widget.reload_model() path = Path('Test:foo') treepath = widget.treeview.get_model().get_treepath(path) self.assertTrue(not treepath is None) # Check signals #~ widget.treeview.emit('popup-menu') widget.treeview.emit('insert-link', path) # Check tag filtering cloud = widget.tagcloud self.assertEqual(cloud.get_tag_filter(), None) tag = None for button in cloud.get_children(): if button.indextag.name == 'tags': tag = button.indextag button.clicked() break else: raise AssertionError, 'No button for @tags ?' selected, filtered = cloud.get_tag_filter() self.assertEqual(selected, [tag]) self.assertTrue(len(filtered) > 3) self.assertTrue(tag in filtered) self.assertTrue(not widget.treeview._tag_filter is None) # check filtering in treestore tagfilter = (selected, filtered) selected = frozenset(selected) filtered = frozenset(filtered) def toplevel(model): iter = model.get_iter_first() assert not iter is None while not iter is None: yield iter iter = model.iter_next(iter) def childiter(model, iter): iter = model.iter_children(iter) assert not iter is None while not iter is None: yield iter iter = model.iter_next(iter) self.assertEqual(uistate['treeview'], 'tagged') filteredmodel = widget.treeview.get_model() for iter in toplevel(filteredmodel): path = filteredmodel.get_indexpath(iter) self.assertTrue(not path is None) tags = list(ui.notebook.index.list_tags(path)) tags = frozenset(tags) self.assertTrue(selected.issubset(tags)) # Needs to contains selected tags self.assertTrue(tags.issubset(filtered)) # All other tags should be in the filter selection treepaths = filteredmodel.get_treepaths(path) self.assertTrue(filteredmodel.get_path(iter) in treepaths) widget.toggle_treeview() self.assertEqual(uistate['treeview'], 'tags') filteredmodel = widget.treeview.get_model() for iter in toplevel(filteredmodel): self.assertEqual(filteredmodel.get_indexpath(iter), None) # toplevel has tags, not pages tag = filteredmodel[iter][PATH_COL] self.assertTrue(tag in filtered) for iter in childiter(filteredmodel, iter): path = filteredmodel.get_indexpath(iter) self.assertTrue(not path is None) tags = list(ui.notebook.index.list_tags(path)) tags = frozenset(tags) self.assertTrue(selected.issubset(tags)) # Needs to contains selected tags self.assertTrue(tags.issubset(filtered)) # All other tags should be in the filter selection treepaths = filteredmodel.get_treepaths(path) self.assertTrue(filteredmodel.get_path(iter) in treepaths) class MockUI(tests.MockObject): page = None notebook = None zim-0.65/tests/fs.py0000664000175000017500000003544212374655231014261 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''Test cases for the zim.fs module.''' from __future__ import with_statement import tests import os import time import zim.fs from zim.fs import * from zim.errors import Error def modify_file_mtime(path, func): '''Helper function to modify a file in such a way that mtime changed. ''' mtime = os.stat(path).st_mtime m = mtime i = 0 while m == mtime: time.sleep(1) func(path) m = os.stat(path).st_mtime i += 1 assert i < 5 #~ print '>>>', m, mtime class FilterOverWriteWarning(tests.LoggingFilter): logger = 'zim.fs' message = 'mtime check failed' class FilterFileMissingWarning(tests.LoggingFilter): logger = 'zim.fs' message = 'File missing:' class TestFS(tests.TestCase): def testFunctions(self): smb_urls = ( ('smb://MyHost.local/share/My%20Documents', r'\\MyHost.local\share\My Documents'), ) for url, share in smb_urls: if os.name == 'nt': self.assertEqual(normalize_win32_share(share), share) self.assertEqual(normalize_win32_share(url), share) else: self.assertEqual(normalize_win32_share(share), url) self.assertEqual(normalize_win32_share(url), url) self.assertTrue(isabs('/foo/bar')) self.assertTrue(isabs('~/foo/bar')) self.assertFalse(isabs('./bar')) self.assertEqual(joinpath('foo', 'bar'), os.sep.join(('foo', 'bar'))) self.assertEqual(cleanup_filename('foo&bar:dus\\foo.txt'), 'foo&bardusfoo.txt') def testFilePath(self): '''Test Path object''' path = FilePath(['foo', 'bar']) test = os.path.abspath( os.path.join('foo', 'bar') ) self.assertEqual(path.path, test) path = FilePath('/foo/bar') uri = 'file:///' + os.path.abspath('/foo/bar').replace('\\', '/').strip('/') self.assertEqual(path.uri, uri) self.assertEqual(FilePath('file:///foo/bar'), FilePath('/foo/bar')) self.assertEqual(FilePath('file:/foo/bar'), FilePath('/foo/bar')) self.assertEqual(FilePath('file://localhost/foo/bar'), FilePath('/foo/bar')) self.assertEqual(FilePath('file:///C:/foo/bar'), FilePath('/C:/foo/bar')) if os.name == 'nt': self.assertEqual(FilePath('file:///C:/foo/bar'), FilePath(r'C:\foo\bar')) path = FilePath('/foo//bar/baz/') drive, p = os.path.splitdrive(path.path) self.assertEqual(path.split(), [drive + os.sep + 'foo', 'bar', 'baz']) dirs = [] for d in path: dirs.append(d) wanted = map(lambda p: Dir(os.path.abspath(drive+p)), ['/foo', '/foo/bar', '/foo/bar/baz']) self.assertEqual(dirs, wanted) for path1, path2, common in ( ('/foo/bar/baz/', '/foo/dus', '/foo'), ('/foo/bar', '/dus/ja', '/'), ): self.assertEqual(FilePath(path1).commonparent(FilePath(path2)), Dir(common)) if os.name == 'nt': path1 = 'C:\foo\bar' path2 = 'D:\foo\bar\baz' self.assertEqual(FilePath(path1).commonparent(FilePath(path2)), None) for path1, path2, relpath in ( ('/foo/bar/baz', '/foo', 'bar/baz'), ): self.assertEqual(FilePath(path1).relpath(FilePath(path2)), relpath) self.assertRaises(AssertionError, FilePath('/foo/bar').relpath, FilePath('/dus/ja')) for path1, path2, relpath in ( ('/foo/bar', '/dus/ja/', '../../foo/bar'), ('/source/dir/foo/bar/dus.pdf', '/source/dir/foo', 'bar/dus.pdf'), ('/source/dir/foo/dus.pdf', '/source/dir/foo', 'dus.pdf'), ('/source/dir/dus.pdf', '/source/dir/foo', '../dus.pdf'), ): self.assertEqual(FilePath(path1).relpath(FilePath(path2), allowupward=True), relpath) if os.name == 'nt': path1 = 'C:\foo\bar' path2 = 'D:\foo\bar\baz' self.assertEqual(FilePath(path1).relpath(FilePath(path2), allowupward=True), None) self.assertEqual(FilePath('/foo') + 'bar', FilePath('/foo/bar')) path = FilePath('~/foo') self.assertNotEqual(path.path, '~/foo') self.assertEqual(path.user_path, '~/foo') self.assertEqual(path.serialize_zim_config(), '~/foo') path = FilePath('/foo') self.assertIsNotNone(path.path) self.assertIsNone(path.user_path) self.assertIsNotNone(path.serialize_zim_config()) # Test unicode compat string = u'\u0421\u0430\u0439\u0442\u043e\u0432\u044b\u0439' path = FilePath(string) self.assertTrue(path.path.endswith(string)) #~ self.assertRaises(Error, Path, string.encode('utf-8')) path = FilePath((string, 'foo')) self.assertTrue(path.path.endswith(os.sep.join((string, 'foo')))) #~ self.assertRaises(Error, Path, (string.encode('utf-8'), 'foo')) def testFileHandle(self): '''Test FileHandle object''' self.on_close_called = False tmpdir = self.create_tmp_dir('testFileHandle') fh = FileHandle( tmpdir+'/foo.txt', mode='w', on_close=self.on_close) fh.write('duss') fh.close() self.assertTrue(self.on_close_called) def on_close(self): self.on_close_called = True def testFile(self): '''Test File object''' tmpdir = self.create_tmp_dir('testFile') file = File(tmpdir+'/foo/bar/baz.txt') assert not file.exists() file.touch() self.assertTrue(os.path.isfile(tmpdir+'/foo/bar/baz.txt')) File(tmpdir+'/anotherfile.txt').touch() file.cleanup() self.assertTrue(os.path.isfile(tmpdir+'/anotherfile.txt')) self.assertTrue(os.path.isdir(tmpdir)) self.assertFalse(os.path.isfile(tmpdir+'/foo/bar/baz.txt')) self.assertFalse(os.path.isdir(tmpdir+'/foo')) file = File(tmpdir+'/bar.txt') file.writelines(['c\n', 'd\n']) self.assertEqual(file.readlines(), ['c\n', 'd\n']) # with error try: fh = file.open('w') fh.write('foo') raise IOError except IOError: del fh self.assertEqual(file.readlines(), ['c\n', 'd\n']) self.assertTrue(os.path.isfile(file.encodedpath+'.zim-new~')) # test recovery on windows if os.name == 'nt': new = file.encodedpath+'.zim-new~' orig = file.encodedpath+'.zim-orig~' bak = file.encodedpath+'.bak~' os.remove(file.encodedpath) # don't clean up folder open(new, 'w').write('NEW\n') open(orig, 'w').write('ORIG\n') self.assertTrue(file.exists()) self.assertEqual(file.read(), 'NEW\n') self.assertFalse(os.path.isfile(new)) self.assertFalse(os.path.isfile(orig)) self.assertTrue(os.path.isfile(file.encodedpath)) self.assertTrue(os.path.isfile(bak)) bak1 = file.encodedpath+'.bak1~' os.remove(file.encodedpath) # don't clean up folder open(orig, 'w').write('ORIG 1\n') self.assertFalse(file.exists()) self.assertRaises(FileNotFoundError, file.read) self.assertFalse(os.path.isfile(orig)) self.assertTrue(os.path.isfile(bak)) self.assertTrue(os.path.isfile(bak1)) # test read-only path = tmpdir+'/read-only-file.txt' open(path, 'w').write('test 123') os.chmod(path, 0444) file = File(path) self.assertRaises(FileWriteError, file.write, 'Overwritten!') os.chmod(path, 0644) # make it removable again # with windows line-ends file = open(tmpdir+'/newlines.txt', 'wb') # binary mode means no automatic newline conversions file.write('Some lines\r\nWith win32 newlines\r\n') file = File(tmpdir+'/newlines.txt') self.assertEqual(file.read(), 'Some lines\nWith win32 newlines\n') # test encoding error non_utf8_file = File('tests/data/non-utf8.txt') self.assertRaises(FileUnicodeError, non_utf8_file.read) # test byte order mark file = File('tests/data/byteordermark.txt') self.assertEqual(file.raw(), '\xef\xbb\xbffoobar\n') self.assertEqual(file.read(), 'foobar\n') self.assertEqual(file.readlines(), ['foobar\n']) # test compare & copyto file1 = File(tmpdir + '/foo.txt') file2 = File(tmpdir + '/bar.txt') file1.write('foo\nbar\n') file2.write('foo\nbar\n') self.assertTrue(file1.compare(file2)) file2.write('foo\nbar\nbaz\n') self.assertFalse(file1.compare(file2)) file2.copyto(file1) self.assertTrue(file1.compare(file2)) # rename is being used when testing Dir # test mimetype file = File('test.txt') self.assertFalse(file.isimage()) file = File('test.jpg') self.assertTrue(file.isimage()) file = File(tmpdir+'/foo/') self.assertFalse(file.isdir()) dir = Dir(tmpdir+'/foo/') dir.touch() self.assertTrue(file.isdir()) def testTmpFile(self): '''Test TmpFile object''' dir = get_tmpdir() file = TmpFile('foo.txt') self.assertTrue(file.ischild(dir)) # What else to test here ? def testDir(self): '''Test Dir object''' tmpdir = self.create_tmp_dir('testDir') dir = Dir(tmpdir+'/foo/bar') assert not dir.exists() file1 = dir.file('unique.txt') file1.touch() file2 = dir.new_file('unique.txt') file2.touch() file3 = dir.new_file('unique.txt') self.assertEqual(file1.basename, 'unique.txt') self.assertEqual(file2.basename, 'unique001.txt') self.assertEqual(file3.basename, 'unique002.txt') self.assertEqual(dir.list(), ['unique.txt', 'unique001.txt']) # we did not touch unique002.txt, so don't want to see it show up here file1.rename(dir.file('foo.txt')) self.assertEqual(file1.basename, 'unique.txt') # don't update the object ! self.assertEqual(dir.list(), ['foo.txt', 'unique001.txt']) file1 = dir.file('foo.txt') file1.rename(dir.subdir('foo').file('bar.txt')) self.assertEqual(dir.list(), ['foo', 'unique001.txt']) self.assertEqual(dir.subdir('foo').list(), ['bar.txt']) fdir = FilteredDir(dir) fdir.ignore('*.txt') self.assertEqual(fdir.list(), ['foo']) self.assertEqual(File((dir, 'foo.txt')), dir.file('foo.txt')) self.assertEqual(dir.file(File((dir, 'foo.txt'))), dir.file('foo.txt')) self.assertEqual(dir.file(FilePath((dir, 'foo.txt'))), dir.file('foo.txt')) self.assertEqual(dir.file(('foo.txt',)), dir.file('foo.txt')) self.assertRaises(PathLookupError, dir.file, File('/foo/bar.txt')) # not below dir self.assertEqual(dir.resolve_file('../foo.txt'), dir.dir.file('foo.txt')) self.assertEqual(dir.resolve_file(File('/foo/bar.txt')), File('/foo/bar.txt')) self.assertEqual(Dir((dir, 'bar')), dir.subdir('bar')) self.assertEqual(dir.subdir(Dir((dir, 'bar'))), dir.subdir('bar')) self.assertEqual(dir.subdir(FilePath((dir, 'bar'))), dir.subdir('bar')) self.assertEqual(dir.subdir(('bar',)), dir.subdir('bar')) self.assertRaises(PathLookupError, dir.subdir, Dir('/foo/bar')) # not below dir self.assertEqual(dir.resolve_dir('../bar'), dir.dir.subdir('bar')) self.assertEqual(dir.resolve_dir(Dir('/foo/bar')), Dir('/foo/bar')) self.assertRaises(OSError, dir.remove) # dir not empty self.assertTrue(dir.exists()) dir.cleanup() self.assertTrue(dir.exists()) dir.remove_children() self.assertEqual(dir.list(), []) self.assertTrue(dir.exists()) dir.remove() self.assertFalse(dir.exists()) self.assertEqual(dir.list(), []) # list non-existing dir # TODO skip if no gio available # TODO slow test #~ def testMonitor(self): #~ tmpdir = Dir(self.create_tmp_dir('testMonitor')) #~ # Monitor file #~ events = [] #~ def monitor(*args): #~ events.append(args) #~ file = tmpdir.file('foo') #~ file.connect('changed', monitor) #~ file.touch() #~ file.write('Foo') #~ # timeout ? #~ print '>>', events #~ # Monitor dir #~ tmpdir.connect('changed', monitor) #~ tmpdir.file('bar').touch() #~ # timeout ? #~ print '>>', events @tests.slowTest class TestFileOverwrite(tests.TestCase): def setUp(self): self.path = self.create_tmp_dir()+'/file.txt' def modify(self, func): modify_file_mtime(self.path, func) def runTest(self): '''Test file overwrite check''' # Check we can write without reading file = File(self.path, checkoverwrite=True) file.write('bar') self.assertEquals(file.read(), 'bar') # Check edge case where file goes missing after read or write os.remove(file.encodedpath) self.assertFalse(file.exists()) self.assertTrue(file.check_has_changed_on_disk()) with FilterFileMissingWarning(): file.write('bar') self.assertEquals(file.read(), 'bar') self.assertFalse(file.check_has_changed_on_disk()) # Check overwrite error when content changed self.modify(lambda p: open(p, 'w').write('XXX')) # modify mtime and content with FilterOverWriteWarning(): self.assertRaises(FileWriteError, file.write, 'foo') self.assertTrue(file.check_has_changed_on_disk()) self.assertEquals(file.read(), 'XXX') # Check md5 check passes file = File(self.path, checkoverwrite=True) file.write('bar') self.modify(lambda p: open(p, 'w').write('bar')) # modify mtime but keep content the same with FilterOverWriteWarning(): file.write('foo') self.assertEquals(file.read(), 'foo') @tests.slowTest @tests.skipUnless(hasattr(os, 'symlink'), 'OS does not supprot symlinks') class TestSymlinks(tests.TestCase): def runTest(self): '''Test file operations are safe for symlinks''' # Set up a file structue with a symlink tmpdir = self.create_tmp_dir() targetdir = Dir(tmpdir + '/target') targetdir.file('foo.txt').touch() targetfile = File(tmpdir + '/target.txt') targetfile.write('foo\n') dir = Dir(tmpdir + '/data') file = dir.file('bar.txt') file.touch() os.symlink(targetdir.encodedpath, dir.encodedpath + '/link') os.symlink(targetfile.encodedpath, dir.encodedpath + '/link.txt') # Test transparent access to the linked data linkedfile = dir.file('link.txt') self.assertTrue(linkedfile.read(), 'foo\n') self.assertEqual(dir.list(), ['bar.txt', 'link', 'link.txt']) linkeddir = dir.subdir('link') self.assertEqual(linkeddir.list(), ['foo.txt']) # Test modifying a linked file linkedfile.write('bar\n') self.assertTrue(linkedfile.read(), 'bar\n') self.assertTrue(targetfile.read(), 'bar\n') linkedfile.rename(dir.file('renamed_link.txt')) self.assertEqual(dir.list(), ['bar.txt', 'link', 'renamed_link.txt']) linkedfile = dir.file('renamed_link.txt') linkedfile.write('foobar\n') self.assertTrue(linkedfile.read(), 'foobar\n') self.assertTrue(targetfile.read(), 'foobar\n') # Test removing the links (but not the data) linkedfile.remove() self.assertFalse(linkedfile.exists()) self.assertTrue(targetfile.exists()) self.assertTrue(targetfile.read(), 'foobar\n') dir.remove_children() self.assertEqual(dir.list(), []) self.assertTrue(targetdir.exists()) self.assertEqual(targetdir.list(), ['foo.txt']) @tests.slowTest @tests.skipUnless(zim.fs.gio, 'Trashing not supported, \'gio\' is missing') class TestTrash(tests.TestCase): def runTest(self): '''Test trashing files and folders''' root = Dir(self.create_tmp_dir()) file = root.file('test.txt') file.touch() self.assertTrue(file.exists()) self.assertTrue(file.trash()) self.assertFalse(file.exists()) dir = root.subdir('test') dir.touch() self.assertTrue(dir.exists()) self.assertTrue(dir.trash()) self.assertFalse(dir.exists()) # fails silent if file does not exist self.assertFalse(file.trash()) self.assertFalse(dir.trash()) # How can we cause gio to give an error and test that case ?? from utils import FunctionThread @tests.slowTest class TestIOFunctionThread(tests.TestCase): def runTest(self): dir = Dir(self.create_tmp_dir()) file = dir.file('test.txt') func = FunctionThread(file.write, ('fooo\n',)) func.start() func.join() self.assertTrue(func.done) self.assertFalse(func.error) self.assertEqual(file.read(), 'fooo\n') zim-0.65/tests/main.py0000664000175000017500000000521712374655231014572 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012,2013 Jaap Karssenberg '''Test cases for the base zim module.''' from __future__ import with_statement import tests from tests.config import EnvironmentConfigContext import sys import cStringIO as StringIO #~ import threading #~ import time from zim.fs import Dir, File, FS from zim.environ import environ from zim.main import * import zim import zim.main class TestGetApplication(tests.TestCase): def setUp(self): self.old_exe = zim.ZIM_EXECUTABLE def tearDown(self): zim.ZIM_EXECUTABLE = self.old_exe def runTest(self): zim.ZIM_EXECUTABLE = '/foo/bar/zim.py' app = zim.main.get_zim_application('--help') self.assertEqual(app.cmd[:4], ('/foo/bar/zim.py', '--help', '--standalone')) # limit to cmd[:4] because running test with "-D" or "-V" can add more class capture_stdout: def __enter__(self): self.real_stdout = sys.stdout sys.stdout = StringIO.StringIO() return sys.stdout def __exit__(self, type, value, traceback): sys.stdout = self.real_stdout class TestParseCommand(tests.TestCase): def runTest(self): for command, klass in zim.main.commands.items(): obj = zim.main.build_command(['--%s' % command]) self.assertIsInstance(obj, klass) obj = zim.main.build_command(['-v']) self.assertIsInstance(obj, VersionCommand) obj = zim.main.build_command(['-h']) self.assertIsInstance(obj, HelpCommand) obj = zim.main.build_command(['foo']) self.assertIsInstance(obj, GuiCommand) # TODO test plugins class TestVersion(tests.TestCase): def runTest(self): cmd = VersionCommand('version') with capture_stdout() as output: cmd.run() self.assertTrue(output.getvalue().startswith('zim')) class TestHelp(tests.TestCase): def runTest(self): cmd = HelpCommand('help') with capture_stdout() as output: cmd.run() self.assertTrue(output.getvalue().startswith('usage:')) #~ class TestGui(tests.TestCase): #~ #~ def runTest(self): #~ cmd = GuiCommand() #~ with DialogContext(): #~ cmd.run() # Check default notebook # Check dialog list prompt # Check mainwindow pops up #~ @tests.slowTest #~ class TestServer(tests.TestCase): #~ #~ def testServerGui(self): #~ cmd = ServerCommand('server') #~ cmd.parse_options('--gui') #~ with DialogContext(): #~ cmd.run() #~ #~ def testServer(self): #~ cmd = ServerCommand('server', 'testnotebook') #~ t = threading.Thread(target=cmd.run) #~ t.start() #~ time.sleep(3) # give time to startup #~ re = urlopen('http://localhost:8080') #~ self.assertEqual(re.getcode(), 200) #~ cmd.server.shutdown() #~ t.join() ## ExportCommand() is tested in tests/export.py zim-0.65/tests/package.py0000664000175000017500000002422412610734263015234 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jaap Karssenberg # This module contains a number of meta test to check coding style # and packaging import tests import os import copy import re import subprocess import inspect def zim_modules(): '''Get the all module in the zim source''' for file in tests.zim_pyfiles(): name = file[:-3].replace('/', '.') if os.name == 'nt': name = name.replace('\\', '.') if name.endswith('.__init__'): name = name[:-9] mod = __import__(name) for part in name.split('.')[1:]: mod = getattr(mod, part) yield name, mod @tests.skipUnless(os.path.isdir('./.bzr'), 'Not a bazaar source folder') class TestBzr(tests.TestCase): def runTest(self): unknown = subprocess.check_output(['bzr', 'ls', '-u']) if unknown: raise AssertionError, 'File unknown to bzr - need to be added or ignored:\n' + unknown else: pass class TestCompileAll(tests.TestCase): def runTest(self): '''Test if all modules compile''' for name, module in zim_modules(): #~ print '>>', name self.assertIsNotNone(module) class TestMetaData(tests.TestCase): def runTest(self): import zim revision = zim.get_zim_revision() # This call could fail if bazaar revision format changed self.assertTrue(isinstance(revision, basestring)) # Check desktop file try: subprocess.check_call(['desktop-file-validate', 'xdg/zim.desktop']) except OSError: print "Could not run desktop-file-validate" @tests.slowTest class TestNotebookUpgrade(tests.TestCase): def runTest(self): '''Test if included notebooks are up to date''' from zim.fs import Dir from zim.notebook import Notebook for path in ('data/manual', 'HACKING'): notebook = Notebook(dir=Dir(path)) self.assertTrue(not notebook.needs_upgrade) class TestCoding(tests.TestCase): '''This test case enforces some coding style items''' def __init__(self, *a): self._code_files = [] tests.TestCase.__init__(self, *a) def list_code(self): '''Return all python files as text''' if not self._code_files: self._read_code() assert len(self._code_files) > 10 return copy.deepcopy(self._code_files) def _read_code(self): self._code_files = [] for root in ('zim', 'tests'): for dir, dirs, files in os.walk(root): for basename in files: if basename.endswith('.py'): file = dir.replace('\\', '/') + '/' + basename if file == 'tests/package.py': # skip ourselve continue #~ print 'READING', file fh = open(file) self._code_files.append((file, fh.read())) fh.close() def testWrongDependencies(self): '''Check clean dependencies''' #~ for klass in ('gobject', 'gtk', 'gio'): # TODO get rid of gobject as well allow_gtk = ('zim/gui/', 'zim/inc/', 'zim/plugins/', 'tests/') for klass in ('gtk', 'gio'): import_re = re.compile(r'^(import|from)\s+%s' % klass, re.M) # only match global imports - allow import in limitted scope for file, code in self.list_code(): if os.name == 'nt': file = file.replace('\\', '/') if any(map(file.startswith, allow_gtk)): continue # skip match = import_re.search(code) #~ if match: print '>>>', match.group(0) self.assertFalse(match, '%s imports %s, this is not allowed' % (file, klass)) def testWrongMethod(self): '''Check for a couple of constructs to be avoided''' for file, code in self.list_code(): self.assertFalse('gtk.Entry(' in code, '%s uses gtk.Entry - use zim.gui.widgets.InputEntry instead' % file) self.assertFalse('get_visible(' in code, '%s uses get_visible() - use get_property() instead' % file) self.assertFalse('set_visible(' in code, '%s uses set_visible() - use set_property() instead' % file) self.assertFalse('get_sensitive(' in code, '%s uses get_sensitive() - requires Gtk >= 2.18 - use set_property() instead' % file) #~ self.assertFalse('connect_object(' in code, '%s uses connect_object() - use connect() instead to prevent reference leaking' % file) self.assertFalse('gtk.HPaned(' in code, '%s uses gtk.HPaned - use zim.gui.widgets.HPaned instead' % file) self.assertFalse('gtk.VPaned(' in code, '%s uses gtk.VPaned - use zim.gui.widgets.VPaned instead' % file) if not file.endswith('pageview.py'): self.assertFalse('string.letters' in code, '%s uses string.letters - this can case locale dependent issues' % file) self.assertFalse('srting.lowercase' in code, '%s uses string.lowercase - this can case locale dependent issues' % file) self.assertFalse('srting.uppercase' in code, '%s uses string.uppercase - this can case locale dependent issues' % file) if not file.endswith('widgets.py'): self.assertFalse('gtk.ScrolledWindow(' in code, '%s uses gtk.ScrolledWindow - use zim.gui.widgets.ScrolledWindow instead' % file) if not file.endswith('clipboard.py'): self.assertFalse('gtk.Clipboard(' in code, '%s uses gtk.Clipboard - use zim.gui.clipboard.Clipboard instead' % file) if not file.endswith('config.py'): self.assertFalse('os.environ\[' in code, '%s uses os.environ - use zim.config.get_environ() instead' % file) def testImportFuture(self): '''Check python 2.5 compatibility''' for file, code in self.list_code(): import_seen = False suspect = False for line in code.splitlines(): line = line.strip() if line.startswith('from __future__ ') \ and 'with_statement' in line.split(): import_seen = True elif line.startswith('with') and line.endswith(':'): suspect = True #~ if suspect: print file, 'uses "with" statement' if suspect and not import_seen: # Need real parsing to avoid false positives import tokenize import StringIO for token in tokenize.generate_tokens(StringIO.StringIO(code).readline): if token[0] == tokenize.NAME and token[1] == 'with': lineno = token[2][0] line = token[-1] self.assertTrue(import_seen, '%s missing with_statement import from __future__ ("with" seen on line %i):\n%s' % (file, lineno, line)) def testIndenting(self): # FIXME need real parser to be more robust for comments, multi-line strings etc. # for now we just check lines after a line ending with ":" # assume python itself warns us for changes in the middle of a block white = re.compile(r'^(\s*)') for file, code in self.list_code(): if file.startswith('zim/inc/'): continue lineno = 0 start_block = False for line in code.splitlines(): lineno += 1 text = line.strip() def_line = text.startswith('def ') or text.startswith('class ') if start_block or def_line: m = white.match(line) indent = str(m.groups(1)) self.assertFalse(' ' in indent, 'Indenting should use tabs - file: %s line %s' % (file, lineno)) start_block = def_line and line.rstrip().endswith(':') class TestDocumentation(tests.TestCase): def runTest(self): for modname, mod in zim_modules(): self.assertDocumentationOK(mod, modname) for name, obj in self.walk_code(mod, modname): if not '.inc.' in name: self.assertDocumentationOK(obj, name) def walk_code(self, obj, objname): # Yield classes, methods, and functions top down for name, member in inspect.getmembers(obj): if name == '__class__': continue name = objname + '.' + name if inspect.isclass(member): if member.__module__ != objname: continue # skip imported class yield name, member for child in self.walk_code(member, name): # recurs yield child elif inspect.isfunction(member) \ or inspect.ismethod(member): yield name, member def assertDocumentationOK(self, obj, name): #~ print 'CHECK docs for', name doc = inspect.getdoc(obj) if not doc: return # For now do not bitch about missing docs.. # Check fields fields = self.parseFields(doc, name) if not fields: return # Check call signature for functions if inspect.isfunction(obj) \ or inspect.ismethod(obj): # For now we do not complain about missing docs, just mismatches documented = set( fields.get('param', {}).keys() + fields.get('keyword', {}).keys() ) if documented: (args, varargs, keywords, defaults) = inspect.getargspec(obj) defined = set(args) if args and args[0] in ('self', 'klass'): defined.discard(args[0]) if varargs: defined.add(varargs) if keywords: defined.add(keywords) self.assertEqual(documented, defined, msg='Mismatch in documented parameters for %s\n' 'Declared: %s\nDocumented: %s' % (name, tuple(defined), tuple(documented)) ) # TODO can we also check whether doc should define @returns ?? # Check signature for @signal if 'signal' in fields: for spec in fields['signal']: # e.g. "C{open-page (L{Page}, L{Path})}: Emitted when opening" if not re.match('^C\{[\w-]+ \(.*?\)\}:', spec): self.fail('Signal description in %s does not follow templates\n' 'Is: %s\nShould be like "C{signal-name (arg1, arg2)}: description"' % (name, spec) ) known_fields = { # keys are known fields, if values is True, a param is # required for the first ":" 'param': True, 'type': True, 'keyword': True, 'returns': False, 'rtype': False, 'raises': True, 'cvar': True, 'ivar': True, 'todo': False, 'note': False, 'newfield': True, } collect_fields = ('signal',) def parseFields(self, doc, name): # Parse files same as epydoc - and check them on the fly fields = {} for line in doc.splitlines(): m = re.match('@(\w+)\s*(.*?):', line) if m: line = line[m.end():].strip() field, arg = m.group(1), m.group(2) if field in self.known_fields: if self.known_fields[field]: if not arg: self.fail('Doc for %s is missing argument for @%s' % (name, field)) else: if not field in fields: fields[field] = {} fields[field][arg] = line # special case - learn new fields if field == 'newfield': self.known_fields[arg] = False elif field in self.collect_fields: if not field in fields: fields[field] = [] fields[field].append(line) else: fields[field] = line else: self.fail('Doc for %s has unknown field @%s' % (name, field)) elif re.match('@(\w+)', line): self.fail('Syntax error in docs for %s\nMissing \':\' in "%s"' % (name, line)) else: pass return fields zim-0.65/tests/environ.py0000664000175000017500000000436212374655231015326 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2013 Jaap Karssenberg from __future__ import with_statement import tests import os from zim.environ import environ from zim.fs import File, Dir class EnvironmentContext(object): '''Context manager to be able to run test cases for environment parameters and restore the previous values on exit or error. Usage as:: with EnvironmentContext({ 'HOME': '/test/foo', 'XDG_HOME': None, }): ... ''' # Use os.environ here for to avoid any errors with # our environ object - may bite when testing with non-ascii data. # But overloaded in EnvironmentConfigContext() environ = os.environ def __init__(self, environ_context): self.environ_context = environ_context self.environ_backup = {} def __enter__(self): for k, v in self.environ_context.items(): self.environ_backup[k] = self.environ.get(k) if v: self.environ[k] = v elif k in self.environ: del self.environ[k] else: pass def __exit__(self, *exc_info): for k, v in self.environ_backup.items(): if v: self.environ[k] = v elif k in self.environ: del self.environ[k] else: pass return False # Raise class TestEnviron(tests.TestCase): def testGetSet(self): k = 'TEST_ZIM_ENVIRON_MODULE' with EnvironmentContext({k: None}): self.assertNotIn(k, environ) self.assertRaises(KeyError, environ.__getitem__, k) self.assertIsNone(environ.get(k)) self.assertEqual(environ.get(k, 'FOO'), 'FOO') environ[k] = 'BAR' self.assertEqual(environ.get(k, 'FOO'), 'BAR') self.assertEqual(environ[k], 'BAR') self.assertGreater(len(environ), 0) self.assertIn(k, environ) del environ[k] self.assertNotIn(k, environ) def testGetListPath(self): path = environ.get_list('PATH') self.assertGreater(len(path), 0) for dir in map(Dir, path): if dir.exists(): break else: raise AssertionError, 'No existing dirs found in PATH: %s' % path def testHomeAndUser(self): user = environ.get('USER') self.assertIsNotNone(user) home = environ.get('HOME') self.assertIsNotNone(home) self.assertTrue(Dir(home).exists()) if os.name == 'nt': appdata = environ.get('APPDATA') self.assertIsNotNone(appdata) self.assertTrue(Dir(appdata).exists()) zim-0.65/tests/config.py0000664000175000017500000006037312375677536015134 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg from __future__ import with_statement import tests from tests.environ import EnvironmentContext import os from zim.fs import File, Dir from zim.config import * from zim.notebook import Path import zim.environ import zim.config # Check result of lookup functions does not return files outside of # source to be tested -- just being paranoid here... # Note that this marshalling remains in place for any subsequent tests _cwd = Dir('.') def marshal_path_lookup(function): def marshalled_path_lookup(*arg, **kwarg): value = function(*arg, **kwarg) if isinstance(value, ConfigFile): p = value.file else: p = value if not p is None: assert isinstance(p, (File, Dir)), 'BUG: get %r' % p assert p.ischild(_cwd), "ERROR: \"%s\" not below \"%s\"" % (p, _cwd) return value return marshalled_path_lookup zim.config.data_file = marshal_path_lookup(zim.config.data_file) zim.config.data_dir = marshal_path_lookup(zim.config.data_dir) #~ zim.config.config_file = marshal_path_lookup(zim.config.config_file) ## class FilterInvalidConfigWarning(tests.LoggingFilter): logger = 'zim.config' message = 'Invalid config value' class EnvironmentConfigContext(EnvironmentContext): # Here we use zim.environ rather than os.environ # to make sure encoding etc. is correct environ = zim.environ.environ def __enter__(self): EnvironmentContext.__enter__(self) zim.config.set_basedirs() # refresh def __exit__(self, *exc_info): EnvironmentContext.__exit__(self, *exc_info) zim.config.set_basedirs() # refresh class TestDirsTestSetup(tests.TestCase): def runTest(self): '''Test config environment setup of test''' zim.config.log_basedirs() for k, v in ( ('XDG_DATA_HOME', os.path.join(tests.TMPDIR, 'data_home')), ('XDG_CONFIG_HOME', os.path.join(tests.TMPDIR, 'config_home')), ('XDG_CACHE_HOME', os.path.join(tests.TMPDIR, 'cache_home')) ): self.assertEqual(getattr(zim.config, k), Dir(v)) for k, v in ( #~ ('XDG_DATA_DIRS', os.path.join(tests.TMPDIR, 'data_dir')), ('XDG_CONFIG_DIRS', os.path.join(tests.TMPDIR, 'config_dir')), ): self.assertEqual(getattr(zim.config, k), map(Dir, v.split(os.pathsep))) self.assertEqual( zim.config.XDG_DATA_DIRS[0], Dir(os.path.join(tests.TMPDIR, 'data_dir')) ) class TestXDGDirs(tests.TestCase): def testValid(self): '''Test config environment is valid''' for var in ( ZIM_DATA_DIR, # should always be set when running as test XDG_DATA_HOME, XDG_CONFIG_HOME, XDG_CACHE_HOME ): self.assertTrue(isinstance(var, Dir)) for var in ( XDG_DATA_DIRS, XDG_CONFIG_DIRS, ): self.assertTrue(isinstance(var, list) and isinstance(var[0], Dir)) self.assertEqual(ZIM_DATA_DIR, Dir('./data')) self.assertTrue(ZIM_DATA_DIR.file('zim.png').exists()) self.assertTrue(data_file('zim.png').exists()) self.assertTrue(data_dir('templates').exists()) self.assertEqual( list(data_dirs(('foo', 'bar'))), [d.subdir(['foo', 'bar']) for d in data_dirs()]) @tests.skipIf(os.name == 'nt', 'No standard defaults for windows') def testCorrect(self): '''Test default basedir paths''' with EnvironmentConfigContext({ 'XDG_DATA_HOME': None, 'XDG_DATA_DIRS': None, 'XDG_CONFIG_HOME': None, 'XDG_CONFIG_DIRS': None, 'XDG_CACHE_HOME': None, }): for k, v in ( ('XDG_DATA_HOME', '~/.local/share'), ('XDG_CONFIG_HOME', '~/.config'), ('XDG_CACHE_HOME', '~/.cache') ): self.assertEqual(getattr(zim.config.basedirs, k), Dir(v)) for k, v in ( ('XDG_DATA_DIRS', '/usr/share:/usr/local/share'), ('XDG_CONFIG_DIRS', '/etc/xdg'), ): self.assertEqual(getattr(zim.config.basedirs, k), map(Dir, v.split(':'))) def testCorrect(self): '''Test config environemnt with non-default basedir paths''' my_environ = { 'XDG_DATA_HOME': '/foo/data/home', 'XDG_DATA_DIRS': '/foo/data/dir1:/foo/data/dir2', 'XDG_CONFIG_HOME': '/foo/config/home', 'XDG_CONFIG_DIRS': '/foo/config/dir1:/foo/config/dir2', 'XDG_CACHE_HOME': '/foo/cache', } if os.name == 'nt': my_environ['XDG_DATA_DIRS'] = '/foo/data/dir1;/foo/data/dir2' my_environ['XDG_CONFIG_DIRS'] = '/foo/config/dir1;/foo/config/dir2' with EnvironmentConfigContext(my_environ): for k, v in ( ('XDG_DATA_HOME', '/foo/data/home'), ('XDG_CONFIG_HOME', '/foo/config/home'), ('XDG_CACHE_HOME', '/foo/cache') ): self.assertEqual(getattr(zim.config.basedirs, k), Dir(v)) for k, v in ( ('XDG_DATA_DIRS', '/foo/data/dir1:/foo/data/dir2'), ('XDG_CONFIG_DIRS', '/foo/config/dir1:/foo/config/dir2'), ): self.assertEqual(getattr(zim.config.basedirs, k), map(Dir, v.split(':'))) class TestControlledDict(tests.TestCase): def runTest(self): mydict = ControlledDict({'foo': 'bar'}) self.assertFalse(mydict.modified) mydict['bar'] = 'dus' self.assertTrue(mydict.modified) mydict.set_modified(False) mydict['section'] = ControlledDict() mydict['section']['dus'] = 'ja' self.assertTrue(mydict['section'].modified) self.assertTrue(mydict.modified) mydict.set_modified(False) self.assertFalse(mydict.modified) mydict['section'].set_modified(False) self.assertFalse(mydict['section'].modified) self.assertFalse(mydict.modified) mydict['section'] = ControlledDict() # nested dict mydict['section']['dus'] = 'FOO!' self.assertTrue(mydict['section'].modified) self.assertTrue(mydict.modified) mydict.set_modified(False) self.assertFalse(mydict['section'].modified) self.assertFalse(mydict.modified) mydict.update({'nu': 'ja'}) self.assertTrue(mydict.modified) mydict.set_modified(False) mydict.setdefault('nu', 'XXX') self.assertFalse(mydict.modified) mydict.setdefault('new', 'XXX') self.assertTrue(mydict.modified) counter = [0] def handler(o): counter[0] += 1 mydict.connect('changed', handler) mydict['nu'] = 'YYY' self.assertEqual(counter, [1]) mydict.update({'a': 'b', 'c': 'd', 'e': 'f'}) self.assertEqual(counter, [2]) # signal only emitted once mydict['section']['foo'] = 'zzz' self.assertEqual(counter, [3]) # recursive signal mydict.set_modified(False) v = mydict.pop('nu') self.assertEqual(v, 'YYY') self.assertTrue(mydict.modified) self.assertRaises(KeyError, mydict.__getitem__, v) class TestConfigDefinitions(tests.TestCase): def testBuildDefinition(self): self.assertRaises(AssertionError, build_config_definition) for default, check, klass in ( ('foo', None, String), ('foo', basestring, String), (True, None, Boolean), (10, None, Integer), (1.0, None, Float), ('foo', ('foo', 'bar', 'baz'), Choice), (10, (1, 100), Range), ((10, 20), value_is_coord, Coordinate), ): definition = build_config_definition(default, check) self.assertIsInstance(definition, klass) def testConfigDefinitionByClass(self): for value, klass in ( ([1,2,3], list), (Path('foo'), Path), ): definition = build_config_definition(value) self.assertIsInstance(definition, ConfigDefinitionByClass) self.assertEqual(definition.klass, klass) # Test input by json struct definition = ConfigDefinitionByClass([1,2,3]) self.assertEqual(definition.check('[true,200,null]'), [True,200,None]) # Test converting to tuple definition = ConfigDefinitionByClass((1,2,3)) self.assertEqual(definition.check([5,6,7]), (5,6,7)) # Test new_from_zim_config definition = ConfigDefinitionByClass(Path('foo')) self.assertEqual(definition.check('bar'), Path('bar')) self.assertEqual(definition.check(':foo::bar'), Path('foo:bar')) self.assertRaises(ValueError, definition.check, ":::") def testBoolean(self): definition = Boolean(True) self.assertEqual(definition.check(False), False) self.assertEqual(definition.check('True'), True) self.assertRaises(ValueError, definition.check, 'XXX') self.assertRaises(ValueError, definition.check, '') self.assertRaises(ValueError, definition.check, None) def testString(self): definition = String('foo') self.assertEqual(definition.check('foo'), 'foo') self.assertRaises(ValueError, definition.check, 10) self.assertRaises(ValueError, definition.check, '') self.assertRaises(ValueError, definition.check, None) definition = String('foo', allow_empty=True) self.assertEqual(definition.check('foo'), 'foo') self.assertEqual(definition.check(''), None) self.assertEqual(definition.check(None), None) self.assertRaises(ValueError, definition.check, 10) definition = String(None) self.assertTrue(definition.allow_empty) def testInteger(self): definition = Integer(10) self.assertEqual(definition.check(20), 20) self.assertEqual(definition.check('20'), 20) self.assertEqual(definition.check('-20'), -20) self.assertRaises(ValueError, definition.check, 'XXX') self.assertRaises(ValueError, definition.check, '') self.assertRaises(ValueError, definition.check, None) def testFloat(self): definition = Float(10) self.assertEqual(definition.check(20), 20) self.assertEqual(definition.check('2.0'), 2.0) self.assertEqual(definition.check('-2.0'), -2.0) self.assertRaises(ValueError, definition.check, 'XXX') self.assertRaises(ValueError, definition.check, '') self.assertRaises(ValueError, definition.check, None) def testChoice(self): definition = Choice('xxx', ('xxx', 'foo', 'bar')) self.assertEqual(definition.check('foo'), 'foo') self.assertEqual(definition.check('Foo'), 'foo') # case independent self.assertRaises(ValueError, definition.check, 'YYY') self.assertRaises(ValueError, definition.check, '') self.assertRaises(ValueError, definition.check, None) definition = Choice('xxx', ('xxx', 'foo', 'bar'), allow_empty=True) self.assertRaises(ValueError, definition.check, 'YYY') self.assertEqual(definition.check('foo'), 'foo') self.assertEqual(definition.check('Foo'), 'foo') # case independent self.assertEqual(definition.check(''), None) self.assertEqual(definition.check(None), None) # test list conversion definition = Choice((1,2), ((1,2), (3,4), (5,6))) self.assertEqual(definition.check([3,4]), (3,4)) # test hack for preferences with label pref = [ ('xxx', 'XXX'), ('foo', 'Foo'), ('bar', 'Bar'), ] definition = Choice('xxx', pref) self.assertEqual(definition.check('foo'), 'foo') def testRange(self): definition = Range(10, 1, 100) self.assertEqual(definition.check(20), 20) self.assertEqual(definition.check('20'), 20) self.assertRaises(ValueError, definition.check, -10) self.assertRaises(ValueError, definition.check, 200) self.assertRaises(ValueError, definition.check, 'XXX') self.assertRaises(ValueError, definition.check, '') self.assertRaises(ValueError, definition.check, None) def testCoordinate(self): definition = Coordinate((1,2)) self.assertEqual(definition.check((2,3)), (2,3)) self.assertEqual(definition.check([2,3]), (2,3)) self.assertRaises(ValueError, definition.check, 'XXX') self.assertRaises(ValueError, definition.check, (1,2,3)) self.assertRaises(ValueError, definition.check, (1,'XXX')) self.assertRaises(ValueError, definition.check, ('XXX', 2)) self.assertRaises(ValueError, definition.check, '') self.assertRaises(ValueError, definition.check, None) definition = Coordinate((1,2), allow_empty=True) self.assertEqual(definition.check(''), None) self.assertEqual(definition.check(None), None) class TestConfigDict(tests.TestCase): def runTest(self): mydict = ConfigDict({ 'a': 'AAA', 'b': 'BBB', 'c': 'CCC', }) self.assertEqual(mydict.__getitem__, mydict._values.__getitem__) # optimization still in place.. self.assertFalse(mydict.modified) self.assertEqual(len(mydict), 0) self.assertEqual(mydict.keys(), []) self.assertEqual(mydict.values(), []) self.assertEqual(mydict.items(), []) self.assertRaises(KeyError, mydict.__getitem__, 'a') self.assertRaises(KeyError, mydict.__setitem__, 'a', 'XXX') # Set simple string value - use value as is self.assertEqual(mydict.setdefault('a', 'foo'), 'AAA') self.assertEqual(len(mydict), 1) self.assertEqual(mydict.keys(), ['a']) self.assertEqual(mydict['a'], 'AAA') self.assertFalse(mydict.modified) mydict['a'] = 'FOO' self.assertEqual(mydict['a'], 'FOO') self.assertTrue(mydict.modified) mydict.set_modified(False) self.assertRaises(ValueError, mydict.__setitem__, 'a', 10) self.assertFalse(mydict.modified) # Set Path object - convert value self.assertEqual(mydict.setdefault('b', Path('foo')), Path('BBB')) self.assertEqual(len(mydict), 2) self.assertEqual(mydict.keys(), ['a', 'b']) self.assertEqual(mydict['b'], Path('BBB')) self.assertFalse(mydict.modified) mydict['b'] = 'FOO' self.assertEqual(mydict['b'], Path('FOO')) self.assertTrue(mydict.modified) mydict.set_modified(False) self.assertRaises(ValueError, mydict.__setitem__, 'b', '::') self.assertFalse(mydict.modified) # Set a choice - reject value, use default with FilterInvalidConfigWarning(): self.assertEqual( mydict.setdefault('c', 'xxx', ('xxx', 'yyy', 'zzz')), 'xxx' ) self.assertEqual(len(mydict), 3) self.assertEqual(mydict.keys(), ['a', 'b', 'c']) self.assertEqual(mydict['c'], 'xxx') self.assertFalse(mydict.modified) # Define a new key - test default and input self.assertEqual(mydict.setdefault('d', 'foo'), 'foo') self.assertEqual(len(mydict), 4) self.assertEqual(mydict.keys(), ['a', 'b', 'c', 'd']) self.assertEqual(mydict['d'], 'foo') self.assertFalse(mydict.modified) with FilterInvalidConfigWarning(): mydict.input(d=10) self.assertEqual(mydict['d'], 'foo') mydict.input(d='bar') self.assertEqual(mydict['d'], 'bar') self.assertFalse(mydict.modified) # Test copying values = { 'a': 'AAA', 'b': 'BBB', 'c': 'CCC', } mydict = ConfigDict(values) mydict.define( a=String(None), b=String(None), c=String(None), ) self.assertEqual(dict(mydict), values) mycopy = mydict.copy() self.assertEqual(dict(mycopy), values) self.assertEqual(mycopy, mydict) class TestINIConfigFile(tests.TestCase): def runTest(self): '''Test config file format''' file = XDG_CONFIG_HOME.file('zim/config_TestConfigFile.conf') if file.exists(): file.remove() assert not file.exists() conf = INIConfigFile(file) conf['Foo'].setdefault('xyz', 'foooooo') conf['Foo'].setdefault('foobar', 0) conf['Foo'].setdefault('test', True) conf['Foo'].setdefault('tja', (3, 4)) conf['Bar'].setdefault('hmmm', 'tja') conf['Bar'].setdefault('check', 1.333) conf['Bar'].setdefault('empty', '', basestring, allow_empty=True) conf['Bar'].setdefault('none', None, basestring, allow_empty=True) conf.write() text = u'''\ [Foo] xyz=foooooo foobar=0 test=True tja=[3,4] [Bar] hmmm=tja check=1.333 empty= none= ''' self.assertEqual(file.read(), text) del conf conf = INIConfigFile(file) self.assertFalse(conf.modified) self.assertEqual(conf['Foo']._input, { 'xyz': 'foooooo', 'foobar': '0', 'test': 'True', 'tja': '[3,4]', }) self.assertEqual(conf['Bar']._input, { 'hmmm': 'tja', 'check': '1.333', 'empty': '', 'none': '', }) conf['Foo'].setdefault('tja', (3, 4)) self.assertFalse(conf.modified) conf['Foo']['tja'] = (33, 44) self.assertTrue(conf.modified) # Get a non-exiting section (__getitem__ not overloaded) conf.set_modified(False) section = conf['NewSection'] self.assertEqual(section, ConfigDict()) self.assertFalse(conf.modified) class TestHeaders(tests.TestCase): def runTest(self): '''Test HeadersDict class''' # normal operation text='''\ Foobar: 123 More-Lines: test 1234 test Aaa: foobar ''' headers = HeadersDict(text) self.assertEqual(headers['Foobar'], '123') self.assertEqual(headers['More-Lines'], 'test\n1234\ntest') self.assertEqual(headers.dump(), text.splitlines(True)) moretext='''\ Foobar: 123 More-Lines: test 1234 test Aaa: foobar test 123 test 456 ''' lines = moretext.splitlines(True) headers = HeadersDict() headers.read(lines) self.assertEqual(headers.dump(), text.splitlines(True)) self.assertEqual(lines, ['test 123\n', 'test 456\n']) # error tolerance and case insensitivity text = '''\ more-lines: test 1234 test ''' self.assertRaises(HeaderParsingError, HeadersDict, text) text = '''\ fooo more-lines: test 1234 test ''' self.assertRaises(HeaderParsingError, HeadersDict, text) text = 'foo-bar: test\n\n\n' headers = HeadersDict(text) self.assertEqual(headers['Foo-Bar'], 'test') self.assertEqual(headers.dump(), ['Foo-Bar: test\n']) class TestUserDirs(tests.TestCase): def setUp(self): XDG_CONFIG_HOME.file('user-dirs.dirs').write('''\ # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line you're # interested in. All local changes will be retained on the next run # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DOWNLOAD_DIR="$HOME/Desktop" XDG_TEMPLATES_DIR="$HOME/Templates" XDG_PUBLICSHARE_DIR="$HOME/Public" XDG_DOCUMENTS_DIR="$HOME/Documents" XDG_MUSIC_DIR="$HOME/Music" XDG_PICTURES_DIR="$HOME/Pictures" XDG_VIDEOS_DIR="$HOME/Videos" ''') def runTest(self): '''Test config for user dirs''' dirs = user_dirs() self.assertEqual(dirs['XDG_DOCUMENTS_DIR'], Dir('~/Documents')) class TestHierarchicDict(tests.TestCase): def runTest(self): '''Test HierarchicDict class''' dict = HierarchicDict() dict['foo']['key1'] = 'foo' self.assertEqual(dict['foo:bar:baz']['key1'], 'foo') self.assertEqual(dict['foo:bar:baz'].get('key1'), 'foo') self.assertEqual(dict['foo:bar:baz'].get('key7'), None) dict['foo:bar']['key1'] = 'bar' self.assertEqual(dict['foo:bar:baz']['key1'], 'bar') self.assertEqual(dict['foo']['key1'], 'foo') dict['foo:bar'].remove('key1') self.assertEqual(dict['foo:bar:baz']['key1'], 'foo') self.assertEqual(dict[Path('foo:bar:baz')]['key1'], 'foo') dict['']['key2'] = 'FOO' self.assertEqual(dict[Path('foo:bar:baz')]['key2'], 'FOO') class TestVirtualConfigBackend(tests.TestCase): def runTest(self): dir = VirtualConfigBackend() file = dir.file('foo.conf') self.assertEqual(file.path, '/foo.conf') self.assertEqual(file.basename, 'foo.conf') self.assertFalse(file.exists()) self.assertRaises(FileNotFoundError, file.read) self.assertRaises(FileNotFoundError, file.readlines) file.touch() self.assertTrue(file.exists()) self.assertEqual(file.read(), '') self.assertEqual(file.readlines(), []) file.remove() self.assertFalse(file.exists()) self.assertRaises(FileNotFoundError, file.read) self.assertRaises(FileNotFoundError, file.readlines) file.write('foo\nbar\n') self.assertTrue(file.exists()) self.assertEqual(file.read(), 'foo\nbar\n') self.assertEqual(file.readlines(), ['foo\n', 'bar\n']) file.writelines(['bar\n', 'baz\n']) self.assertTrue(file.exists()) self.assertEqual(file.read(), 'bar\nbaz\n') self.assertEqual(file.readlines(), ['bar\n', 'baz\n']) class TestXDGConfigDirsIter(tests.TestCase): def runTest(self): # During application init it is important that changes in # environment take effect immediately iter = XDGConfigDirsIter() path = self.get_tmp_name() zimdir = Dir(path).subdir('zim') self.assertNotIn(zimdir, list(iter)) with EnvironmentConfigContext({ 'XDG_CONFIG_HOME': path }): zim.config.set_basedirs() # refresh self.assertIn(zimdir, list(iter)) class TestXDGConfigFileIter(tests.TestCase): def setUp(self): dir = zim.config.XDG_CONFIG_DIRS[0] dir.file('zim/foo.conf').touch() def tearDown(self): dir = zim.config.XDG_CONFIG_DIRS[0] dir.file('zim/foo.conf').remove() def runTest(self): defaults = XDGConfigFileIter('foo.conf') files = list(defaults) self.assertTrue(len(files) > 0) self.assertIsInstance(files[0], File) self.assertEqual(files[0].basename, 'foo.conf') class TestConfigFile(tests.TestCase): def testExistingFile(self): file = ConfigFile(VirtualConfigBackendFile({}, 'foo.conf')) self.assertEqual(file.basename, 'foo.conf') other = ConfigFile(file.file) self.assertTrue(other == file) self.assertEqual(file.read(), '') self.assertEqual(file.readlines(), []) self.assertRaises(FileNotFoundError, file.read, fail=True) self.assertRaises(FileNotFoundError, file.readlines, fail=True) file.touch() self.assertEqual(file.read(), '') self.assertEqual(file.readlines(), []) self.assertEqual(file.read(fail=True), '') self.assertEqual(file.readlines(fail=True), []) file.write('foo!\n') self.assertEqual(file.read(), 'foo!\n') self.assertEqual(file.readlines(), ['foo!\n']) file.remove() self.assertEqual(file.read(), '') self.assertEqual(file.readlines(), []) self.assertRaises(FileNotFoundError, file.read, fail=True) self.assertRaises(FileNotFoundError, file.readlines, fail=True) def testWithDefaults(self): data = {'default.conf': 'default!\n'} file = ConfigFile( VirtualConfigBackendFile(data, 'foo.conf'), [VirtualConfigBackendFile(data, 'default.conf')] ) self.assertEqual(file.read(), 'default!\n') self.assertEqual(file.readlines(), ['default!\n']) file.touch() self.assertEqual(file.read(), 'default!\n') self.assertEqual(file.readlines(), ['default!\n']) file.write('foo!\n') self.assertEqual(file.read(), 'foo!\n') self.assertEqual(file.readlines(), ['foo!\n']) file.remove() self.assertEqual(file.read(), 'default!\n') self.assertEqual(file.readlines(), ['default!\n']) class ConfigManagerTests(object): FILES = { 'foo.conf': 'FOO!\n', 'dict.conf': '''\ [FOO] foo=test bar=test123 ''', 'profiles/myprofile/dict.conf': '''\ [FOO] foo=myprofile ''', 'profiles/oldprofile.conf': '', 'styles/oldprofile.conf': '', } def assertMatchPath(self, file, path): assert file.path.endswith(path), '"%s" does not match "%s"' % (file.path, path) def runTest(self): manager = self.manager ## Test basic file file = manager.get_config_file('foo.conf') self.assertIsInstance(file, ConfigFile) self.assertEquals(file.read(), 'FOO!\n') newfile = manager.get_config_file('foo.conf') self.assertEqual(id(file), id(newfile)) ## Test basic dict dict = manager.get_config_dict('/dict.conf') self.assertIsInstance(dict, INIConfigFile) dict['FOO'].setdefault('foo', 'xxx') self.assertEqual(dict['FOO']['foo'], 'test') newdict = manager.get_config_dict('/dict.conf') self.assertEqual(id(dict), id(newdict)) dict['FOO'].setdefault('bar', 'yyy') dict['FOO'].setdefault('newkey', 'ja') dict['FOO']['foo'] = 'dus' text = manager.get_config_file('dict.conf').read() # We implicitly test that updates are stored already automatically self.assertEquals(text, '''\ [FOO] foo=dus bar=test123 newkey=ja ''') ## Test profile switch changed_counter = tests.Counter() dict['FOO'].connect('changed', changed_counter) manager.set_profile('myprofile') self.assertEqual(changed_counter.count, 1) newfile = manager.get_config_file('foo.conf') self.assertEqual(newfile.file, file.file) self.assertFalse('myprofile' in newfile.file.path) newfile = manager.get_config_file('/dict.conf') self.assertMatchPath(newfile.file, self.prefix+'/profiles/myprofile/dict.conf') newdict = manager.get_config_dict('/dict.conf') self.assertEqual(id(newdict), id(dict)) self.assertEqual(newdict.file, newfile) self.assertEqual(dict['FOO']['foo'], 'myprofile') self.assertEqual(dict['FOO']['bar'], 'test123') ## Test profile backward compatibility manager.set_profile('oldprofile') self.assertEqual(changed_counter.count, 2) conffile = manager.get_config_file('/preferences.conf') file, defaults = conffile.file, list(conffile.defaults) self.assertMatchPath(file, self.prefix+'/profiles/oldprofile/preferences.conf') self.assertMatchPath(defaults[0], self.prefix+'/profiles/oldprofile.conf') conffile = manager.get_config_file('/style.conf') file, defaults = conffile.file, list(conffile.defaults) self.assertMatchPath(file, self.prefix+'/profiles/oldprofile/style.conf') self.assertMatchPath(defaults[0], self.prefix+'/styles/oldprofile.conf') class TestVirtualConfigManager(tests.TestCase, ConfigManagerTests): def setUp(self): self.manager = VirtualConfigManager(**self.FILES) self.prefix = '' @tests.slowTest class TestConfigManager(tests.TestCase, ConfigManagerTests): def setUp(self): for basename, content in self.FILES.items(): XDG_CONFIG_HOME.file('zim/' + basename).write(content) self.manager = ConfigManager() self.prefix = 'zim' zim-0.65/tests/tableofcontents.py0000664000175000017500000001253612614412356017036 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg import tests import gtk from tests.gui import setupGtkInterface from zim.plugins.tableofcontents import * from zim.gui.widgets import RIGHT_PANE, LEFT_PANE @tests.slowTest class TestTableOfContents(tests.TestCase): def testMainWindowExtensions(self): plugin = ToCPlugin() notebook = tests.new_notebook(self.get_tmp_name()) ui = setupGtkInterface(self, notebook=notebook) plugin.preferences['floating'] = True self.assertEqual(plugin.extension_classes['MainWindow'], MainWindowExtensionFloating) plugin.extend(ui.mainwindow) ext = list(plugin.extensions) self.assertEqual(len(ext), 1) self.assertIsInstance(ext[0], MainWindowExtensionFloating) plugin.preferences.changed() # make sure no errors are triggered plugin.preferences['show_h1'] = True plugin.preferences['show_h1'] = False plugin.preferences['pane'] = RIGHT_PANE plugin.preferences['pane'] = LEFT_PANE plugin.preferences['floating'] = False self.assertEqual(plugin.extension_classes['MainWindow'], MainWindowExtensionEmbedded) plugin.extend(ui.mainwindow) # plugin does not remember objects, manager does that ext = list(plugin.extensions) self.assertEqual(len(ext), 1) self.assertIsInstance(ext[0], MainWindowExtensionEmbedded) plugin.preferences.changed() # make sure no errors are triggered plugin.preferences['show_h1'] = True plugin.preferences['show_h1'] = False plugin.preferences['pane'] = RIGHT_PANE plugin.preferences['pane'] = LEFT_PANE plugin.preferences['floating'] = True # switch back def testToCWidget(self): '''Test Tabel Of Contents plugin''' notebook = tests.new_notebook(self.get_tmp_name()) ui = setupGtkInterface(self, notebook=notebook) pageview = ui.mainwindow.pageview widget = ToCWidget(ui, pageview, ellipsis=False) def get_tree(): # Count number of rows in TreeModel model = widget.treeview.get_model() rows = [] def c(model, path, iter): rows.append((len(path), model[iter][TEXT_COL])) model.foreach(c) return rows page = ui.notebook.get_page(Path('Test')) page.parse('wiki', '''\ ====== Foo ====== ===== bar ===== line below could be mistaken for heading of the same name.. baz sfsfsfsd ===== baz ===== sdfsdfsd ==== A ==== ==== B ==== ==== C ==== ===== dus ===== sdfsdf ''') ui.notebook.store_page(page) #~ print page.get_parsetree().tostring() with_h1 = [ (1, 'Foo'), (2, 'bar'), (2, 'baz'), (3, 'A'), (3, 'B'), (3, 'C'), (2, 'dus'), ] without_h1 = [ (1, 'bar'), (1, 'baz'), (2, 'A'), (2, 'B'), (2, 'C'), (1, 'dus'), ] # Test basic usage - click some headings ui.open_page(page) widget.on_open_page(ui, page, page) self.assertEqual(get_tree(), without_h1) widget.on_stored_page(ui.notebook, page) self.assertEqual(get_tree(), without_h1) widget.set_show_h1(True) self.assertEqual(get_tree(), with_h1) widget.set_show_h1(False) self.assertEqual(get_tree(), without_h1) column = widget.treeview.get_column(0) model = widget.treeview.get_model() def activate_row(m, path, i): #~ print ">>>", path widget.treeview.row_activated(path, column) # TODO assert something here widget.select_section(pageview.view.get_buffer(), path) menu = gtk.Menu() widget.treeview.get_selection().select_path(path) widget.on_populate_popup(widget.treeview, menu) # TODO assert something here widget.treeview.get_selection().unselect_path(path) model.foreach(activate_row) # Test promote / demote ui.set_readonly(False) pageview.set_readonly(False) wanted = [ (1, 'bar'), (2, 'baz'), (3, 'A'), (3, 'B'), (3, 'C'), (1, 'dus'), ] widget.treeview.get_selection().unselect_all() widget.treeview.get_selection().select_path((1,)) # "baz" self.assertFalse(widget.on_promote()) self.assertTrue(widget.on_demote()) self.assertEqual(get_tree(), wanted) widget.treeview.get_selection().unselect_all() widget.treeview.get_selection().select_path((0, 0)) # "baz" self.assertFalse(widget.on_demote()) self.assertTrue(widget.on_promote()) self.assertEqual(get_tree(), without_h1) # Test promote / demote multiple selected wanted = [ (1, 'bar'), (2, 'baz'), (3, 'A'), (3, 'B'), (3, 'C'), (2, 'dus'), ] widget.treeview.get_selection().unselect_all() for path in ( (1,), (1,0), (1,1), (1,2), (2,) # "baz" -> "dus" ): widget.treeview.get_selection().select_path(path) self.assertFalse(widget.on_promote()) self.assertTrue(widget.on_demote()) self.assertEqual(get_tree(), wanted) widget.treeview.get_selection().unselect_all() for path in ( (0,0), (0,0,0), (0,0,1), (0,0,2), (0,1) # "baz" -> "dus" ): widget.treeview.get_selection().select_path(path) self.assertFalse(widget.on_demote()) self.assertTrue(widget.on_promote()) self.assertEqual(get_tree(), without_h1) # Test empty page emptypage = tests.MockObject() widget.on_open_page(ui, emptypage, emptypage) self.assertEqual(get_tree(), []) widget.on_stored_page(ui.notebook, emptypage) self.assertEqual(get_tree(), []) # Test some more pages - any errors ? for page in ui.notebook.walk(): widget.on_open_page(ui, page, page) widget.on_stored_page(ui.notebook, page) # TODO check selecting heading in actual PageView # especially test selecting a non-existing item to check we don't get infinite loop zim-0.65/tests/quicknote.py0000664000175000017500000000577412374655231015660 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg from __future__ import with_statement import tests from tests.gui import setupGtkInterface import os from zim.plugins.quicknote import * from zim.fs import File, Dir from zim.gui.clipboard import Clipboard, SelectionClipboard @tests.skipIf(os.name == 'nt', 'QuickNote not supported on Windows') class TestQuickNotePlugin(tests.TestCase): def testMain(self): def main(*args): cmd = QuickNotePluginCommand('quicknote') cmd.parse_options(*args) cmd.run() def has_text(text): # create the actual check function def my_has_text(dialog): self.assertIsInstance(dialog, QuickNoteDialog) buffer = dialog.textview.get_buffer() result = buffer.get_text(*buffer.get_bounds()) self.assertTrue(text in result) return my_has_text # Text on commandline text = 'foo bar baz\ndus 123' with tests.DialogContext(has_text(text)): main('text=' + text) with tests.DialogContext(has_text(text)): main('--text', text) encoded = 'Zm9vIGJhciBiYXoKZHVzIDEyMwo=' with tests.DialogContext(has_text(text)): main('--text', encoded, '--encoding', 'base64') encoded = 'foo%20bar%20baz%0Adus%20123' with tests.DialogContext(has_text(text)): main('--text', encoded, '--encoding', 'url') # Clipboard input text = 'foo bar baz\ndus 123' SelectionClipboard.clipboard.clear() # just to be sure Clipboard.set_text(text) with tests.DialogContext(has_text(text)): main('input=clipboard') with tests.DialogContext(has_text(text)): main('--input', 'clipboard') text = 'foo bar baz\ndus 456' SelectionClipboard.set_text(text) with tests.DialogContext(has_text(text)): main('input=clipboard') with tests.DialogContext(has_text(text)): main('--input', 'clipboard') # Template options cmd = QuickNotePluginCommand('quicknote') cmd.parse_options('option:url=foo') self.assertEqual(cmd.template_options, {'url': 'foo'}) cmd = QuickNotePluginCommand('quicknote') cmd.parse_options('--option', 'url=foo') self.assertEqual(cmd.template_options, {'url': 'foo'}) # TODO: other commandline args # TODO: widget interaction - autcomplete etc. @tests.slowTest def testUIInterface(self): # test ui.new_page_from_text() name = 'foo:new page quicknote' text = '''\ ======= New Page ======= Test 1 2 3 attachment {{./zim16.png}} ''' wanted = '''\ New Page

    Test 1 2 3

    attachment

    ''' dirname = self.create_tmp_dir(name='import_source') File('./icons/zim16.png').copyto(Dir(dirname)) ui = setupGtkInterface(self) path = ui.new_page_from_text(text, name, attachments=dirname) page = ui.notebook.get_page(path) attachments = ui.notebook.get_attachments_dir(path) self.assertEqual(page.get_parsetree().tostring(), wanted) self.assertIn('zim16.png', attachments.list()) #~ @tests.slowTest #~ def testAppend(self): #~ # test ui.append_text_to_page() #~ pass zim-0.65/tests/notebook.py0000664000175000017500000006601512374655231015471 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''Test cases for the zim.notebook module.''' import tests import os from zim.fs import File, Dir from zim.config import ConfigManager, XDG_CONFIG_HOME from zim.notebook import * from zim.index import * import zim.errors from zim.formats import ParseTree class TestNotebookInfo(tests.TestCase): def runTest(self): for location, uri in ( (File('file:///foo/bar'), 'file:///foo/bar'), ('file:///foo/bar', 'file:///foo/bar'), ('zim+file:///foo?bar', 'zim+file:///foo?bar'), # specifically ensure the "?" does not get url encoded ): info = NotebookInfo(location) self.assertEqual(info.uri, uri) @tests.slowTest class TestNotebookInfoList(tests.TestCase): def setUp(self): config = ConfigManager() list = config.get_config_file('notebooks.list') file = list.file if file.exists(): file.remove() def runTest(self): root = Dir(self.create_tmp_dir(u'some_utf8_here_\u0421\u0430\u0439')) # Start empty - see this is no issue list = get_notebook_list() self.assertTrue(isinstance(list, NotebookInfoList)) self.assertTrue(len(list) == 0) info = list.get_by_name('foo') self.assertIsNone(info) # Now create it dir = root.subdir('/notebook') init_notebook(dir, name='foo') # And put it in the list and resolve it by name list = get_notebook_list() list.append(NotebookInfo(dir.uri, name='foo')) list.write() self.assertTrue(len(list) == 1) self.assertTrue(isinstance(list[0], NotebookInfo)) info = list.get_by_name('foo') self.assertEqual(info.uri, dir.uri) self.assertEqual(info.name, 'foo') newlist = get_notebook_list() # just to be sure re-laoding works.. self.assertTrue(len(list) == 1) info = newlist.get_by_name('foo') self.assertEqual(info.uri, dir.uri) self.assertEqual(info.name, 'foo') # Add a second entry if os.name == 'nt': uri1 = 'file:///C:/foo/bar' else: uri1 = 'file:///foo/bar' list = get_notebook_list() self.assertTrue(len(list) == 1) list.append(NotebookInfo(uri1, interwiki='foobar')) # on purpose do not set name, should default to basename list.write() self.assertTrue(len(list) == 2) self.assertEqual(list[:], [NotebookInfo(dir.uri), NotebookInfo(uri1)]) # And check all works OK info = list.get_by_name('foo') self.assertEqual(info.uri, dir.uri) nb, path = build_notebook(info) self.assertIsInstance(nb, Notebook) self.assertIsNone(path) for name in ('bar', 'Bar'): info = list.get_by_name(name) self.assertEqual(info.uri, uri1) self.assertRaises(FileNotFoundError, build_notebook, info) # path should not exist # Test default list.set_default(uri1) list.write() list = get_notebook_list() self.assertIsNotNone(list.default) self.assertEqual(list.default.uri, uri1) # Check interwiki parsing - included here since it interacts with the notebook list self.assertEqual(interwiki_link('wp?Foo'), 'http://en.wikipedia.org/wiki/Foo') self.assertEqual(interwiki_link('foo?Foo'), 'zim+' + dir.uri + '?Foo') self.assertEqual(interwiki_link('foobar?Foo'), 'zim+' + uri1 + '?Foo') # interwiki key self.assertEqual(interwiki_link('FooBar?Foo'), 'zim+' + uri1 + '?Foo') # interwiki key self.assertEqual(interwiki_link('bar?Foo'), 'zim+' + uri1 + '?Foo') # name self.assertEqual(interwiki_link('Bar?Foo'), 'zim+' + uri1 + '?Foo') # name # Check backward compatibility file = File('tests/data/notebook-list-old-format.list') list = NotebookInfoList(file) self.assertEqual(list[:], [ NotebookInfo(Dir(path).uri) for path in ('~/Notes', '/home/user/code/zim.debug', '/home/user/Foo Bar') ]) self.assertEqual(list.default, NotebookInfo(Dir('/home/user/code/zim.debug').uri) ) @tests.slowTest class TestResolveNotebook(tests.TestCase): def setUp(self): config = ConfigManager() list = config.get_config_file('notebooks.list') file = list.file if file.exists(): file.remove() def runTest(self): # First test some paths for input, uri in ( ('file:///foo/bar', 'file:///foo/bar'), ('~/bar', Dir('~/bar').uri), ): info = resolve_notebook(input) self.assertEqual(info.uri, uri) # Then test with (empty) notebook list info = resolve_notebook('foobar') self.assertIsNone(info) # add an entry and show we get it dir = Dir(self.create_tmp_dir()).subdir('foo') init_notebook(dir, name='foo') list = get_notebook_list() list.append(NotebookInfo(dir.uri, name='foo')) list.write() info = resolve_notebook('foo') self.assertIsNotNone(info) self.assertEqual(info.uri, dir.uri) @tests.slowTest class TestBuildNotebook(tests.TestCase): # Test including automount ! def setUp(self): self.tmpdir = Dir(self.get_tmp_name()) self.notebookdir = self.tmpdir.subdir('notebook') script = self.tmpdir.file('mount.py') script.write('''\ import os import sys notebook = sys.argv[1] os.mkdir(notebook) os.mkdir(notebook + '/foo') for path in ( notebook + "/notebook.zim", notebook + "/foo/bar.txt" ): fh = open(path, 'w') fh.write("") fh.close() ''') automount = XDG_CONFIG_HOME.file('zim/automount.conf') assert not automount.exists() automount.write('''\ [Path %s] mount=%s %s ''' % (self.notebookdir.path, script.path, self.notebookdir.path)) #~ def tearDown(self): #~ automount = XDG_CONFIG_HOME.file('zim/automount.conf') #~ automount.remove() def runTest(self): def mockconstructor(dir): return dir for uri, path in ( (self.notebookdir.uri, None), (self.notebookdir.file('notebook.zim').uri, None), (self.notebookdir.file('foo/bar.txt').uri, Path('foo:bar')), #~ ('zim+' + tmpdir.uri + '?aaa:bbb:ccc', Path('aaa:bbb:ccc')), ): #~ print ">>", uri info = NotebookInfo(uri) nb, p = build_notebook(info, notebookclass=mockconstructor) self.assertEqual(nb, self.notebookdir) self.assertEqual(p, path) info = NotebookInfo(self.notebookdir.file('nonexistingfile.txt')) self.assertRaises(FileNotFoundError, build_notebook, info) class TestNotebook(tests.TestCase): def setUp(self): path = self.get_tmp_name() self.notebook = tests.new_notebook(fakedir=path) def testAPI(self): '''Test various notebook methods''' # TODO now do the same with multiple stores self.assertEqual( self.notebook.get_store(':foo'), self.notebook._stores['']) self.assertTrue( isinstance(self.notebook.get_home_page(), Page)) page1 = self.notebook.get_page(Path('Tree:foo')) page2 = self.notebook.get_page(Path('Tree:foo')) self.assertTrue(page1.valid) self.assertTrue(id(page2) == id(page1)) # check usage of weakref self.notebook.flush_page_cache(Path('Tree:foo')) page3 = self.notebook.get_page(Path('Tree:foo')) self.assertTrue(id(page3) != id(page1)) self.assertFalse(page1.valid) page = self.notebook.get_page(Path('Test:foo')) text = page.dump('plain') newtext = ['Some new content\n'] assert newtext != text self.assertEqual(page.dump('plain'), text) page.parse('plain', newtext) self.assertEqual(page.dump('plain'), newtext) self.assertTrue(page.modified) re = self.notebook.revert_page(page) self.assertFalse(re) # no return value self.assertEqual(page.dump('plain'), text) # object reverted self.assertFalse(page.modified) self.notebook.flush_page_cache(page) page = self.notebook.get_page(page) # new object self.assertEqual(page.dump('plain'), text) page.parse('plain', newtext) self.assertEqual(page.dump('plain'), newtext) self.notebook.store_page(page) self.notebook.flush_page_cache(page) page = self.notebook.get_page(page) # new object self.assertEqual(page.dump('plain'), newtext) pages = list(self.notebook.get_pagelist(Path(':'))) self.assertTrue(len(pages) > 0) for page in pages: self.assertTrue(isinstance(page, Page)) index = set() for page in self.notebook.walk(): self.assertTrue(isinstance(page, Page)) index.add(page.name) self.assertTrue(index.issuperset(self.notebook.testdata_manifest)) def testManipulate(self): '''Test renaming, moving and deleting pages in the notebook''' # check test setup OK for path in (Path('Test:BAR'), Path('NewPage')): page = self.notebook.get_page(path) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) self.assertFalse(page.exists()) for path in (Path('Test:foo'), Path('TaskList')): page = self.notebook.get_page(path) self.assertTrue(page.haschildren or page.hascontent) self.assertTrue(page.exists()) # check errors self.assertRaises(PageExistsError, self.notebook.move_page, Path('Test:foo'), Path('TaskList')) self.notebook.index.update_async() self.assertTrue(self.notebook.index.updating) self.assertRaises(IndexBusyError, self.notebook.move_page, Path('Test:foo'), Path('Test:BAR')) self.notebook.index.ensure_update() # non-existing page - just check no errors here self.notebook.move_page(Path('NewPage'), Path('Test:NewPage')), self.notebook.index.ensure_update() # Test actual moving for oldpath, newpath in ( (Path('Test:foo'), Path('Test:BAR')), (Path('TaskList'), Path('NewPage:Foo:Bar:Baz')), ): page = self.notebook.get_page(oldpath) text = page.dump('wiki') self.assertTrue(page.haschildren) self.notebook.move_page(oldpath, newpath) self.notebook.index.ensure_update() # newpath should exist and look like the old one page = self.notebook.get_page(newpath) self.assertTrue(page.haschildren) text = [l.replace('[[foo:bar]]', '[[+bar]]') for l in text] # fix one updated link self.assertEqual(page.dump('wiki'), text) # oldpath should be deleted page = self.notebook.get_page(oldpath) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) # Test moving a page below it's own namespace oldpath = Path('Test:Bar') newpath = Path('Test:Bar:newsubpage') page = self.notebook.get_page(oldpath) page.parse('wiki', 'Test 123') self.notebook.store_page(page) self.notebook.move_page(oldpath, newpath) self.notebook.index.ensure_update() page = self.notebook.get_page(newpath) self.assertEqual(page.dump('wiki'), ['Test 123\n']) page = self.notebook.get_page(oldpath) self.assertTrue(page.haschildren) self.assertFalse(page.hascontent) # Check delete and cleanup path = Path('AnotherNewPage:Foo:bar') page = self.notebook.get_page(path) page.parse('plain', 'foo bar\n') self.notebook.store_page(page) page = self.notebook.get_page(Path('SomePageWithLinks')) page.parse('wiki', '[[:AnotherNewPage:Foo:bar]]\n' '**bold** [[:AnotherNewPage]]\n' ) self.notebook.store_page(page) page = self.notebook.get_page(Path('AnotherNewPage')) self.assertTrue(page.haschildren) self.assertFalse(page.hascontent) nlinks = self.notebook.index.n_list_links_to_tree(page, LINK_DIR_BACKWARD) self.assertEqual(nlinks, 2) self.notebook.delete_page(Path('AnotherNewPage:Foo:bar')) page = self.notebook.get_page(path) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) self.assertRaises(ValueError, self.notebook.index.n_list_links_to_tree, page, LINK_DIR_BACKWARD) # if links are removed and placeholder is cleaned up the # page doesn't exist anymore in the index so we get this error page = self.notebook.get_page(Path('SomePageWithLinks')) content = page.dump('wiki') self.assertEqual(''.join(content), ':AnotherNewPage:Foo:bar\n' '**bold** [[:AnotherNewPage]]\n' ) self.notebook.delete_page(path) # now should fail silently page = self.notebook.get_page(Path('AnotherNewPage')) self.assertFalse(page.haschildren) self.assertFalse(page.hascontent) nlinks = self.notebook.index.n_list_links_to_tree(page, LINK_DIR_BACKWARD) self.assertEqual(nlinks, 1) self.notebook.delete_page(page) self.assertRaises(ValueError, self.notebook.index.n_list_links_to_tree, page, LINK_DIR_BACKWARD) # if links are removed and placeholder is cleaned up the # page doesn't exist anymore in the index so we get this error page = self.notebook.get_page(Path('SomePageWithLinks')) content = page.dump('wiki') self.assertEqual(''.join(content), ':AnotherNewPage:Foo:bar\n' '**bold** :AnotherNewPage\n' ) # Try trashing try: self.notebook.trash_page(Path('TrashMe')) except TrashNotSupportedError: print 'trashing not supported' #~ print '\n==== DB ====' #~ self.notebook.index.ensure_update() #~ cursor = self.notebook.index.db.cursor() #~ cursor.execute('select * from pages') #~ for row in cursor: #~ print row #~ cursor.execute('select * from links') #~ for row in cursor: #~ print row # Try rename page = self.notebook.get_page(Path('Test:wiki')) self.assertTrue(page.hascontent) copy = page # we now have a copy of the page object - this is an important # part of the test - see if caching of page objects doesn't bite self.notebook.index.ensure_update() self.notebook.rename_page(Path('Test:wiki'), 'foo') page = self.notebook.get_page(Path('Test:wiki')) self.assertFalse(page.hascontent) page = self.notebook.get_page(Path('Test:foo')) # If we get an error here because notebook resolves Test:Foo # probably the index did not clean up placeholders correctly self.assertTrue(page.hascontent) self.assertFalse(copy.valid) self.notebook.index.ensure_update() self.notebook.rename_page(Path('Test:foo'), 'Foo') page = self.notebook.get_page(Path('Test:foo')) self.assertFalse(page.hascontent) page = self.notebook.get_page(Path('Test:Foo')) self.assertTrue(page.hascontent) def testUpdateLinks(self): '''Test logic for updating links on move''' # creating relative paths for source, href, link in ( ('Foo:Bar', 'Foo:Bar', 'Bar'), ('Foo:Bar', 'Foo:Bar:Baz', '+Baz'), ('Foo:Bar:Baz', 'Foo:Dus', 'Foo:Dus'), ('Foo:Bar:Baz', 'Foo:Bar:Dus', 'Dus'), ('Foo:Bar', 'Dus:Ja', 'Dus:Ja'), ('Foo:Bar', 'Foo:Ja', 'Ja'), ('Foo:Bar:Baz', 'Foo:Bar', 'Bar'), ('Foo:Bar:Baz', 'Foo', 'Foo'), ('Foo:Bar:Baz', 'Bar', ':Bar'), # conflict with anchor ): #~ print '>', source, href, link self.assertEqual( self.notebook.relative_link(Path(source), Path(href)), link) # update the page that was moved itself # moving from Dus:Baz to foo:bar:Baz or renaming to Dus:Bar text = u'''\ http://foo.org # urls are untouched [[:Hmmm:OK]] # link way outside move [[Baz:Ja]] # relative link that does not need change on move, but does on rename [[Ja]] # relative link that needs updating on move, but not on rename [[Ja|Grrr]] # relative link that needs updating on move, but not on rename - with name [[:foo:bar:Dus]] # Link that could be made relative, but isn't ''' wanted1 = u'''\ http://foo.org # urls are untouched [[:Hmmm:OK]] # link way outside move [[Baz:Ja]] # relative link that does not need change on move, but does on rename [[Dus:Ja]] # relative link that needs updating on move, but not on rename [[Dus:Ja|Grrr]] # relative link that needs updating on move, but not on rename - with name [[:foo:bar:Dus]] # Link that could be made relative, but isn't ''' wanted2 = u'''\ http://foo.org # urls are untouched [[:Hmmm:OK]] # link way outside move [[+Ja]] # relative link that does not need change on move, but does on rename [[Ja]] # relative link that needs updating on move, but not on rename [[Ja|Grrr]] # relative link that needs updating on move, but not on rename - with name [[:foo:bar:Dus]] # Link that could be made relative, but isn't ''' # "move" Dus:Baz -> foo:bar:Baz page = self.notebook.get_page(Path('foo:bar:Baz')) page.parse('wiki', text) self.notebook._update_links_from(page, Path('Dus:Baz'), page, Path('Dus:Baz')) self.assertEqual(u''.join(page.dump('wiki')), wanted1) print '--' # "rename" Dus:Baz -> Dus:Bar page = self.notebook.get_page(Path('Dus:Bar')) page.parse('wiki', text) self.notebook._update_links_from(page, Path('Dus:Baz'), page, Path('Dus:Baz')) self.assertEqual(u''.join(page.dump('wiki')), wanted2) # updating links to the page that was moved # moving from Dus:Baz to foo:bar:Baz or renaming to Dus:Bar - updating links in Dus:Ja text = u'''\ http://foo.org # urls are untouched [[:Hmmm:OK]] # link way outside move [[Baz:Ja]] # relative link that needs updating [[Baz:Ja|Grr]] # relative link that needs updating - with name [[Dus:Foo]] # relative link that does not need updating [[:Dus:Baz]] # absolute link that needs updating [[:Dus:Baz:Hmm]] # absolute link that needs updating [[:Dus:Baz:Hmm:Ja]] # absolute link that needs updating ''' wanted1 = u'''\ http://foo.org # urls are untouched [[:Hmmm:OK]] # link way outside move [[foo:bar:Baz:Ja]] # relative link that needs updating [[foo:bar:Baz:Ja|Grr]] # relative link that needs updating - with name [[Dus:Foo]] # relative link that does not need updating [[foo:bar:Baz]] # absolute link that needs updating [[foo:bar:Baz:Hmm]] # absolute link that needs updating [[foo:bar:Baz:Hmm:Ja]] # absolute link that needs updating ''' wanted2 = u'''\ http://foo.org # urls are untouched [[:Hmmm:OK]] # link way outside move [[Bar:Ja]] # relative link that needs updating [[Bar:Ja|Grr]] # relative link that needs updating - with name [[Dus:Foo]] # relative link that does not need updating [[Bar]] # absolute link that needs updating [[Bar:Hmm]] # absolute link that needs updating [[Bar:Hmm:Ja]] # absolute link that needs updating ''' page = self.notebook.get_page(Path('Dus:Ja')) page.parse('wiki', text) self.notebook._update_links_in_page(page, Path('Dus:Baz'), Path('foo:bar:Baz')) self.assertEqual(u''.join(page.dump('wiki')), wanted1) page = self.notebook.get_page(Path('Dus:Ja')) page.parse('wiki', text) self.notebook._update_links_in_page(page, Path('Dus:Baz'), Path('Dus:Bar')) self.assertEqual(u''.join(page.dump('wiki')), wanted2) # now test actual move on full notebook def links(source, href): #~ print '====' for link in self.notebook.index.list_links(source, LINK_DIR_FORWARD): #~ print 'FOUND LINK', link if link.href == href: return True else: return False path = Path('Linking:Dus:Ja') newpath = Path('Linking:Hmm:Ok') self.assertTrue(links(path, Path('Linking:Dus'))) self.assertTrue(links(path, Path('Linking:Foo:Bar'))) self.assertTrue(links(Path('Linking:Foo:Bar'), path)) self.assertFalse(links(newpath, Path('Linking:Dus'))) self.assertFalse(links(newpath, Path('Linking:Foo:Bar'))) self.assertFalse(links(Path('Linking:Foo:Bar'), newpath)) self.notebook.move_page(path, newpath, update_links=True) self.assertFalse(links(path, Path('Linking:Dus'))) self.assertFalse(links(path, Path('Linking:Foo:Bar'))) self.assertFalse(links(Path('Linking:Foo:Bar'), path)) self.assertTrue(links(newpath, Path('Linking:Dus'))) self.assertTrue(links(newpath, Path('Linking:Foo:Bar'))) self.assertTrue(links(Path('Linking:Foo:Bar'), newpath)) def testResolvePath(self): '''Test notebook.resolve_path()''' # cleaning absolute paths for name, wanted in ( ('foo:::bar', 'foo:bar'), ('::foo:bar:', 'foo:bar'), (':foo', 'foo'), (':Bar', 'Bar'), (':Foo (Bar)', 'Foo (Bar)'), # TODO more ambigous test cases ): self.assertEqual( self.notebook.resolve_path(name), Path(wanted) ) # resolving relative paths for name, ns, wanted in ( ('foo:bar', 'Test:xxx', 'Test:foo:bar'), ('test', 'Test:xxx', 'Test'), ('+test', 'Test:xxx', 'Test:xxx:test'), ('foo', 'Test:xxx', 'Test:foo'), ('+foo', 'Test:xxx', 'Test:xxx:foo'), ('Test', 'TaskList:bar', 'Test'), ('test:me', 'TaskList:bar', 'Test:me'), ): self.assertEqual( self.notebook.resolve_path(name, Path(ns)), Path(wanted) ) self.assertRaises(PageNameError, self.notebook.resolve_path, ':::') self.assertRaises(PageNameError, self.notebook.resolve_path, '/foo') self.assertRaises(PageNameError, self.notebook.resolve_path, ':foo:(bar)') def testResolveFile(self): '''Test notebook.resolve_file()''' path = Path('Foo:Bar') dir = self.notebook.dir self.notebook.config['Notebook']['document_root'] = './notebook_document_root' self.notebook.do_properties_changed() # parse config doc_root = self.notebook.document_root self.assertEqual(doc_root, dir.subdir('notebook_document_root')) for link, wanted, cleaned in ( ('~/test.txt', File('~/test.txt'), '~/test.txt'), (r'~\test.txt', File('~/test.txt'), '~/test.txt'), ('file:///test.txt', File('file:///test.txt'), None), ('file:/test.txt', File('file:///test.txt'), None), ('file://localhost/test.txt', File('file:///test.txt'), None), ('/test.txt', doc_root.file('test.txt'), '/test.txt'), ('../../notebook_document_root/test.txt', doc_root.file('test.txt'), '/test.txt'), ('./test.txt', dir.file('Foo/Bar/test.txt'), './test.txt'), (r'.\test.txt', dir.file('Foo/Bar/test.txt'), './test.txt'), ('../test.txt', dir.file('Foo/test.txt'), '../test.txt'), (r'..\test.txt', dir.file('Foo/test.txt'), '../test.txt'), ('../Bar/Baz/test.txt', dir.file('Foo/Bar/Baz/test.txt'), './Baz/test.txt'), (r'C:\foo\bar', File('file:///C:/foo/bar'), None), (r'Z:\foo\bar', File('file:///Z:/foo/bar'), None), ): #~ print link, '>>', self.notebook.resolve_file(link, path) self.assertEqual( self.notebook.resolve_file(link, path), wanted) self.assertEqual( self.notebook.relative_filepath(wanted, path), cleaned) # check relative path without Path self.assertEqual( self.notebook.relative_filepath(doc_root.file('foo.txt')), '/foo.txt') self.assertEqual( self.notebook.relative_filepath(dir.file('foo.txt')), './foo.txt') # def testResolveLink(self): # '''Test page.resolve_link()''' # page = self.notebook.get_page(':Test:foo') # for link, wanted in ( #~ (':foo:bar', ('page', ':foo:bar')), # ('foo:bar', ('page', ':Test:foo:bar')), # ('Test', ('page', ':Test')), # ('Test:non-existent', ('page', ':Test:non-existent')), # ('user@domain.com', ('mailto', 'mailto:user@domain.com')), # ('mailto:user@domain.com', ('mailto', 'mailto:user@domain.com')), # ('http://zim-wiki.org', ('http', 'http://zim-wiki.org')), # ('foo://zim-wiki.org', ('foo', 'foo://zim-wiki.org')), #~ ('file://'), #~ ('/foo/bar', ('file', '/foo/bar')), #~ ('man?test', ('man', 'test')), # ): self.assertEqual(self.notebook.resolve_link(link, page), wanted) #~ def testResolveName(self): #~ '''Test store.resolve_name().''' #~ print '\n'+'='*10+'\nSTORE: %s' % self.store #~ #~ # First make sure basic list function is working #~ def list_pages(name): #~ for page in self.store.get_pages(name): #~ yield page.basename #~ self.assertTrue('Test' in list_pages('')) #~ self.assertTrue('foo' in list_pages(':Test')) #~ self.assertTrue('bar' in list_pages(':Test:foo')) #~ self.assertFalse('Dus' in list_pages(':Test:foo')) #~ #~ # Now test the resolving algorithm - only testing low level #~ # function in store, so path "anchor" does not work, search #~ # is strictly right to left through the namespace, if any #~ for link, namespace, name in ( #~ ('BAR','Test:foo','Test:foo:bar'), #~ ('test',None,'Test'), #~ ('test','Test:foo:bar','Test'), #~ ('FOO:Dus','Test:foo:bar','Test:foo:Dus'), #~ # FIXME more ambigous test data #~ ): #~ print '-'*10+'\nLINK %s (%s)' % (link, namespace) #~ r = self.store.resolve_name(link, namespace=namespace) #~ print 'RESULT %s' % r #~ self.assertEqual(r, name) class TestPath(tests.TestCase): '''Test path object''' def generator(self, name): return Path(name) def runTest(self): '''Test Path object''' for name, namespace, basename in [ ('Test:foo', 'Test', 'foo'), ('Test', '', 'Test'), ]: path = self.generator(name) # test basic properties self.assertEqual(path.name, name) self.assertEqual(path.basename, basename) self.assertEqual(path.namespace, namespace) self.assertTrue(path.name in path.__repr__()) # TODO test operators on paths > < + - >= <= == != class TestPage(TestPath): '''Test page object''' def setUp(self): self.notebook = tests.new_notebook() def generator(self, name): return self.notebook.get_page(Path(name)) def testMain(self): '''Test Page object''' TestPath.runTest(self) tree = ParseTree().fromstring('''\ foo:bar bar @baz ''' ) page = Page(Path('Foo')) page.readonly = False page.set_parsetree(tree) links = list(page.get_links()) self.assertEqual(links, [ ('page', 'foo:bar', {}), ('page', 'bar', {}), ] ) tags = list(page.get_tags()) self.assertEqual(tags, [ ('@baz', {'name': 'baz'}), ]) self.assertEqual(page.get_parsetree().tostring(), tree.tostring()) # ensure we didn't change the tree # TODO test get / set parse tree with and without source tree = ParseTree().fromstring('') self.assertFalse(tree.hascontent) page.set_parsetree(tree) self.assertFalse(page.hascontent) def testShouldAutochangeHeading(self): page = Page(Path("Foo")) page.readonly = False tree = ParseTree().fromstring('') tree.set_heading("Foo") page.set_parsetree(tree) self.assertTrue(page.heading_matches_pagename()) tree.set_heading("Bar") page.set_parsetree(tree) self.assertFalse(page.heading_matches_pagename()) class TestIndexPage(tests.TestCase): def setUp(self): self.notebook = tests.new_notebook() self.notebook.index.update() def runTest(self): '''Test index page generation''' indexpage = IndexPage(self.notebook, Path(':')) tree = indexpage.get_parsetree() self.assertTrue(tree) links = [link[1] for link in indexpage.get_links()] self.assertTrue(len(links) > 1) #~ print links self.assertTrue('Test:foo' in links) class TestNewNotebook(tests.TestCase): def setUp(self): self.notebook = Notebook(index=Index(dbfile=':memory:')) self.notebook.add_store(Path(':'), 'memory') # Explicitly not run index.update() here def runTest(self): '''Try populating a notebook from scratch''' # Based on bug lp:511481 - should reproduce bug with updating links to child pages notebook = self.notebook index = self.notebook.index for name, text in ( ('page1', 'Foo bar\n'), ('page1:child', 'I have backlinks !\n'), ('page2', '[[page1:child]] !\n'), ('page3', 'Hmm\n'), ): path = Path(name) page = self.notebook.get_page(path) page.parse('wiki', text) notebook.store_page(page) for name, forw, backw in ( ('page1', 0, 0), ('page1:child', 0, 1), ('page2', 1, 0), ('page3', 0, 0), ('page3:page1', 0, 0), ('page3:page1:child', 0, 0), ): path = Path(name) #~ print path, \ #~ list(index.list_links(path, LINK_DIR_FORWARD)), \ #~ list(index.list_links(path, LINK_DIR_BACKWARD)) self.assertEqual( index.n_list_links(path, LINK_DIR_FORWARD), forw) self.assertEqual( index.n_list_links(path, LINK_DIR_BACKWARD), backw) notebook.move_page(Path('page1'), Path('page3:page1')) for name, forw, backw in ( ('page1', 0, 0), ('page1:child', 0, 0), ('page2', 1, 0), ('page3', 0, 0), ('page3:page1', 0, 0), ('page3:page1:child', 0, 1), ): path = Path(name) #~ print path, \ #~ list(index.list_links(path, LINK_DIR_FORWARD)), \ #~ list(index.list_links(path, LINK_DIR_BACKWARD)) self.assertEqual( index.n_list_links(path, LINK_DIR_FORWARD), forw) self.assertEqual( index.n_list_links(path, LINK_DIR_BACKWARD), backw) text = ''.join(notebook.get_page(Path('page3:page1:child')).dump('wiki')) self.assertEqual(text, 'I have backlinks !\n') zim-0.65/tests/search.py0000664000175000017500000001615312377622056015116 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jaap Karssenberg import tests from zim.search import * from zim.notebook import Path class TestSearchRegex(tests.TestCase): def runTest(self): '''Test regex compilation for search terms''' regex_func = SearchSelection(None)._content_regex for word, regex in ( ('foo', r'\bfoo\b'), ('*foo', r'\b\S*foo\b'), ('foo*', r'\bfoo\S*\b'), ('*foo*', r'\b\S*foo\S*\b'), ('foo$', r'\bfoo\$'), ('foo bar', r'\bfoo\ bar\b'), ): #print '>>', word, regex self.assertEqual(regex_func(word), re.compile(regex, re.I | re.U)) text = 'foo foobar FooBar Foooo Foo!' regex = regex_func('foo') new, n = regex.subn('', text) self.assertEqual(n, 2) self.assertEqual(new, ' foobar FooBar Foooo !') text = 'foo foobar FooBar Foooo Foo!' regex = regex_func('foo*') new, n = regex.subn('', text) self.assertEqual(n, 5) class TestSearch(tests.TestCase): def setUp(self): self.notebook = tests.new_notebook() def callback_check(self, selection, path): self.assertIsInstance(selection, (SearchSelection, type(None))) self.assertIsInstance(path, (Path, type(None))) return True def runTest(self): '''Test search API''' self.notebook.index.update() results = SearchSelection(self.notebook) query = Query('foo bar') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [ QueryTerm('contentorname', 'foo'), QueryTerm('contentorname', 'bar') ] ) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(len(results) > 0) self.assertFalse(Path('TaskList:foo') in results) self.assertTrue(Path('Test:foo') in results) self.assertTrue(Path('Test:foo:bar') in results) self.assertTrue(set(results.scores.keys()) == results) self.assertTrue(all(results.scores.values())) query = Query('+TODO -bar') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [ QueryTerm('contentorname', 'TODO'), QueryTerm('contentorname', 'bar', inverse=True) ] ) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(len(results) > 0) self.assertTrue(Path('TaskList:foo') in results) self.assertFalse(Path('Test:foo') in results) self.assertFalse(Path('Test:foo:bar') in results) self.assertTrue(set(results.scores.keys()) == results) self.assertTrue(all(results.scores.values())) query = Query('TODO not bar') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [ QueryTerm('contentorname', 'TODO'), QueryTerm('contentorname', 'bar', inverse=True) ] ) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(len(results) > 0) self.assertTrue(Path('TaskList:foo') in results) self.assertFalse(Path('Test:foo') in results) self.assertFalse(Path('Test:foo:bar') in results) self.assertTrue(set(results.scores.keys()) == results) self.assertTrue(all(results.scores.values())) query = Query('TODO or bar') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertTrue(query.root[0].operator == OPERATOR_OR) self.assertEqual(query.root, [ [ QueryTerm('contentorname', 'TODO'), QueryTerm('contentorname', 'bar') ] ] ) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(len(results) > 0) self.assertTrue(Path('TaskList:foo') in results) self.assertTrue(Path('Test:foo') in results) self.assertTrue(Path('Test:foo:bar') in results) self.assertTrue(set(results.scores.keys()) == results) self.assertTrue(all(results.scores.values())) query = Query('ThisWordDoesNotExistingInTheTestNotebook') results.search(query, callback=self.callback_check) self.assertFalse(results) query = Query('LinksTo: "Linking:Foo:Bar"') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [QueryTerm('linksto', 'Linking:Foo:Bar')]) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(Path('Linking:Dus:Ja') in results) self.assertTrue(set(results.scores.keys()) == results) self.assertTrue(all(results.scores.values())) query = Query('NOT LinksTo:"Linking:Foo:Bar"') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [QueryTerm('linksto', 'Linking:Foo:Bar', True)]) results.search(query, callback=self.callback_check) #~ print results self.assertFalse(Path('Linking:Dus:Ja') in results) self.assertTrue(set(results.scores.keys()) == results) self.assertTrue(all(results.scores.values())) query = Query('LinksTo:"NonExistingNamespace:*"') results.search(query, callback=self.callback_check) self.assertFalse(results) query = Query('LinksFrom: "Linking:Dus:Ja"') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [QueryTerm('linksfrom', 'Linking:Dus:Ja')]) query = Query('Links: "Linking:Dus:Ja"') # alias for LinksFrom self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [QueryTerm('linksfrom', 'Linking:Dus:Ja')]) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(Path('Linking:Foo:Bar') in results) self.assertTrue(set(results.scores.keys()) == results) self.assertTrue(all(results.scores.values())) query = Query('LinksFrom:"NonExistingNamespace:*"') results.search(query, callback=self.callback_check) self.assertFalse(results) query = Query('Namespace: "TaskList" fix') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [QueryTerm('namespace', 'TaskList'), QueryTerm('contentorname', 'fix')]) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(Path('TaskList:foo') in results) for text in ( 'Namespace: "Test:Foo Bar"', 'Namespace:"Test:Foo Bar"' 'Section: "Test:Foo Bar"' 'Section:"Test:Foo Bar"' ): # check if space in page name works - found bug for 2nd form query = Query(text) results.search(query, callback=self.callback_check) #~ print text, '>>' , results self.assertTrue(Path('Test:Foo Bar:Dus Ja Hmm') in results) query = Query('Namespace: "NonExistingNamespace"') results.search(query, callback=self.callback_check) #~ print results self.assertFalse(results) query = Query('Tag: tags') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [QueryTerm('tag', 'tags')]) query = Query('@tags') self.assertTrue(query.root.operator == OPERATOR_AND) self.assertEqual(query.root, [QueryTerm('tag', 'tags')]) results.search(query, callback=self.callback_check) #~ print results self.assertTrue(Path('Test:tags') in results and len(results) == 2) # Tasklist:all is the second match query = Query('Tag: NonExistingTag') results.search(query, callback=self.callback_check) self.assertFalse(results) # TODO test ContentOrName versus Content # TODO test Name @tests.slowTest class TestSearchFiles(TestSearch): def setUp(self): path = self.create_tmp_dir() self.notebook = tests.new_files_notebook(path) def runTest(self): '''Test search API with file based notebook''' TestSearch.runTest(self) zim-0.65/tests/insertsymbol.py0000664000175000017500000000475712374655231016410 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg from __future__ import with_statement import tests from tests.pageview import setUpPageView, press, UndoStackManager from zim.config import SectionedConfigDict, ConfigManager from zim.plugins.insertsymbol import * ALPHA = unichr(945) EACUTE = unichr(201) ECIRC = unichr(202) EGRAVE = unichr(200) class TestInsertSymbolPlugin(tests.TestCase): def runTest(self): plugin = InsertSymbolPlugin(ConfigManager()) pageview = setUpPageView() textview = pageview.view buffer = textview.get_buffer() pageview.undostack = UndoStackManager(buffer) mainwindow = tests.MockObject() mainwindow.pageview = pageview mainwindow.ui = tests.MockObject() # XXX mainwindow.ui.uimanager = tests.MockObject() # XXX mainwindow.ui.uistate = SectionedConfigDict() plugin.extend(mainwindow, 'MainWindow') print '\n!! Two GtkWarnings expected here for gdk display !!' # Need a window to get the widget realized window = gtk.Window() window.add(pageview) pageview.realize() textview.realize() # insert on end-of-word with space press(textview, r'\alpha ') text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, ALPHA + ' ') # Check undo - first undo replace, then the insert space pageview.undo() text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, r'\alpha ') pageview.undo() text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, r'\alpha') # no trailing space # insert on end-of-word with ; buffer.clear() press(textview, r'\alpha;') text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, ALPHA) # no trailing space # no insert in code or pre section buffer.clear() pageview.toggle_format(VERBATIM) press(textview, r'\alpha ') text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, r'\alpha ') # no replace # test dialog def check_dialog(dialog): self.assertIsInstance(dialog, InsertSymbolDialog) dialog.iconview.item_activated((9,)) # path for 10th item in symbol list dialog.iconview.item_activated((10,)) # path for 11th item in symbol list dialog.iconview.item_activated((11,)) # path for 12th item in symbol list dialog.assert_response_ok() buffer.clear() mainwindow_ext = plugin.get_extension(MainWindowExtension) with tests.DialogContext(check_dialog): mainwindow_ext.insert_symbol() text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, EACUTE + ECIRC + EGRAVE) zim-0.65/tests/index.py0000664000175000017500000003677012421645125014757 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg import tests import gtk import pango import os from zim.fs import Dir from zim.notebook import init_notebook, Notebook, Path, Link from zim.index import * from zim.formats import ParseTree from zim.gui.clipboard import Clipboard from zim.gui.pageindex import * class TestIndex(tests.TestCase): def setUp(self): # Note that in this test our index is not the default index # for the notebook. So any assumption from the notebook about # the index will be wrong. self.index = Index(dbfile=':memory:') self.notebook = tests.new_notebook() self.index.set_notebook(self.notebook) def runTest(self): '''Test indexing''' # This is one big test instead of seperate sub tests because in the # subclass we generate a file based notebook in setUp, and we do not # want to do that many times #~ print self.__class__.__name__ self.index.update() #~ print '\n==== DB ====' #~ cursor = self.index.db.cursor() #~ cursor.execute('select * from pages') #~ for row in cursor: #~ print row #~ cursor.execute('select * from links') #~ for row in cursor: #~ print row # paths / ids path = self.index.lookup_path(Path('Test:foo:bar')) self.assertTrue(isinstance(path, IndexPath)) path = self.index.lookup_id(path.id) self.assertTrue(isinstance(path, IndexPath)) self.assertEqual(path.name, 'Test:foo:bar') # pages pagelist = list(self.index.list_pages(None)) self.assertTrue(len(pagelist) > 0) pagelist = list(self.index.list_pages(Path('Test'))) self.assertTrue(len(pagelist) > 0) for page in pagelist: self.assertTrue(page.name.startswith('Test:')) self.assertTrue(page.name.count(':') == 1) pagelist = list(self.index.list_pages(Path('Linking'))) self.assertTrue(Path('Linking:Dus') in pagelist) pagelist = list(self.index.list_pages(Path('Some:Non:Existing:Path'))) self.assertTrue(len(pagelist) == 0) # links forwlist = list(self.index.list_links(Path('Test:foo:bar'))) backlist = list(self.index.list_links(Path('Test:foo:bar'), LINK_DIR_BACKWARD)) bothlist = list(self.index.list_links(Path('Test:foo:bar'), LINK_DIR_BOTH)) for l in forwlist, backlist, bothlist: self.assertTrue(len(l) > 0) for link in l: self.assertTrue(isinstance(link, Link)) self.assertTrue(isinstance(link.source, IndexPath)) self.assertTrue(isinstance(link.href, IndexPath)) self.assertTrue(len(forwlist) + len(backlist) == len(bothlist)) n = self.index.n_list_links(Path('Test:foo:bar'), LINK_DIR_BACKWARD) self.assertEqual(n, len(backlist)) # tags taglist = list(self.index.list_tags(Path('Test:tags'))) self.assertTrue(len(taglist) == 11) for tag in taglist: self.assertTrue(isinstance(tag, IndexTag)) tagnames = [t.name for t in taglist] aretags = ['tags', 'beginning', 'end', 'tabs', 'verbatim', 'enumerations', 'encoding', 's', 'num6ers', 'wit', 'cr'] nottags = ['places', 'links', 'captions', 'Headings', 'word'] for t in aretags: self.assertTrue(t in tagnames) for t in nottags: self.assertTrue(not t in tagnames) # cursor.row_count is not reliable - see docs def count_pages(db): c = db.cursor() c.execute('select id from pages') r = c.fetchall() return len(r) def dump_db(db): c = db.cursor() c.execute('select * from pages') text = '' for row in c: # HACK iterating of sqlite3.Row objects only supported for python 2.6 myrow = [] for i in range(len(row)): myrow.append(row[i]) text += ', '.join(map(str, myrow)) + '\n' return text # repeat update() to check if update is stable manifest = len(self.notebook.testdata_manifest) self.assertTrue(count_pages(self.index.db) >= manifest) origdb = dump_db(self.index.db) self.index.update() self.assertEqual(dump_db(self.index.db), origdb) # indexkey for path in (Path('Test'), Path('Test:foo')): indexpath = self.index.lookup_path(path) self.assertEqual(indexpath.contentkey, self.notebook.get_page_indexkey(path)) self.assertEqual(indexpath.childrenkey, self.notebook.get_pagelist_indexkey(path)) # other functions path = self.index.get_unique_path(Path('non-existing-path')) self.assertEqual(path, Path('non-existing-path')) path = self.index.get_unique_path(Path('Test:foo')) self.assertEqual(path, Path('Test:foo_1')) # get_previous / get_next page = list(self.index.list_pages(None))[0] seen = 0 while page: seen = max(seen, page.name.count(':')) page = self.index.get_next(page) self.assertTrue(seen >= 2) page = list(self.index.list_pages(None))[-1] seen = 0 while page: seen = max(seen, page.name.count(':')) page = self.index.get_previous(page) self.assertTrue(seen >= 2) # now go through the flush loop self.index.flush() self.assertEqual(count_pages(self.index.db), 1) self.index.update() self.assertEqual(dump_db(self.index.db), origdb) # now index only part of the tree - and repeat self.index.flush() self.assertEqual(count_pages(self.index.db), 1) self.index.update(Path('Test')) self.assertTrue(count_pages(self.index.db) > 2) partdb = dump_db(self.index.db) self.index.update(Path('Test')) self.assertEqual(dump_db(self.index.db), partdb) # Index whole tree again self.index.update() # Check cleanup path = Path('New:Nested:Path') self.index.touch(path) parent = self.index.lookup_path(path.parent) self.assertTrue(parent and parent.haschildren) self.index.delete(path) parent = self.index.lookup_path(path.parent) self.assertTrue(parent is None) # Check cleanup for links links = [link.href for link in self.index.list_links(Path('roundtrip'))] for p in ('foo:bar', 'Bar'): self.assertTrue(Path(p) in links) path = self.index.lookup_path(Path('foo:bar')) self.assertTrue(path) # Check for tag indexing tags = [tag.name for tag in self.index.list_tags(Path('roundtrip'))] for t in ('foo', 'bar'): self.assertTrue(t in tags) tagged = list(self.index.list_tagged_pages(t)) self.assertTrue(Path('roundtrip') in tagged) tree = ParseTree().fromstring(':foo:bar') page = self.notebook.get_page(Path('roundtrip')) page.set_parsetree(tree) self.notebook.store_page(page) path = self.index.lookup_path(Path('Bar')) self.assertTrue(path is None) path = self.index.lookup_path(Path('foo:bar')) self.assertTrue(path) self.notebook.delete_page(Path('roundtrip')) path = self.index.lookup_path(Path('foo:bar')) self.assertTrue(path is None) # Check get_page_index() to double check stable sorting def check_index(path): for i, child in enumerate(self.index.list_pages(path)): index = self.index.get_page_index(child) #~ print 'INDEX', i, child, '-->', index self.assertTrue(index == i, 'Index mismatch for %s' % child) if child.haschildren: check_index(child) # recurs check_index(Path(':')) @tests.slowTest class TestIndexFiles(TestIndex): # Like the test above, but now using a files backend def setUp(self): path = self.create_tmp_dir() self.notebook = tests.new_files_notebook(path) self.index = self.notebook.index def runTest(self): '''Test indexing files''' TestIndex.runTest(self) class TestPageTreeStore(tests.TestCase): def setUp(self): self.index = Index(dbfile=':memory:') self.notebook = tests.new_notebook() self.index.set_notebook(self.notebook) self.notebook.index.update() def runTest(self): '''Test PageTreeStore index interface''' # This is one big test instead of seperate sub tests because in the # subclass we generate a file based notebook in setUp, and we do not # want to do that many times. # Hooking up the treeview as well just to see if we get any errors # From the order the signals are generated. ui = MockUI() ui.notebook = self.notebook ui.page = Path('Test:foo') self.assertTrue(self.notebook.get_page(ui.page).exists()) treeview = PageTreeView(ui) treestore = PageTreeStore(self.index) self.assertEqual(treestore.get_flags(), 0) self.assertEqual(treestore.get_n_columns(), 8) treeview.set_model(treestore) self.index.update(callback=tests.gtk_process_events) tests.gtk_process_events() treeview = PageTreeView(ui) # just run hidden to check errors treeview.set_model(treestore) n = treestore.on_iter_n_children(None) self.assertTrue(n > 0) n = treestore.iter_n_children(None) self.assertTrue(n > 0) for i in range(treestore.get_n_columns()): self.assertTrue(not treestore.get_column_type(i) is None) # Quick check for basic methods iter = treestore.on_get_iter((0,)) self.assertTrue(isinstance(iter, PageTreeIter)) self.assertFalse(iter.indexpath.isroot) basename = treestore.on_get_value(iter, 0) self.assertTrue(len(basename) > 0) self.assertEqual(iter.treepath, (0,)) self.assertEqual(treestore.on_get_path(iter), (0,)) self.assertEqual(treestore.get_treepath(iter.indexpath), (0,)) self.assertEqual(treestore.get_treepath(Path(iter.indexpath.name)), (0,)) iter2 = treestore.on_iter_children(None) self.assertEqual(iter2.indexpath, iter.indexpath) self.assertTrue(treestore.on_get_iter((20,20,20,20,20)) is None) self.assertTrue(treestore.get_treepath(Path('nonexisting')) is None) self.assertRaises(ValueError, treestore.get_treepath, Path(':')) # Now walk through the whole notebook testing the API # with nested pages and stuff npages = 0 path = [] for page in self.notebook.walk(): #~ print '>>', page npages += 1 names = page.name.split(':') if len(names) > len(path): path.append(0) # always increment by one elif len(names) < len(path): while len(names) < len(path): path.pop() path[-1] += 1 else: path[-1] += 1 #~ print '>>', page, path iter = treestore.get_iter(tuple(path)) indexpath = treestore.get_indexpath(iter) #~ print '>>>', indexpath self.assertEqual(indexpath, page) self.assertEqual(treestore.get_value(iter, NAME_COL), page.basename) self.assertEqual(treestore.get_value(iter, PATH_COL), page) if page.hascontent or page.haschildren: self.assertEqual(treestore.get_value(iter, EMPTY_COL), False) self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_NORMAL) self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.NORMAL_COLOR) else: self.assertEqual(treestore.get_value(iter, EMPTY_COL), True) self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_ITALIC) self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.EMPTY_COLOR) self.assertEqual(treestore.get_path(iter), tuple(path)) if indexpath.haschildren: self.assertTrue(treestore.iter_has_child(iter)) child = treestore.iter_children(iter) self.assertTrue(not child is None) child = treestore.iter_nth_child(iter, 0) self.assertTrue(not child is None) parent = treestore.iter_parent(child) self.assertEqual( treestore.get_indexpath(parent), page) childpath = treestore.get_path(child) self.assertEqual( childpath, tuple(path) + (0,)) n = treestore.iter_n_children(iter) for i in range(1, n): child = treestore.iter_next(child) childpath = treestore.get_path(child) self.assertEqual( childpath, tuple(path) + (i,)) child = treestore.iter_next(child) self.assertTrue(child is None) else: self.assertTrue(not treestore.iter_has_child(iter)) child = treestore.iter_children(iter) self.assertTrue(child is None) child = treestore.iter_nth_child(iter, 0) self.assertTrue(child is None) self.assertTrue(npages > 10) # double check sanity of walk() method # Check if all the signals go OK treestore.disconnect_index() del treestore self.index.flush() treestore = PageTreeStore(self.index) treeview = PageTreeView(ui, treestore) self.index.update(callback=tests.gtk_process_events) # Try some TreeView methods path = Path('Test:foo') self.assertTrue(treeview.set_current_page(path)) # TODO assert something treepath = treeview.get_model().get_treepath(path) self.assertTrue(not treepath is None) col = treeview.get_column(0) treeview.row_activated(treepath, col) #~ treeview.emit('popup-menu') treeview.emit('insert-link', path) treeview.emit('copy') # Check if all the signals go OK in delete for page in reversed(list(self.notebook.walk())): # delete bottom up self.notebook.delete_page(page) tests.gtk_process_events() @tests.slowTest class TestPageTreeStoreFiles(TestPageTreeStore): def setUp(self): path = self.create_tmp_dir() self.notebook = tests.new_files_notebook(path) self.index = self.notebook.index def runTest(self): '''Test PageTreeStore index interface with files index''' TestPageTreeStore.runTest(self) class TestPageTreeView(tests.TestCase): # This class is intended for testing the widget user interaction, # interaction with the store is already tested by having the # view attached in TestPageTreeStore def setUp(self): self.ui = tests.MockObject() self.ui.page = Path('Test') self.notebook = tests.new_notebook() self.ui.notebook = self.notebook self.model = PageTreeStore(self.notebook.index) self.treeview = PageTreeView(self.ui, self.model) treepath = self.treeview.set_current_page(Path('Test')) self.treeview.select_treepath(treepath) def testContextMenu(self): menu = self.treeview.get_popup() # Check these do not cause errors - how to verify state ? tests.gtk_activate_menu_item(menu, _("Expand _All")) tests.gtk_activate_menu_item(menu, _("_Collapse All")) # Copy item tests.gtk_activate_menu_item(menu, 'gtk-copy') self.assertEqual(Clipboard.get_text(), 'Test') # Single click navigation, ... ? @tests.slowTest class TestSynchronization(tests.TestCase): def runTest(self): '''Test synchronization''' # Test if zim detects pages, that where created with another # zim instance and transfered to this instance with # dropbox or another file synchronization tool. # # The scenario is as follow: # 1) Page.txt is created in this instance # 2) Page/Subpage.txt is created in another instance # and copied into the notebook by the synchronization tool # 3) Zim runs a standard index update # Outcome should be that Page:Subpage shows up in the index # create notebook dir = Dir(self.create_tmp_dir()) init_notebook(dir, name='foo') notebook = Notebook(dir=dir) index = notebook.index index.update() # add page in this instance path = Path('Page') page = notebook.get_page(path) page.parse('wiki', 'nothing important') notebook.store_page(page) # check file exists self.assertTrue(dir.file('Page.txt').exists()) # check file is indexed self.assertTrue(page in list(index.list_all_pages())) # check attachment dir does not exist subdir = dir.subdir('Page') self.assertEqual(notebook.get_attachments_dir(page), subdir) self.assertFalse(subdir.exists()) for newfile, newpath in ( (subdir.file('NewSubpage.txt').path, Path('Page:NewSubpage')), (dir.file('Newtoplevel.txt').path, Path('Newtoplevel')), (dir.file('SomeDir/Dir/Newpage.txt').path, Path('SomeDir:Dir:Newpage')), ): # make sure ctime changed since last index import time time.sleep(2) # create new page without using zim classes self.assertFalse(os.path.isfile(newfile)) mydir = os.path.dirname(newfile) if not os.path.isdir(mydir): os.makedirs(mydir) fh = open(newfile, 'w') fh.write('Test 123\n') fh.close() self.assertTrue(os.path.isfile(newfile)) # simple index reload index.update() # check if the new page is found in the index self.assertTrue(newpath in list(index.list_all_pages())) class MockUI(tests.MockObject): page = None notebook = None zim-0.65/tests/clipboard.py0000664000175000017500000001456112374655231015607 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg #~ from __future__ import with_statement import tests import gtk import zim.formats from zim.gui.clipboard import * def get_clipboard_contents(format): '''Convenience function to get data from clipboard''' myclipboard = gtk.Clipboard() selection = myclipboard.wait_for_contents(format) return selection.data def set_clipboard_uris(*uris): '''Convenience function to put a file on the clipboard''' myclipboard = gtk.Clipboard() targets = [('text/uri-list', 0, 0)] def my_get_data(clipboard, selectiondata, id, file): selectiondata.set_uris(uris) def my_clear_data(*a): pass myclipboard.set_with_data(targets, my_get_data, my_clear_data, file) def set_clipboard_image(file): '''Convenience function to put image data on the clipboard''' myclipboard = gtk.Clipboard() targets = [('image/png', 0, 0)] def my_get_data(clipboard, selectiondata, id, file): pixbuf = gtk.gdk.pixbuf_new_from_file(file.path) selectiondata.set_pixbuf(pixbuf) def my_clear_data(*a): pass myclipboard.set_with_data(targets, my_get_data, my_clear_data, file) class TestClipboard(tests.TestCase): def setUp(self): path = self.get_tmp_name() self.notebook = tests.new_notebook(fakedir=path) def testCopyPasteText(self): text = u'test **123** \u2022' # text with non-ascii character Clipboard.set_text(text) result = Clipboard.get_text() self.assertEqual(result, text) self.assertTrue(isinstance(result, unicode)) def testCopyPasteFromParseTree(self): # parsetree -> parsetree for pagename in ('Test:wiki', 'roundtrip'): page = self.notebook.get_page(Path(pagename)) parsetree = page.get_parsetree() Clipboard.set_parsetree(self.notebook, page, parsetree) newtree = Clipboard.get_parsetree(self.notebook) self.assertEqual(newtree.tostring(), parsetree.tostring()) # setup parsetree input = 'some **bold** text\n' parser = zim.formats.get_format('wiki').Parser() parsetree = parser.parse(input) Clipboard.set_parsetree(self.notebook, page, parsetree) # parsetree -> text (plain & wiki preference) # Note that pasting partial text (without newline) is tested # in the pageview test. wanted = 'some bold text\n' text = Clipboard.get_text() self.assertEqual(text, wanted) Clipboard.set_parsetree(self.notebook, page, parsetree, format='wiki') wanted = 'some **bold** text\n' text = Clipboard.get_text() self.assertEqual(text, wanted) # parsetree -> html (unix & windows) wanted = '''\

    some bold text

    ''' self.assertEqual(get_clipboard_contents('text/html'), wanted) wanted = '''\ Version:1.0\r StartHTML:000000185\r EndHTML:000000513\r StartFragment:000000450\r EndFragment:000000481\r StartSelection:000000450\r EndSelection:000000481\r SourceURL:zim://copy-pase-buffer\r

    some bold text

    ''' self.assertEqual(get_clipboard_contents('HTML Format'), wanted) # Test clear Clipboard.clear() self.assertTrue(Clipboard.get_parsetree() is None) def testCopyPasteToParseTree(self): # text -> tree wanted = '''\nsome string''' Clipboard.set_text('some string') newtree = Clipboard.get_parsetree(self.notebook) self.assertEqual(newtree.tostring(), wanted) # file link -> tree page = self.notebook.get_page(Path('Test:wiki')) file = File('/foo/bar/baz.txt') set_clipboard_uris(file.uri) tree = Clipboard.get_parsetree(self.notebook, page) link = tree.find('link') rel_path = link.get('href') self.assertEqual(self.notebook.resolve_file(rel_path, page), file) file = File('./data/zim.png') # image file set_clipboard_uris(file.uri) tree = Clipboard.get_parsetree(self.notebook, page) img = tree.find('img') file_obj = img.get('_src_file') self.assertEqual(file_obj, file) rel_path = img.get('src') self.assertEqual(self.notebook.resolve_file(rel_path, page), file) # uri list (could also be file list) -> tree set_clipboard_uris('http://cpan.org', 'ftp://foo@test.org', 'user@mail.com') tree = Clipboard.get_parsetree(self.notebook, page) links = tree.findall('link') hrefs = [e.attrib['href'] for e in links] self.assertEqual(hrefs, ['http://cpan.org', 'ftp://foo@test.org', 'user@mail.com']) # image data -> tree page = self.notebook.get_page(Path('Test:wiki')) file = File('./data/zim.png') set_clipboard_image(file) tree = Clipboard.get_parsetree(self.notebook, page) img = tree.find('img') file_obj = img.get('_src_file') self.assertFalse(file_obj == file) self.assertTrue(file_obj.exists()) self.assertTrue(file_obj.isimage()) self.assertTrue(file_obj.path.endswith('.png')) rel_path = img.get('src') self.assertEqual(self.notebook.resolve_file(rel_path, page), file_obj) def testCopyPastePageLink(self): # pagelink -> uri list page = self.notebook.get_page(Path('Test:wiki')) Clipboard.set_pagelink(self.notebook, page) data = get_clipboard_contents(INTERNAL_PAGELIST_TARGET_NAME) self.assertEqual(data, 'Test:wiki\r\n') data = get_clipboard_contents(PAGELIST_TARGET_NAME) self.assertEqual(data, 'Unnamed Notebook?Test:wiki\r\n') # pagelink -> parsetree wanted = '''\n+wiki''' newtree = Clipboard.get_parsetree(self.notebook, Path('Test')) self.assertEqual(newtree.tostring(), wanted) # pagelink -> text text = Clipboard.get_text() self.assertEqual(text, 'Test:wiki') #~ def testCopyPasteFile(self): #~ assert False #~ def testCopyPasteUrl(self): #~ assert False # ClipboardManager.set_store # ClipboardStore read / write / list # ClipboardItem get / set / make permanent / drop # # Manager should be able to do paste-as, switching from plain text to wiki # Distinguishe between cut and copied items # # LP #XXX: selection gone from clipboard when leaving page # # HTML -> parsetree (need import) zim-0.65/tests/www.py0000664000175000017500000001144512411243105014453 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg from __future__ import with_statement import tests import sys import os from cStringIO import StringIO import logging import wsgiref.validate import wsgiref.handlers from zim.fs import File from zim.www import WWWInterface from zim.config import VirtualConfigManager # TODO how to test fetching from a socket while mainloop is running ? class Filter404(tests.LoggingFilter): logger = 'zim.www' message = '404 Not Found' @tests.slowTest class TestWWWInterface(tests.TestCase): def assertResponseWellFormed(self, response, expectbody=True): body = response.splitlines() header = [] while body: line = body.pop(0) if line == '': break else: header.append(line) self.assertTrue(header[0].startswith('HTTP/1.0 ')) self.assertTrue(len([l for l in header if l.startswith('Content-Type: ')]) == 1, 'Content-Type header present') self.assertTrue(len([l for l in header if l.startswith('Date: ')]) == 1, 'Date header present') if expectbody: text = '\n'.join(body) self.assertTrue(text and not text.isspace(), 'Repsonse has a body') return header, body def assertResponseOK(self, response, expectbody=True): header, body = self.assertResponseWellFormed(response, expectbody) self.assertEqual(header[0], 'HTTP/1.0 200 OK') self.assertTrue('Content-Type: text/html; charset="utf-8"' in header) return header, body def setUp(self): self.template = 'Default' self.file_not_found_paths = ['/Test', '/nonexistingpage.html', '/nonexisting/'] self.file_found_paths = ['/favicon.ico', '/+resources/checked-box.png'] def runTest(self): 'Test WWW interface' config = VirtualConfigManager() notebook = tests.new_notebook(fakedir=self.get_tmp_name()) notebook.index.update() interface = WWWInterface(notebook, config=config, template=self.template) validator = wsgiref.validate.validator(interface) def call(command, path): environ = { 'REQUEST_METHOD': command, 'SCRIPT_NAME': '', 'PATH_INFO': path, 'QUERY_STRING': '', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '80', 'SERVER_PROTOCOL': '1.0' } rfile = StringIO('') wfile = StringIO() handler = wsgiref.handlers.SimpleHandler(rfile, wfile, sys.stderr, environ) if os.name == 'nt': # HACK: on windows we have no file system encoding, # but use unicode instead for os API. # However wsgiref.validate fails on unicode param # in environmnet. for k, v in handler.os_environ.items(): if isinstance(v, unicode): handler.os_environ[k] = v.encode('utf-8') handler.run(validator) #~ print '>>>>\n', wfile.getvalue(), '<<<<' return wfile.getvalue() # index for path in ('/', '/Test/'): response = call('HEAD', path) self.assertResponseOK(response, expectbody=False) response = call('GET', path) #~ print '>'*80, '\n', response, '<'*80 self.assertResponseOK(response) self.assertTrue('
  • foo' in response) # page response = call('GET', '/Test/foo.html') self.assertResponseOK(response) self.assertTrue('

    Foo

    ' in response) # page not found with Filter404(): for path in self.file_not_found_paths: response = call('GET', path) header, body = self.assertResponseWellFormed(response) self.assertEqual(header[0], 'HTTP/1.0 404 Not Found') # favicon and other files for path in self.file_found_paths: response = call('GET', path) header, body = self.assertResponseWellFormed(response) self.assertEqual(header[0], 'HTTP/1.0 200 OK') #~ class TestWWWInterfaceTemplate(TestWWWInterface): #~ #~ def assertResponseOK(self, response, expectbody=True): #~ header, body = TestWWWInterface.assertResponseOK(self, response, expectbody) #~ if expectbody: #~ self.assertTrue('' in body, 'Template is used') #~ #~ def setUp(self): #~ TestWWWInterface.setUp(self) #~ self.template = 'Default' #~ self.file_not_found_paths.append('/+resources/foo/bar.png') #~ #~ def runTest(self): #~ 'Test WWW interface with a template.' #~ TestWWWInterface.runTest(self) class TestWWWInterfaceTemplateResources(TestWWWInterface): def assertResponseOK(self, response, expectbody=True): header, body = TestWWWInterface.assertResponseOK(self, response, expectbody) if expectbody: self.assertTrue('' in body, 'Template is used') self.assertTrue('src="/%2Bresrouces/foo/bar.png"' ''.join(body), 'Template is used') def setUp(self): TestWWWInterface.setUp(self) self.file = File('tests/data/templates/html/Default.html') self.template = self.file.path self.file_found_paths.append('/+resources/foo/bar.png') def runTest(self): 'Test WWW interface with a template with resources.' TestWWWInterface.runTest(self) zim-0.65/tests/sourceview.py0000664000175000017500000000302712614412356016032 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2014 Jaap Karssenberg from __future__ import with_statement import tests from tests.pageview import setUpPageView from zim.config import ConfigDict from zim.formats import ParseTree, StubLinker from zim.formats.html import Dumper as HtmlDumper from zim.plugins.sourceview import * class TestMainWindowExtension(tests.TestCase): def runTest(self): window = tests.MockObject() window.pageview = setUpPageView() window.ui = tests.MockObject() window.ui.uimanager = tests.MockObject() window.ui.uistate = ConfigDict() window.ui.mainwindow = window # XXX plugin = SourceViewPlugin() extension = MainWindowExtension(plugin, window) with tests.DialogContext(self.checkInsertCodeBlockDialog): extension.insert_sourceview() tree = window.pageview.get_parsetree() #~ print tree.tostring() obj = tree.find('object') self.assertTrue(obj.attrib['type'] == 'code') def checkInsertCodeBlockDialog(self, dialog): self.assertIsInstance(dialog, InsertCodeBlockDialog) dialog.form['lang'] = LANGUAGES.keys()[0] dialog.assert_response_ok() class TestSourceViewObject(tests.TestCase): def testDumpHtml(self): xml = '''\ def foo(a, b): print "FOO", a >= b ''' tree = ParseTree().fromstring(xml) dumper = HtmlDumper(StubLinker()) html = dumper.dump(tree) #~ print '>>', html self.assertIn('\tprint "FOO", a >= b\n', html) zim-0.65/tests/applications.py0000664000175000017500000003214012604257423016324 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg from __future__ import with_statement import tests import os import sys import gtk from zim.gui.applications import * from zim.notebook import Path from zim.fs import Dir, TmpFile @tests.slowTest class TestXDGMimeInfo(tests.TestCase): def runTest(self): dir = Dir('./data/pixmaps') for i, filename in enumerate(dir.list()): file = dir.file(filename) icon = get_mime_icon(file, THUMB_SIZE_NORMAL) self.assertIsInstance(icon, gtk.gdk.Pixbuf) desc = get_mime_description(file.get_mimetype()) self.assertIsInstance(desc, basestring) self.assertTrue(len(desc) > 5) self.assertTrue(i > 3) def replace(l, old, new): l = list(l) while old in l: i = l.index(old) l[i] = new return tuple(l) class TestApplications(tests.TestCase): def testParseExec(self): '''Test parsing of .desktop Exec strings''' entry = DesktopEntryDict() entry['Desktop Entry']['Name'] = 'Foo' for app, args, wanted in ( # Test cases should be compliant with spec ('foo %f', (), ('foo',)), ('foo %f %i', (), ('foo',)), # no icon set ('foo %f %k', (), ('foo', '')), # no source set ('foo %f %c', (), ('foo', 'Foo')), ('foo', ('bar',), ('foo', 'bar')), ('foo', ('bar baz',), ('foo', 'bar baz')), ('foo "hmm ja"', ('bar',), ('foo', 'hmm ja', 'bar')), ('foo %f', ('bar baz',), ('foo', 'bar baz')), ('foo %F', ('bar baz',), ('foo', 'bar baz')), ('foo %u', ('bar baz',), ('foo', 'bar baz')), ('foo %U', ('bar baz',), ('foo', 'bar baz')), ('foo %F', ('bar', 'baz'), ('foo', 'bar', 'baz')), ('foo %F hmm', ('bar', 'baz'), ('foo', 'bar', 'baz', 'hmm')), ('foo %U', ('bar', 'baz'), ('foo', 'bar', 'baz')), ('foo %U hmm', ('bar', 'baz'), ('foo', 'bar', 'baz', 'hmm')), ('foo %f', (File('/foo/bar'),), ('foo', '/foo/bar')), ('foo %u', (File('/foo/bar'),), ('foo', 'file:///foo/bar')), ('foo %F', (File('/foo/bar'),), ('foo', '/foo/bar')), ('foo %U', (File('/foo/bar'),), ('foo', 'file:///foo/bar')), ): if os.name == 'nt': wanted = replace(wanted, '/foo/bar', r'C:\foo\bar') wanted = replace(wanted, 'file:///foo/bar', r'file:///C:/foo/bar') #print app, args entry['Desktop Entry']['Exec'] = app result = entry.parse_exec(args) self.assertEqual(result, wanted) cwd, argv = entry._checkargs(None, args) self.assertEqual(tuple(a.decode(zim.fs.ENCODING) for a in argv), wanted) entry['Desktop Entry']['Icon'] = 'xxx' entry.file = File('/foo.desktop') for app, args, wanted in ( # Test cases should be compliant with spec ('foo %f %i', (), ('foo', '--icon', 'xxx')), ('foo %f %k', (), ('foo', '/foo.desktop')), ('foo %f %c', (), ('foo', 'Foo')), ): if os.name == 'nt': wanted = replace(wanted, '/foo.desktop', r'C:\foo.desktop') #print app, args entry['Desktop Entry']['Exec'] = app result = entry.parse_exec(args) self.assertEqual(result, wanted) def testPythonCmd(self): app = Application('foo.py') cwd, argv = app._checkargs(None, ()) exe = argv[0].decode(zim.fs.ENCODING) cmd = argv[1].decode(zim.fs.ENCODING) self.assertEqual(exe, sys.executable) self.assertEqual(cmd, 'foo.py') sys.frozen = True try: cwd, argv = app._checkargs(None, ()) self.assertEqual(argv, ['foo.py']) except: del sys.frozen raise else: del sys.frozen # TODO fully test _decode_value # test e.g. values with '"' or '\t' in a string # see that json.loads does what it is supposed to do @tests.slowTest class TestApplicationManager(tests.TestCase): def testGetMimeType(self): for obj, mimetype in ( (File('README.txt'), 'text/plain'), ('README.txt', 'text/plain'), ('ssh://host', 'x-scheme-handler/ssh'), ('http://host', 'x-scheme-handler/http'), ('README.html', 'text/html'), ('mailto:foo@bar.org', 'x-scheme-handler/mailto'), ): self.assertEqual(get_mimetype(obj), mimetype) def testGetSetApplications(self): # Typically a system will have multiple programs installed for # text/plain and text/html, but do not rely on them for # testing, so create our own first to test. #~ print XDG_DATA_HOME, XDG_DATA_DIRS manager = ApplicationManager() ## Test Create & Get entry_text = manager.create('text/plain', 'Test_Entry_Text', 'test_text 123', NoDisplay=False) entry_html = manager.create('text/html', 'Test_Entry_HTML', 'test_html %u', NoDisplay=False) entry_url = manager.create('x-scheme-handler/ssh', 'Test_Entry_SSH', 'test_ssh %u', NoDisplay=False) for entry in (entry_text, entry_html, entry_url): self.assertTrue(entry.file.exists()) self.assertEqual(manager.get_application(entry.key), entry) self.assertFalse(entry['Desktop Entry']['NoDisplay']) ## Test Set & Get Default defaults = XDG_DATA_HOME.file('applications/defaults.list') self.assertFalse(defaults.exists()) default = manager.get_default_application('text/plain') self.assertIsInstance(default, (None.__class__, DesktopEntryFile)) # system default or None manager.set_default_application('text/plain', entry_html) # create manager.set_default_application('text/plain', entry_text) # update self.assertTrue(defaults.exists()) self.assertEqual(defaults.read(), '[Default Applications]\n' 'text/plain=test_entry_text-usercreated.desktop\n' ) self.assertEqual(manager.get_default_application('text/plain'), entry_text) manager.set_default_application('text/plain', None) self.assertEqual(defaults.read(), '[Default Applications]\n' ) self.assertNotEqual(manager.get_default_application('text/plain'), entry_text) ## Test listing #~ print manager.list_applications('text/plain') applications = manager.list_applications('text/plain') self.assertGreaterEqual(len(applications), 1) self.assertIn(entry_text, applications) #~ print manager.list_applications('text/html') for mimetype in ('text/html', 'x-scheme-handler/http'): applications = manager.list_applications(mimetype) self.assertGreaterEqual(len(applications), 1) self.assertIn(entry_html, applications) #~ print manager.list_applications('text/plain') applications = manager.list_applications('x-scheme-handler/ssh') self.assertGreaterEqual(len(applications), 1) self.assertIn(entry_url, applications) ## Increase coverage self.assertIsInstance(manager.get_application('webbrowser'), WebBrowser) self.assertIsInstance(manager.get_application('startfile'), StartFile) self.assertIsNone(manager.get_application('non_existing_application')) @tests.slowTest class TestCustomTools(tests.TestCase): def testManager(self): '''Test CustomToolManager API''' # initialize the list manager = CustomToolManager() self.assertEqual(list(manager), []) self.assertEqual(list(manager.names), []) # add a tool properties = { 'Name': 'Foo', 'Comment': 'Test 1 2 3', 'Icon': '', 'X-Zim-ExecTool': 'foo %t "quoted"', 'X-Zim-ReadOnly': False, 'X-Zim-ShowInToolBar': True, } tool = manager.create(**properties) self.assertEqual(list(manager), [tool]) self.assertEqual(list(manager.names), ['foo-usercreated']) self.assertTrue(tool.isvalid) self.assertEqual(tool.name, 'Foo') self.assertEqual(tool.comment, 'Test 1 2 3') self.assertFalse(tool.isreadonly) self.assertTrue(tool.showintoolbar) self.assertTrue(tool.get_pixbuf(gtk.ICON_SIZE_MENU)) self.assertEqual(tool.showincontextmenu, 'Text') # Auto generated # test file saved correctly #~ from pprint import pprint #~ pprint(tool) lines = tool.dump() self.assertTrue(len(lines) > 5) lines = tool.file.readlines() self.assertTrue(len(lines) > 5) # refresh list manager = CustomToolManager() self.assertEqual(list(manager), [tool]) self.assertEqual(list(manager.names), ['foo-usercreated']) # add a second tool tool1 = tool properties = { 'Name': 'Foo', 'Comment': 'Test 1 2 3', 'Icon': None, 'X-Zim-ExecTool': 'foo %f', 'X-Zim-ReadOnly': False, 'X-Zim-ShowInToolBar': True, } tool = manager.create(**properties) self.assertEqual(list(manager), [tool1, tool]) self.assertEqual(list(manager.names), ['foo-usercreated', 'foo-usercreated-1']) self.assertTrue(tool.isvalid) self.assertEqual(tool.name, 'Foo') self.assertEqual(tool.comment, 'Test 1 2 3') self.assertFalse(tool.isreadonly) self.assertTrue(tool.showintoolbar) self.assertTrue(tool.get_pixbuf(gtk.ICON_SIZE_MENU)) self.assertEqual(tool.showincontextmenu, 'Page') # Auto generated # switch order i = manager.index(tool) self.assertTrue(i == 1) manager.reorder(tool, 0) i = manager.index(tool) self.assertTrue(i == 0) self.assertEqual(list(manager.names), ['foo-usercreated-1', 'foo-usercreated']) # delete file = tool1.file self.assertTrue(file.exists()) manager.delete(tool1) self.assertEqual(list(manager.names), ['foo-usercreated-1']) self.assertFalse(file.exists()) def testParseExec(self): '''Test parsing of custom tool Exec strings''' # %f for source file as tmp file current page # %d for attachment directory # %s for real source file (if any) # %n for notebook location (file or directory) # %D for document root # %t for selected text or word under cursor # %T for selected text or word under cursor with wiki format path = self.get_tmp_name() notebook = tests.new_notebook(fakedir=path) page = notebook.get_page(Path('Test:Foo')) pageview = StubPageView() args = (notebook, page, pageview) tmpfile = TmpFile('tmp-page-source.txt').path dir = notebook.dir tool = CustomToolDict() tool.update( { 'Name': 'Test', 'Comment': 'Test 1 2 3', 'X-Zim-ExecTool': 'foo', } ) for cmd, wanted in ( ('foo %f', ('foo', tmpfile)), ('foo %d', ('foo', dir.subdir('Test/Foo').path)), ('foo %s', ('foo', '')), # no file source ('foo %n', ('foo', dir.path)), ('foo %D', ('foo', '')), # no document root ('foo %t', ('foo', 'FooBar')), ('foo %T', ('foo', '**FooBar**')), ): #~ print '>>>', cmd tool['Desktop Entry']['X-Zim-ExecTool'] = cmd self.assertEqual(tool.parse_exec(args), wanted) #~ class TestOpenWithMenu(tests.TestCase): class Foo(object): # FIXME - this test blocks on full test runs ?? def runTest(self): # Create some custom entries - should NOT appear in menu manager = ApplicationManager() entry_text = manager.create('text/plain', 'Test_Entry_Text', 'test_text 123') entry_url = manager.create('x-scheme-handler/ssh', 'Test_Entry_SSH', 'test_ssh %u') for entry in (entry_text, entry_url): self.assertTrue(entry.file.exists()) self.assertEqual(manager.get_application(entry.key), entry) self.assertTrue(entry['Desktop Entry']['NoDisplay']) # do not show custom items in menus # Mock main ui object ui = tests.MockObject() ui.windows = [] # Check menu for obj, mimetype, test_entry in ( (File('README.txt'), 'text/plain', entry_text), ('ssh://host', 'x-scheme-handler/ssh', entry_url), ): manager.set_default_application(mimetype, test_entry) menu = OpenWithMenu(ui, obj) self.assertEqual(menu.mimetype, mimetype) for item in menu.get_children(): if hasattr(item, 'entry'): self.assertFalse(item.entry['Desktop Entry'].get('NoDisplay', False), msg='Entry %s should not be in menu' % item.entry) def test_configure_applications_dialog(dialog): self.assertIsInstance(dialog, CustomizeOpenWithDialog) # test default displays as set above active = dialog.default_combo.get_active() self.assertEqual(active, test_entry) self.assertEqual( manager.get_default_application(mimetype).key, test_entry.key ) # test changing to system default and back last = len(dialog.default_combo.get_model()) - 1 dialog.default_combo.set_active(last) active = dialog.default_combo.get_active() self.assertIsInstance(active, SystemDefault) default = manager.get_default_application(mimetype) self.assertTrue(default is None or default.key != test_entry.key) dialog.default_combo.set_active(0) active = dialog.default_combo.get_active() self.assertEqual(active, test_entry) self.assertEqual( manager.get_default_application(mimetype).key, test_entry.key ) # trigger new app dialog and check new default set dialog.on_add_application(None) active = dialog.default_combo.get_active() self.assertEqual(active.name, 'Test New App Dialog') self.assertEqual( manager.get_default_application(mimetype).key, active.key ) def test_new_app_dialog(dialog): self.assertIsInstance(dialog, AddApplicationDialog) dialog.form['name'] = 'Test New App Dialog' dialog.form['exec'] = 'Test 123' dialog.form['default'] = True entry = dialog.assert_response_ok() self.assertTrue(entry.file.exists()) self.assertTrue(entry.nodisplay) # implied by default = True manager = ApplicationManager() self.assertEqual(manager.get_default_application(mimetype), entry) with tests.DialogContext( test_configure_applications_dialog, test_new_app_dialog ): tests.gtk_activate_menu_item(menu, menu.CUSTOMIZE) class StubPageView(object): def get_selection(self, format=None): return None def get_word(self, format=None): if format: return '**FooBar**' else: return 'FooBar' if __name__ == '__main__': import unittest unittest.main() zim-0.65/tests/data/0000775000175000017500000000000012615422672014177 5ustar jaapjaap00000000000000zim-0.65/tests/data/formats/0000775000175000017500000000000012615422672015652 5ustar jaapjaap00000000000000zim-0.65/tests/data/formats/README.txt0000664000175000017500000000046212374655231017353 0ustar jaapjaap00000000000000This folder contains an example page in various formats for testing the conversions from one format to another. In order to update the contents you typically make changes to "wiki.txt" and run update.sh to update the other files. MAKE SURE THE UPDATES ARE CORRECT by inspecting the diffs very carefully! zim-0.65/tests/data/formats/equation001.tex0000664000175000017500000000003012374655231020434 0ustar jaapjaap00000000000000\int \frac{1}{x} \, d x zim-0.65/tests/data/formats/export.rst0000664000175000017500000001015412521361062017715 0ustar jaapjaap00000000000000Head 1 ====== Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. head 2 ------ **bold**, *italic* and underline and ``verbatim`` and also strike through This is not formatted: *bold*, /italic/ / * *^%#@#$#!@)_!)_ & <> "" Some sub- and superscript like x\ :sup:`2`\ and H\ :sub:`2`\ O And some empty space here: head 3 ^^^^^^ `foo `_ links to page in the current namespace or parents `:foo <:foo>`_ links to page in the root namespace `+foo <+foo>`_ links to page in a subnamespace `bar `_ links to "foo" but display "bar" `:foo:bar <:foo:bar>`_ `./file.png <./file.png>`_ `file:///etc/passwd `_ `Foo `_`Bar `_ `mailto:foo@bar.org `_ `wp?Test `_ External links like `http://nongnu.org `_ and `foo@bar.org `_ are also supported [not:a:link] .. image:: ./foobar.png .. image:: ./foobar.png :height: 50 .. image:: ../my-image.png :alt: Foo Bar :width: 600 .. image:: my-image.png :href: Foo .. image:: ../my-image.png :alt: Foo Bar :href: :foo:bar :width: 600 .. image:: ./equation001.png :type: equation This equation has a source .tex file .. image:: ./equation002.png :type: equation for this one it is missing {./Not/an/image.png} Tags: @foo @bar head 4 """""" - item 1 - item 2 - item 3 - item a - item b - item 4 Indented list: - item 1 - item 2 - item 3 - item a - item b - item 4 TODO list: - ☐ foo - ☑ bar - ☑ sub item 1 - Some normal bullet - ☑ sub item 2 - ☒ baz A numbered list: 1. foo 2. bar a. sub list b. here 3. hmmm Start with number other that 1/a/A C. foo D. bar 3. sub item start with 3 E. baz head 5 """""" *some verbatim blocks*: :: Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. :: Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. :: def foo(self, bar, baz): '''Some doc string here @param bar: value for bar @param baz: value for baz @returns: foo ''' returen "foo" + bar % baz Internationalization -------------------- 中文 ^^ This section has a chinese heading Lines below are in right to left script: חדו"א מד"ר מכניקת מוצקים 2 A line in English, should be left aligned. דינמיקה aaa Some Objects ------------ :: def dump(): for i in range(1, 5): print i :: Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. A table ------- +------------------+--------------------------------+------------------------+ | H1 | H2 h2 | H3 | +==================+================================+========================+ | Column A1 | Column A2 | a | +------------------+--------------------------------+------------------------+ | a very long cell | **bold text** | b | +------------------+--------------------------------+------------------------+ | hyperlinks | `wp?wiki `_ | `Xorg `_ | +------------------+--------------------------------+------------------------+ ==== This is not a header That's all ... zim-0.65/tests/data/formats/parsetree.xml0000664000175000017500000001204612521361062020360 0ustar jaapjaap00000000000000 Head 1

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    head 2

    bold, italic and underline and verbatim and also strike through

    This is not formatted: *bold*, /italic/ / * *^%#@#$#!@)_!)_ & <> ""

    Some sub- and superscript like x2 and H2O

    And some empty space here:

    head 3

    foo links to page in the current namespace or parents :foo links to page in the root namespace +foo links to page in a subnamespace bar links to "foo" but display "bar"

    :foo:bar ./file.png file:///etc/passwd FooBar

    mailto:foo@bar.org wp?Test

    External links like http://nongnu.org and foo@bar.org are also supported

    [not:a:link]

    Foo Bar Foo Bar

    This equation has a source .tex file for this one it is missing

    {./Not/an/image.png}

    Tags: @foo @bar

    head 4

    • item 1
    • item 2
    • item 3
      • item a
      • item b
    • item 4

    Indented list:

    • item 1
    • item 2
    • item 3
      • item a
      • item b
    • item 4

    TODO list:

    • foo
    • bar
      • sub item 1
        • Some normal bullet
      • sub item 2
    • baz

    A numbered list:

    1. foo
    2. bar
      1. sub list
      2. here
    3. hmmm

    Start with number other that 1/a/A

    1. foo
    2. bar
      1. sub item start with 3
    3. baz

    head 5

    some verbatim blocks:

    Sing, O goddess, the rage of
    Achilles son of Peleus, that
    brought countless ills upon
    the Achaeans.
    
    Sing, O goddess, the rage of
    Achilles son of Peleus, that
    brought countless ills upon
    the Achaeans.
    
    def foo(self, bar, baz):
    	'''Some doc string here
    	@param bar: value for bar
    	@param baz: value for baz
    	@returns: foo
    	'''
    	returen "foo" + bar % baz
    
    Internationalization 中文

    This section has a chinese heading

    Lines below are in right to left script:

    חדו"א מד"ר מכניקת מוצקים 2 A line in English, should be left aligned. דינמיקה

    aaa

    Some Objects def dump(): for i in range(1, 5): print i Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. A table
    H1H2 h2H3
    Column A1Column A2aa very long cellbold textbhyperlinkswp?wikiXorg

    ==== This is not a header

    That's all ...

    zim-0.65/tests/data/formats/export.tex0000664000175000017500000001136112521361062017706 0ustar jaapjaap00000000000000\chapter{Head 1} Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \section{head 2} \textbf{bold}, \emph{italic} and \uline{underline} and \lstinline+verbatim+ and also \sout{strike through} This is not formatted: *bold*, /italic/ / * *\^{}\%\# @\# \$ \# !@)\_!)\_ \$ \textless{}\textgreater{} "" Some sub- and superscript like x$^{2}$ and H$_{2}$O And some empty space here: \subsection{head 3} \href{foo}{foo} links to page in the current namespace or parents \href{:foo}{:foo} links to page in the root namespace \href{+foo}{+foo} links to page in a subnamespace \href{foo}{bar} links to "foo" but display "bar" \href{:foo:bar}{:foo:bar} \href{./file.png}{./file.png} \href{file:///etc/passwd}{file:///etc/passwd} \href{Foo}{Foo}\href{Bar}{Bar} \href{mailto:foo@bar.org}{mailto:foo@bar.org} \href{interwiki:wp?Test}{wp?Test} External links like \href{http://nongnu.org}{http://nongnu.org} and \href{mailto:foo@bar.org}{foo@bar.org} are also supported [not:a:link] \includegraphics[]{./foobar.png} \includegraphics[height=0.520833in, keepaspectratio=true]{./foobar.png} \includegraphics[width=6.250000in, keepaspectratio=true]{../my-image.png} \href{Foo}{\includegraphics[]{my-image.png}} \href{:foo:bar}{\includegraphics[width=6.250000in, keepaspectratio=true]{../my-image.png}} \begin{math} \int \frac{1}{x} \, d x \end{math} This equation has a source .tex file \includegraphics[]{./equation002.png} for this one it is missing {./Not/an/image.png} Tags: @foo @bar \subsubsection{head 4} \begin{itemize} \item item 1 \item item 2 \item item 3 \begin{itemize} \item item a \item item b \end{itemize} \item item 4 \end{itemize} Indented list: \begin{itemize} \item item 1 \item item 2 \item item 3 \begin{itemize} \item item a \item item b \end{itemize} \item item 4 \end{itemize} TODO list: \begin{itemize} \item[\Square] foo \item[\CheckedBox] bar \begin{itemize} \item[\CheckedBox] sub item 1 \begin{itemize} \item Some normal bullet \end{itemize} \item[\CheckedBox] sub item 2 \end{itemize} \item[\XBox] baz \end{itemize} A numbered list: \begin{enumerate}[1] \item foo \item bar \begin{enumerate}[a] \item sub list \item here \end{enumerate} \item hmmm \end{enumerate} Start with number other that 1/a/A \begin{enumerate}[A] \setcounter{enumi}{2} \item foo \item bar \begin{enumerate}[1] \setcounter{enumi}{2} \item sub item start with 3 \end{enumerate} \item baz \end{enumerate} \paragraph{head 5} \emph{some verbatim blocks}: \begin{lstlisting} Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. \end{lstlisting} \begin{lstlisting} Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. \end{lstlisting} \begin{lstlisting} def foo(self, bar, baz): '''Some doc string here @param bar: value for bar @param baz: value for baz @returns: foo ''' returen "foo" + bar \% baz \end{lstlisting} \section{Internationalization} \subsection{中文} This section has a chinese heading Lines below are in right to left script: חדו"א מד"ר מכניקת מוצקים 2 A line in English, should be left aligned. דינמיקה aaa \section{Some Objects} \begin{lstlisting} def dump(): for i in range(1, 5): print i \end{lstlisting} \begin{lstlisting} Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. \end{lstlisting} \section{A table} \begin{tabular}{ |c|r|l| } \hline H1 & H2 h2 & H3 \tabularnewline \hline \hline Column A1 & Column A2 & a \tabularnewline \hline a very long cell & \textbf{bold text} & b \tabularnewline \hline hyperlinks & \href{interwiki:wp?wiki}{wp?wiki} & \href{http://x.org}{Xorg} \tabularnewline \hline \end{tabular} ==== This is not a header That's all ... zim-0.65/tests/data/formats/plain.txt0000664000175000017500000000636012521361062017512 0ustar jaapjaap00000000000000Head 1 ====== Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. head 2 ------ bold, italic and underline and verbatim and also strike through This is not formatted: *bold*, /italic/ / * *^%#@#$#!@)_!)_ & <> "" Some sub- and superscript like x2 and H2O And some empty space here: ### head 3 foo links to page in the current namespace or parents :foo links to page in the root namespace +foo links to page in a subnamespace bar links to "foo" but display "bar" :foo:bar ./file.png file:///etc/passwd FooBar mailto:foo@bar.org wp?Test External links like http://nongnu.org and foo@bar.org are also supported [not:a:link] ./foobar.png ./foobar.png Foo Bar my-image.png Foo Bar ./equation001.png This equation has a source .tex file ./equation002.png for this one it is missing {./Not/an/image.png} Tags: @foo @bar #### head 4 * item 1 * item 2 * item 3 * item a * item b * item 4 Indented list: * item 1 * item 2 * item 3 * item a * item b * item 4 TODO list: [ ] foo [*] bar [*] sub item 1 * Some normal bullet [*] sub item 2 [x] baz A numbered list: 1. foo 2. bar a. sub list b. here 3. hmmm Start with number other that 1/a/A C. foo D. bar 3. sub item start with 3 E. baz ##### head 5 some verbatim blocks: Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. def foo(self, bar, baz): '''Some doc string here @param bar: value for bar @param baz: value for baz @returns: foo ''' returen "foo" + bar % baz Internationalization -------------------- ### 中文 This section has a chinese heading Lines below are in right to left script: חדו"א מד"ר מכניקת מוצקים 2 A line in English, should be left aligned. דינמיקה aaa Some Objects ------------ def dump(): for i in range(1, 5): print i Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. A table ------- +------------------+-----------+------+ | H1 | H2 h2 | H3 | +==================+===========+======+ | Column A1 | Column A2 | a | +------------------+-----------+------+ | a very long cell | bold text | b | +------------------+-----------+------+ | hyperlinks | wp?wiki | Xorg | +------------------+-----------+------+ ==== This is not a header That's all ... zim-0.65/tests/data/formats/wiki.txt0000664000175000017500000000703412521361062017351 0ustar jaapjaap00000000000000====== Head 1 ====== Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ===== head 2 ===== **bold**, //italic// and __underline__ and ''verbatim'' and also ~~strike through~~ This is not formatted: *bold*, /italic/ / * *^%#@#$#!@)_!)_ & <> "" Some sub- and superscript like x^{2} and H_{2}O And some empty space here: ==== head 3 ==== [[foo]] links to page in the current namespace or parents [[:foo]] links to page in the root namespace [[+foo]] links to page in a subnamespace [[foo|bar]] links to "foo" but display "bar" [[:foo:bar]] [[./file.png]] file:///etc/passwd [[Foo]][[Bar]] mailto:foo@bar.org [[wp?Test]] External links like http://nongnu.org and foo@bar.org are also supported [not:a:link] {{./foobar.png}} {{./foobar.png?height=50}} {{../my-image.png?width=600|Foo Bar}} {{my-image.png?href=Foo}} {{../my-image.png?href=%3Afoo%3Abar&width=600|Foo Bar}} {{./equation001.png?type=equation}} This equation has a source .tex file {{./equation002.png?type=equation}} for this one it is missing {./Not/an/image.png} Tags: @foo @bar === head 4 === * item 1 * item 2 * item 3 * item a * item b * item 4 Indented list: * item 1 * item 2 * item 3 * item a * item b * item 4 TODO list: [ ] foo [*] bar [*] sub item 1 * Some normal bullet [*] sub item 2 [x] baz A numbered list: 1. foo 2. bar a. sub list b. here 3. hmmm Start with number other that 1/a/A C. foo D. bar 3. sub item start with 3 E. baz == head 5 == //some verbatim blocks//: ''' Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. ''' ''' Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. ''' ''' def foo(self, bar, baz): '''Some doc string here @param bar: value for bar @param baz: value for baz @returns: foo ''' returen "foo" + bar % baz ''' ===== Internationalization ===== ==== 中文 ==== This section has a chinese heading Lines below are in right to left script: חדו"א מד"ר מכניקת מוצקים 2 A line in English, should be left aligned. דינמיקה aaa ===== Some Objects ===== {{{code: lang="python" linenumbers="true" def dump(): for i in range(1, 5): print i }}} {{{nonexistingobjecttype: foo="bar" Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. }}} ===== A table ===== | H1 <| H2 h2 | H3 <| |:----------------:|--------------:|:-----------------------| | Column A1 | Column A2 | a | | a very long cell | **bold text** | b | | hyperlinks | [[wp?wiki]] | [[http://x.org\|Xorg]] | ==== This is not a header That's all ... zim-0.65/tests/data/formats/export.markdown0000664000175000017500000000674112521361062020736 0ustar jaapjaap00000000000000Head 1 ====== Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. head 2 ------ **bold**, *italic* and __underline__ and ``verbatim`` and also ~~strike through~~ This is not formatted: *bold*, /italic/ / * *^%#@#$#!@)_!)_ & <> "" Some sub- and superscript like x^2^ and H~2~O And some empty space here: ### head 3 [foo](foo) links to page in the current namespace or parents [:foo](:foo) links to page in the root namespace [+foo](+foo) links to page in a subnamespace [bar](foo) links to "foo" but display "bar" [:foo:bar](:foo:bar) [./file.png](./file.png) [Foo](Foo)[Bar](Bar) [wp?Test](interwiki:wp?Test) External links like and [foo@bar.org](mailto:foo@bar.org) are also supported [not:a:link] ![](./foobar.png) ![](./foobar.png) ![Foo Bar](../my-image.png) ![](my-image.png) ![Foo Bar](../my-image.png) ![](./equation001.png) This equation has a source .tex file ![](./equation002.png) for this one it is missing {./Not/an/image.png} Tags: @foo @bar #### head 4 * item 1 * item 2 * item 3 * item a * item b * item 4 Indented list: * item 1 * item 2 * item 3 * item a * item b * item 4 TODO list: * ☐ foo * ☑ bar * ☑ sub item 1 * Some normal bullet * ☑ sub item 2 * ☒ baz A numbered list: 1. foo 2. bar a. sub list b. here 3. hmmm Start with number other that 1/a/A C. foo D. bar 3. sub item start with 3 E. baz ##### head 5 *some verbatim blocks*: Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. def foo(self, bar, baz): '''Some doc string here @param bar: value for bar @param baz: value for baz @returns: foo ''' returen "foo" + bar % baz Internationalization -------------------- ### 中文 This section has a chinese heading Lines below are in right to left script: חדו"א מד"ר מכניקת מוצקים 2 A line in English, should be left aligned. דינמיקה aaa Some Objects ------------ def dump(): for i in range(1, 5): print i Sing, O goddess, the rage of Achilles son of Peleus, that brought countless ills upon the Achaeans. A table ------- | H1 | H2 h2 | H3 | |:----------------:|-----------------------------:|:---------------------| | Column A1 | Column A2 | a | | a very long cell | **bold text** | b | | hyperlinks | [wp?wiki](interwiki:wp?wiki) | [Xorg](http://x.org) | ==== This is not a header That's all ... zim-0.65/tests/data/formats/export.html0000664000175000017500000001321312521361062020050 0ustar jaapjaap00000000000000

    Head 1

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
    ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
    aliquip ex ea commodo consequat. Duis aute irure dolor in
    reprehenderit in voluptate velit esse cillum dolore eu fugiat
    nulla pariatur. Excepteur sint occaecat cupidatat non proident,
    sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
    ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
    aliquip ex ea commodo consequat. Duis aute irure dolor in
    reprehenderit in voluptate velit esse cillum dolore eu fugiat
    nulla pariatur. Excepteur sint occaecat cupidatat non proident,
    sunt in culpa qui officia deserunt mollit anim id est laborum.

    head 2


    bold, italic and underline and verbatim
    and also strike through

    This is not formatted: *bold*, /italic/ / * *^%#@#$#!@)_!)_ & <> ""

    Some sub- and superscript like x2 and H2O

    And some empty space here:



    head 3

    foo links to page in the current namespace or parents
    :foo links to page in the root namespace
    +foo links to page in a subnamespace
    bar links to "foo" but display "bar"

    :foo:bar ./file.png file:///etc/passwd
    FooBar

    mailto:foo@bar.org
    wp?Test

    External links like http://nongnu.org and foo@bar.org are also supported

    [not:a:link]




    Foo Bar

    Foo Bar

    This equation has a source .tex file
    for this one it is missing

    {./Not/an/image.png}

    Tags: @foo @bar


    head 4


    • item 1
    • item 2
    • item 3
      • item a
      • item b
    • item 4


    Indented list:

    • item 1
    • item 2
    • item 3
      • item a
      • item b
    • item 4


    TODO list:

    • foo
    • bar
      • sub item 1
        • Some normal bullet
      • sub item 2
    • baz


    A numbered list:

    1. foo
    2. bar
      1. sub list
      2. here
    3. hmmm


    Start with number other that 1/a/A

    1. foo
    2. bar
      1. sub item start with 3
    3. baz

    head 5

    some verbatim blocks:

    Sing, O goddess, the rage of
    Achilles son of Peleus, that
    brought countless ills upon
    the Achaeans.
    
    Sing, O goddess, the rage of
    Achilles son of Peleus, that
    brought countless ills upon
    the Achaeans.
    
    def foo(self, bar, baz):
    	'''Some doc string here
    	@param bar: value for bar
    	@param baz: value for baz
    	@returns: foo
    	'''
    	returen "foo" + bar % baz
    

    Internationalization


    中文

    This section has a chinese heading

    Lines below are in right to left script:

    חדו"א
    מד"ר
    מכניקת מוצקים 2
    A line in English, should be left aligned.
    דינמיקה

    aaa


    Some Objects


    def dump():
    	for i in range(1, 5):
    		print i
    

    Sing, O goddess, the rage of
    Achilles son of Peleus, that
    brought countless ills upon
    the Achaeans.
    

    A table


    H1 H2 h2 H3
    Column A1 Column A2 a
    a very long cell bold text b
    hyperlinks wp?wiki Xorg

    ====
    This is not a header

    That's all ...

    zim-0.65/tests/data/formats/update.sh0000775000175000017500000000070612374655231017477 0ustar jaapjaap00000000000000#!/bin/sh P='tests/data/formats' cat $P/wiki.txt | python -m zim.formats wiki > $P/parsetree.xml cat $P/wiki.txt | python -m zim.formats wiki plain $P > $P/plain.txt cat $P/wiki.txt | python -m zim.formats wiki html $P > $P/export.html cat $P/wiki.txt | python -m zim.formats wiki latex $P > $P/export.tex cat $P/wiki.txt | python -m zim.formats wiki markdown $P > $P/export.markdown cat $P/wiki.txt | python -m zim.formats wiki rst $P > $P/export.rst zim-0.65/tests/data/byteordermark.txt0000664000175000017500000000001212374655231017604 0ustar jaapjaap00000000000000foobar zim-0.65/tests/data/notebook-list-old-format.list0000664000175000017500000000013312374655231021725 0ustar jaapjaap00000000000000_default_ debug Notes ~/Notes debug /home/user/code/zim.debug Foo\ Bar /home/user/Foo\ Bar zim-0.65/tests/data/TestTemplate.html0000664000175000017500000000430012374655231017476 0ustar jaapjaap00000000000000 [% title %] [% IF navigation.prev %] [ Prev ] [% ELSE %] [ Prev ] [% END %] [% IF links.get("index") %] [ Index ] [% ELSE %] [ Index ] [% END %] [% IF navigation.next %] [ Next ] [% ELSE %] [ Next ] [% END %]

    [% page.heading %]

    [% page.body %]
    [% IF loop.first %]Backlinks:[% END %] [% link.name %] [% IF loop.last %]

    [% END %] [% FOREACH file=page.attachments -%] [% IF loop.first %] Attachments: [% END %] [% IF loop.last %]
    [% file.basename %] [% file.size %]
    [% END %] [% END %] [% IF not loop.last %]
    [% END %] zim-0.65/tests/data/non-utf8.txt0000664000175000017500000000003212374655231016412 0ustar jaapjaap00000000000000 zim-0.65/tests/data/templates/0000775000175000017500000000000012615422672016175 5ustar jaapjaap00000000000000zim-0.65/tests/data/templates/html/0000775000175000017500000000000012615422672017141 5ustar jaapjaap00000000000000zim-0.65/tests/data/templates/html/Default/0000775000175000017500000000000012615422672020525 5ustar jaapjaap00000000000000zim-0.65/tests/data/templates/html/Default/foo/0000775000175000017500000000000012615422672021310 5ustar jaapjaap00000000000000zim-0.65/tests/data/templates/html/Default/foo/bar.png0000664000175000017500000000001012374655231022552 0ustar jaapjaap00000000000000FOO BAR zim-0.65/tests/data/templates/html/Default/checked-box.png0000664000175000017500000000220112374655231023403 0ustar jaapjaap00000000000000PNG  IHDRw=sRGBbKGD pHYs 9 A \tIME #$ytEXtCommentCreated with GIMPWIDATHǭoE3񮍿 @#K78/pTP@\PWP[ڦR)$q썽p4i:73<#\gfLi?N}j1(Rbܷ4MZ&cd2oKkmV )%r?gO5J4MWV,j'i$E{c[% ANsml6CV\.on[|^j*n@AEhUTLzJ)O04Xߓ8y+4nc^RŁ~33+a ݏ089ͪKyQA4ޣZmYxfcf2O 7t;8y 9Z&v@!(ܘǟ"6M{2,J)0$".snT%]b}M0DJIV#Z?v `ƒ)yN ?4`4(+,unCE)8 @)O !nqxG.E Jr~{wv:6 JcqUٛv2J`(hܼmvX^Y!I zhw4 0WBk͹HӔb)dY,"c0\Ø~41pp+,`qqC'QiJ>?R c!aQ,z+Rxz$Izl&s0nY__'}#Gatί \qr9F^x FF ykoL/_@)E :W;8 T*1mgw`|bcwXmX^i"S5RJ7 D)IENDB`zim-0.65/tests/data/templates/html/Default.html0000664000175000017500000000420212374655231021412 0ustar jaapjaap00000000000000 [% title %] [% IF navigation.prev %] [ Prev ] [% ELSE %] [ Prev ] [% END %] [% IF links.get("index") %] [ Index ] [% ELSE %] [ Index ] [% END %] [% IF navigation.next %] [ Next ] [% ELSE %] [ Next ] [% END %]

    [% page.heading %]

    [% page.body %]
    [% IF loop.first %]Backlinks:[% END %] [% link.name %] [% IF loop.last %]

    [% END %] [% IF loop.first %] Attachments: [% END %] [% IF loop.last %]
    [% file.basename %] [% file.size %]
    [% END %] [% IF not loop.last %]
    [% END %] zim-0.65/tests/data/notebook.gjots0000664000175000017500000000043512374655231017072 0ustar jaapjaap00000000000000Some test file in gjots format By me \NewEntry Front page without title \NewEntry Pages \NewFolder \NewEntry Foo FooBaR! \NewEntry Bar Dusss \EndFolder \NewEntry Some toplevel page \NewEntry More Pages \NewFolder level1 \NewFolder level2 \NewEntry Hmmm dus \EndFolder \EndFolder zim-0.65/tests/data/notebook-wiki.xml0000664000175000017500000002043312403660354017500 0ustar jaapjaap00000000000000 TEst 123 TODO: fix 1 !!! TODO: * fix 2 24/3/08 !! * fix 3 ! TODO: test 123 test !! * foo ! - TODO * bar ! - TODO * baz - TODO [[Test:Foo:BAR]] Try all kind of combos - see if the parser trips TODO: [ ] A [ ] B [ ] C [ ] D [ ] E FIXME: dus ~~FIXME:~~ foo [ ] Simple [ ] List [ ] List with [ ] Nested items [*] Some are done [x] Others not [ ] FOOOOO [ ] Bar [ ] And then there are @tags [ ] And due dates [ ] Date [d: 11/12] [ ] Date [d: 11/12/2012] [ ] TODO: BAR !!! TODO @home: [ ] Some more tasks !!! [ ] Foo ! [ ] Bar TODO: dus FIXME: jaja - TODO !! @FIXME Trash me! Trash me! Trash me! Content-Type: text/x-zim-wiki Wiki-Format: zim 0.26 ====== Foo Bar ====== This is a **test page** to see how parsing goes when ''we'' ''loop'', arbitrary //content// through our __parser__ The was pre formatted but is not anymore in versions >= 0.26 ''' This however should now be verbatim ''' ''' this too by the way ! ''' ($ROOT, $PAGE, @BACK, @FORW, $UNDO, $REDO); my (%tree_iter, $tree_loaded, $pane_visible); my (@undo_chars, $undo_lock, $save_lock, $overwrite_toggle); my %undo_steps = ( delete => 'insert', insert => 'delete', apply_tag => 'remove_tag', remove_tag => 'apply_tag' ); my $link_icon = Gtk2->CHECK_VERSION(2, 6, 0) ? 'gtk-connect' : 'gtk-convert'; # gtk-connect stock item was introduced in 2.6.0 my $DATA_DIR = find_data_dir(); my $ICON_FILE = File::Spec->catfile($DATA_DIR, qw/images zim64.png/); my %opts = ( 'read_only' => 0 ); for (@ARGV) { next unless /^-/; if (/^(--version|-v)$/) { print version(); exit; } elsif (/^--read-?o my $iter = $buffer->get_iter_at_mark($buffer->get_insert()); return parse_backspace($iter); } elsif ($val == $k_tab or $val == ord(' ')) { # Other WhiteSpace my $buffer = $self->get_buffer; my $iter = $buffer->get_iter_at_mark($buffer->get_insert()); my $string = ($val == $k_tab) ? "\t" : ' '; return parse_word($iter, $string); } #else { printf "key %x pressed\n", $val } # perldoc -m Gtk2::Gdk::Keysyms return 0; } ) unless $opts{read_only}; Glib::Timeout->add(5000, \&save_page) unless $opts{read_only}; # TODO also use this timer for maintaining an undo stack # ################# # some pre format dsfdf dfssdf sdfsdf sdf sdf *&^*&%*& ===== So ===== what do we need to type * to make * the parser * vomit * ??? dfsfds sdfd fdsfdsfdsfds {{foo.png}}{{bar.png}} {{foo.tex|foo.png}} fsdfds === fdsfds === 123 test sdffdsfds ====== Foo ====== # This page is used among others for testing export bar baz [[foo:bar]] [[http://foo.org/bar]] [[mailto:foo@bar.org]] [[foo@bar.org]] [[/foo/bar.pdf]] {{/foo/bar.pdf}} [[~/foo/bar.pdf]] {{~/foo/bar.pdf}} ===== Sub heading ===== dsfsdf sdfsdf = FOO Bar = [[wIKi]] [[test:foo]] •• Search Me •• = Tags = This page contains @tags in all kind of@places like the @beginning of a line or its @end but also after @tabs i.e. within @verbatim blocks within [[foo:bar|Link @captions]] as well as * @enumerations Not to forget within == @Headings == and === Their last @word === And with a different @encoding It also tests which weird @s!gns (sees only "s") and @num6ers @wit#in (aka "wit") tags and tries hard to @cr@sh ("cr") the parser. Testing with whitespace in page name Testing with () and . in page name ====== Head1 ====== ===== Head 2 ===== Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ''' Some Verbatim here Indented and all: //foo// ''' ''' Also block-indentation of verbatim is possible. Even with additional per-line indentation ''' IMAGE: {{../my-image.png?width=600|Foo Bar}} LINKS: [[:foo:bar]] [[./file.png]] file:///etc/passwd LINKS: [[Foo]][[Bar]] IMAGELINK: {{my-image.png?href=Foo}} IMAGELINK: {{../my-image.png?href=%3Afoo%3Abar&width=600|Foo Bar}} TAGS: @foo @bar Some indented paragraphs go here ... {{./equation003.png?type=equation}} Let's try these **bold**, //italic//, __underline__ and ~~strike~~ And some ''//verbatim//'' with an indent halfway the paragraph And don't forget these: *bold*, /italic/ / * *^%#@#$#!@)_!)_ A list * foo * ~~bar~~ * baz And an indented list * foo * ~~bar~~ * baz And a checkbox list [ ] item 1 [*] sub item 1 * Some normal bullet [x] sub item 2 [ ] sub item 3 [ ] item 2 [ ] item 3 [x] item FOOOOOO ! A numbered list: 1. foo 2. bar a. sub list b. here 3. hmmm ---- Some sub- and superscript like x^{2} and H_{2}O ==== This is not a header That's all ... Test 1 2 3 Test 1 2 3 Content-Type: text/x-zim-wiki Wiki-Format: zim 0.26 Creation-Date: ג', 07 אפר 2009 01:30:27 +0300 Modification-Date: ג', 07 אפר 2009 01:30:27 +0300 ====== Hello ====== Created שלישי 07 אפריל 2009 Content-Type: text/x-zim-wiki Wiki-Format: zim 0.26 Creation-Date: ג', 07 אפר 2009 13:08:18 +0300 Modification-Date: ג', 07 אפר 2009 13:10:08 +0300 ====== מדעי המחשב ====== Created שלישי 07 אפריל 2009 שפת תכנות אלגוריטמיים Content-Type: text/x-zim-wiki Wiki-Format: zim 0.26 Creation-Date: ג', 07 אפר 2009 13:08:06 +0300 Modification-Date: ג', 07 אפר 2009 13:09:28 +0300 ====== הנדסת מכונות ====== Created שלישי 07 אפריל 2009 חדו"א מד"ר מכניקת מוצקים 2 A line in English, should be left aligned. דינמיקה Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2010-05-10T01:02:12.859000 ====== 中文 ====== Created Monday 10 May 2010 this page title is chinese. Foo Bar ! [[Dus:Ja]] [[Bar]] Duss [[Linking:Foo:Bar]] [[Dus]] For page.menu template variable test For page.menu template variable test For page.menu template variable test For page.menu template variable test For page.menu template variable test For page.menu template variable test For page.menu template variable test For page.menu template variable test For page.menu template variable test For page.menu template variable test Subpages will be moved Non-mover Move me ======= H2G2 ====== {{{card: type=Book :Title: The Hitchikers Guide to the Galaxy :Author: ? :Publisher: THe Intergalactic publishing house :Year: 2042 }}} ====== Comment ====== Please note the lettering on the front. zim-0.65/tests/spell.py0000664000175000017500000000340712614412356014760 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2015 Jaap Karssenberg from __future__ import with_statement import tests try: import gtkspell except: gtkspell = None try: import gtkspellcheck except: gtkspellcheck = None import zim.plugins.spell from tests.gui import setupGtkInterface, Path class TestSpell(object): def setUp(self): self._restore = ( zim.plugins.spell.gtkspell, zim.plugins.spell.gtkspellcheck ) def tearDown(self): zim.plugins.spell.gtkspell, zim.plugins.spell.gtkspellcheck = \ self._restore def runTest(self, adapterclass): with tests.LoggingFilter(logger='zim.plugins.spell'): # Hide exceptions ui = setupGtkInterface(self) plugin = ui.plugins.load_plugin('spell') plugin.extend(ui.mainwindow) ext = plugin.get_extension(zim.plugins.spell.MainWindowExtension) self.assertIs(ext._adapter, adapterclass) # ensure switching library worked ext.toggle_spellcheck() ext.toggle_spellcheck() ext.toggle_spellcheck() ui.open_page(Path('Foo')) ui.open_page(Path('Bar')) ext.toggle_spellcheck() ui.open_page(Path('Foo')) ui.open_page(Path('Bar')) ext.toggle_spellcheck() # TODO check it actually shows on screen ... @tests.skipIf(gtkspell is None, 'gtkspell not installed') class TestGtkspell(TestSpell, tests.TestCase): def runTest(self): zim.plugins.spell.gtkspell = gtkspell zim.plugins.spell.gtkspellcheck = None TestSpell.runTest(self, zim.plugins.spell.GtkspellAdapter) @tests.skipIf(gtkspellcheck is None, 'gtkspellcheck not installed') class TestGtkspellchecker(TestSpell, tests.TestCase): def runTest(self): zim.plugins.spell.gtkspell = None zim.plugins.spell.gtkspellcheck = gtkspellcheck TestSpell.runTest(self, zim.plugins.spell.GtkspellcheckAdapter) zim-0.65/tests/parsing.py0000664000175000017500000001612612536772221015311 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg import tests from zim.parsing import * from zim.parser import * class TestParsing(tests.TestCase): def testSplitWords(self): '''Test parsing quoted strings''' string = r'''"foo bar", "\"foooo bar\"" dusss ja''' list = ['foo bar', ',', '"foooo bar"', 'dusss', 'ja'] result = split_quoted_strings(string) self.assertEquals(result, list) list = ['"foo bar"', ',', r'"\"foooo bar\""', 'dusss', 'ja'] result = split_quoted_strings(string, unescape=False) self.assertEquals(result, list) string = r'''"foo bar", False, True''' list = ['foo bar', ',', 'False', ',', 'True'] result = split_quoted_strings(string) self.assertEquals(result, list) self.assertRaises(ValueError, split_quoted_strings, "If you don't mind me asking") string = "If you don't mind me asking" list = ["If", "you", "don", "'t", "mind", "me", "asking"] result = split_quoted_strings(string, strict=False) self.assertEquals(result, list) def testParseDate(self): '''Test parsing dates''' from datetime import date today = date.today() year = today.year if today.month > 6: year += 1 # Starting July next year January is closer self.assertEqual(parse_date('1/1'), (year, 1, 1)) self.assertEqual(parse_date('1-1'), (year, 1, 1)) self.assertEqual(parse_date('1:1'), (year, 1, 1)) self.assertEqual(parse_date('11/11/99'), (1999, 11, 11)) self.assertEqual(parse_date('11/11/11'), (2011, 11, 11)) self.assertEqual(parse_date('1/11/2001'), (2001, 11, 1)) self.assertEqual(parse_date('1-11-2001'), (2001, 11, 1)) self.assertEqual(parse_date('1:11:2001'), (2001, 11, 1)) self.assertEqual(parse_date('2001/11/1'), (2001, 11, 1)) def testRe(self): '''Test parsing Re class''' string = 'foo bar baz'; re = Re('f(oo)\s*(bar)') if re.match(string): self.assertEquals(len(re), 3) self.assertEquals(re[0], 'foo bar') self.assertEquals(re[1], 'oo') self.assertEquals(re[2], 'bar') else: assert False, 'fail' def testTextBuffer(self): '''Test parsing TextBuffer class''' buffer = TextBuffer() buffer += ['test 123\n test !', 'fooo bar\n', 'duss'] self.assertEqual( buffer.get_lines(), ['test 123\n', ' test !fooo bar\n', 'duss\n'] ) def testURLEncoding(self): '''Test encoding and decoding urls''' for url, readable in ( ('file:///foo/file%25%20%5D', 'file:///foo/file%25 %5D'), ('http://foo/bar%20monkey%E2%80%99s', u'http://foo/bar monkey\u2019s'), # Multibyte unicode char # from bug report lp:545712 ('http://www.moneydj.com/e/newage/JAVA%B4%FA%B8%D5%B0%CF.htm', 'http://www.moneydj.com/e/newage/JAVA%B4%FA%B8%D5%B0%CF.htm'), ('http://www.moneydj.com/e/newage/JAVA%20%B4%FA%B8%D5%B0%CF.htm', 'http://www.moneydj.com/e/newage/JAVA %B4%FA%B8%D5%B0%CF.htm'), ): self.assertEqual(url_decode(url, mode=URL_ENCODE_READABLE), readable) self.assertEqual(url_decode(readable, mode=URL_ENCODE_READABLE), readable) self.assertEqual(url_encode(url, mode=URL_ENCODE_READABLE), url) self.assertEqual(url_encode(readable, mode=URL_ENCODE_READABLE), url) for path, encoded in ( ('/foo/file% ]', '/foo/file%25%20%5D'), (u'/foo/bar monkey\u2019s', '/foo/bar%20monkey%E2%80%99s'), ): self.assertEqual(url_encode(path, mode=URL_ENCODE_PATH), encoded) self.assertEqual(url_decode(encoded, mode=URL_ENCODE_PATH), path) self.assertEqual(url_encode('foo?bar/baz', mode=URL_ENCODE_DATA), 'foo%3Fbar%2Fbaz') self.assertEqual(url_decode('foo%3Fbar%2Fbaz', mode=URL_ENCODE_DATA), 'foo?bar/baz') # from bug report lp:545712 self.assertEqual(url_decode('%B4%FA%B8%D5%B0%CF', mode=URL_ENCODE_DATA), '\xb4\xfa\xb8\xd5\xb0\xcf') ## test round trip for utf-8 data = u'\u0421\u0430\u0439' encoded = url_encode(data) decoded = url_decode(data) #~ print "DATA, ENCODED, DECODED:", (data, encoded, decoded) self.assertEqual(decoded, data) self.assertEqual(url_decode(encoded), data) self.assertEqual(url_encode(decoded), encoded) def testLinkType(self): '''Test link_type()''' for href, type in ( ('zim+file://foo/bar?dus.txt', 'notebook'), ('file:///foo/bar', 'file'), ('http://foo/bar', 'http'), ('http://192.168.168.100', 'http'), ('file+ssh://foo/bar', 'file+ssh'), ('mailto:foo@bar.com', 'mailto'), ('mailto:foo.com', 'page'), ('foo@bar.com', 'mailto'), ('mailto:foo//bar@bar.com', 'mailto'), # is this a valid mailto uri ? ('mid:foo@bar.org', 'mid'), ('cid:foo@bar.org', 'cid'), ('./foo/bar', 'file'), ('/foo/bar', 'file'), ('~/foo', 'file'), ('C:\\foo', 'file'), ('wp?foo', 'interwiki'), ('http://foo?bar', 'http'), ('\\\\host\\foo\\bar', 'smb'), ('foo', 'page'), ('foo:bar', 'page'), ): #~ print '>>', href self.assertEqual(link_type(href), type) class TestSimpleTreeBuilder(tests.TestCase): def runTest(self): E = SimpleTreeElement builder = SimpleTreeBuilder() builder.start('root', {}) builder.text('foo') builder.text('bar') builder.append('dus', {}, 'ja') builder.text('foo') builder.text('bar') builder.append('br', {}) builder.text('foo') builder.text('bar') builder.end('root') root = builder.get_root() self.assertEqual(root, [ E('root', {}, [ 'foo', 'bar', E('dus', {}, ['ja']), 'foo', 'bar', E('br', {}, []), 'foo', 'bar', ] ) ]) realbuilder = SimpleTreeBuilder() builder = BuilderTextBuffer(realbuilder) builder.start('root', {}) builder.text('foo') builder.text('bar') builder.append('dus', {}, 'ja') builder.text('foo') builder.text('bar') builder.append('br', {}) builder.text('foo') builder.text('bar') builder.end('root') root = realbuilder.get_root() self.assertEqual(root, [ E('root', {}, [ 'foobar', E('dus', {}, ['ja']), 'foobar', E('br', {}, []), 'foobar', ] ) ]) class TestBuilderTextBuffer(tests.TestCase): def runTest(self): builder = SimpleTreeBuilder() buffer = BuilderTextBuffer(builder) buffer.start('FOO') buffer.text('aaa\n') buffer.text('bbb\n') buffer.text('ccc\n') self.assertEqual(buffer.get_text(), 'aaa\nbbb\nccc\n') buffer.append('BAR') self.assertEqual(buffer.get_text(), '') buffer.text('qqq\n') self.assertEqual(buffer.get_text(), 'qqq\n') buffer.clear_text() buffer.text('qqq\n') self.assertEqual(buffer.get_text(), 'qqq\n') buffer.set_text('ddd\n') self.assertEqual(buffer.get_text(), 'ddd\n') buffer.text('') buffer.text('eee') buffer.end('FOO') E = SimpleTreeElement self.assertEqual(builder.get_root(), [ E('FOO', None, [ u'aaa\nbbb\nccc\n', E('BAR', None, []), u'ddd\neee', ]) ]) class TestParser(tests.TestCase): def testFunctions(self): # Helper functions self.assertEqual(fix_line_end('foo'), 'foo\n') self.assertEqual(fix_line_end('foo\nbar'), 'foo\nbar\n') self.assertEqual(convert_space_to_tab(' foo\n\t bar\n'), '\tfoo\n\t\t bar\n') text = 'foo\nbar\nbaz\n' for offset, wanted in ( (0, (1, 0)), (3, (1, 3)), (4, (2, 0)), (8, (3, 0)), (9, (3, 1)), ): line = get_line_count(text, offset) self.assertEqual(line, wanted) ## TODO -- Parser test cases ## zim-0.65/tests/pageview.py0000664000175000017500000016423512614412356015457 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg from __future__ import with_statement import tests from zim.fs import File, Dir from zim.formats import wiki, ParseTree from zim.notebook import Path from zim.gui.pageview import * from zim.config import SectionedConfigDict, VirtualConfigManager, ConfigManager from zim.gui.clipboard import Clipboard class FilterNoSuchImageWarning(tests.LoggingFilter): logger = 'zim.gui.pageview' message = 'No such image:' def new_parsetree_from_text(text): ## FIXME had to wrap my own here becase of stupid ## resolve_images - get rid of that tree = tests.new_parsetree_from_text(text) notebook = tests.new_notebook(fakedir='/foo') page = notebook.get_page(Path('Foo')) tree.resolve_images(notebook, page) return tree def setUpPageView(fakedir=None, notebook=None): '''Some bootstrap code to get an isolated PageView object''' ## TODO - should not be needed ## we can get rid of this when we refactor the actiongroup stuff ## to not register, by be called by the window PageView.actiongroup = tests.MockObject() # use class attribute to fake ui init PageView.actiongroup.mock_method('get_action', tests.MockObject()) PageView.actiongroup.mock_method('list_actions', []) if notebook is None: notebook = tests.new_notebook(fakedir) ui = MockUI() ui.config = VirtualConfigManager() ui.notebook = notebook ui.page = None ui.uimanager = tests.MockObject() ui.uimanager.mock_method('get_accel_group', tests.MockObject()) ui.mainwindow = tests.MockObject() ui.mainwindow.statusbar_style_label = tests.MockObject() return PageView(ui) class TestCaseMixin(object): # Mixin class with extra test methods def assertBufferEquals(self, buffer, wanted): if not isinstance(wanted, basestring): wanted = tree.tostring() raw = '' in wanted tree = buffer.get_parsetree(raw=raw) self.assertEqual(tree.tostring(), wanted) def assertSelection(self, buffer, line, offset, string): self.assertCursorPosition(buffer, offset, line) bound = buffer.get_selection_bounds() self.assertTrue(bound) selection = bound[0].get_slice(bound[1]) self.assertEqual(selection, string) def assertCursorPosition(self, buffer, offset, line): #~ print 'CHECK', line, offset, text cursor = buffer.get_insert_iter() #~ print ' GOT', cursor.get_line(), cursor.get_line_offset() self.assertEqual(cursor.get_line(), line) self.assertEqual(cursor.get_line_offset(), offset) class TestTextBuffer(tests.TestCase, TestCaseMixin): def testVarious(self): '''Test serialization and interaction of the page view textbuffer''' wikitext = tests.WikiTestData.get('roundtrip') tree = new_parsetree_from_text(wikitext) buffer = TextBuffer() with FilterNoSuchImageWarning(): buffer.set_parsetree(tree) raw1 = buffer.get_parsetree(raw=True) result1 = buffer.get_parsetree() #~ print tree.tostring() #~ print result1.tostring() reftree = tree.copy() reftree.unresolve_images() # needed to make compare succeed self.assertEqual(result1.tostring(), reftree.tostring()) # Compare we are stable when loading raw tree again raw = raw1.tostring() with FilterNoSuchImageWarning(): buffer.set_parsetree(raw1) self.assertEqual(raw1.tostring(), raw) # If this fails, set_parsetree is modifying the tree raw2 = buffer.get_parsetree(raw=True) self.assertEqual(raw2.tostring(), raw) # Actual cooked roundtrip test # Compare we are stable when loading cooked tree again #~ cooked = result1.tostring() #~ with FilterNoSuchImageWarning(): #~ buffer.set_parsetree(result1) #~ self.assertEqual(result1.tostring(), cooked) #~ # If this fails, set_parsetree is modifying the tree #~ result2 = buffer.get_parsetree() #~ self.assertEqual(result2.tostring(), cooked) # Actual cooked roundtrip test # Test 'raw' really preserves "errors" input = '''\ foobarbaz dus
    ja
    hmm foo bar dus
    ja
    hmm dus ja grrr
  • Foo
  • Bar
  • ''' tree = tests.new_parsetree_from_xml(input) buffer.set_parsetree(tree) self.assertFalse(buffer.get_modified()) rawtree = buffer.get_parsetree(raw=True) self.assertFalse(buffer.get_modified()) self.assertEqual(rawtree.tostring(), input) # Test errors are cleaned up correctly wanted = '''\

    foo

    bar

    baz

    dus ja hmm

    foo

    bar

    dus ja hmm dus ja grrr

    • Foo
    • Bar

    ''' tree = buffer.get_parsetree() self.assertFalse(buffer.get_modified()) self.assertEqual(tree.tostring(), wanted) # Test pasting some simple text buffer.set_parsetree(tree) # reset without errors input = '''\ Bold''' wanted = '''\

    foo

    bar

    baz

    dus ja hmm

    foo

    bar

    dus ja hmm dus ja grrr

    • FooBold
    • BoldBar

    ''' pastetree = tests.new_parsetree_from_xml(input) iter = buffer.get_iter_at_line(15) iter.forward_chars(5) # position after "* Foo" buffer.insert_parsetree(iter, pastetree, interactive=True) iter = buffer.get_iter_at_line(16) # position before bullet "* Bar" buffer.insert_parsetree(iter, pastetree, interactive=True) tree = buffer.get_parsetree() self.assertTrue(buffer.get_modified()) self.assertEqual(tree.tostring(), wanted) # Now paste list halfway and see result is OK # because of the bullets pasting should go to a new line # automatically input = '''\
  • Foo
  • Bar
  • ''' wanted = '''\

    foo

    bar

    baz

    • Foo
    • Bar

    dus ja hmm

    foo

    bar

    dus ja hmm dus ja grrr

    • FooBold
    • BoldBar

    ''' pastetree = tests.new_parsetree_from_xml(input) iter = buffer.get_iter_at_line(4) iter.forward_chars(3) # position after "baz" buffer.insert_parsetree(iter, pastetree, interactive=True) tree = buffer.get_parsetree() self.assertTrue(buffer.get_modified()) self.assertEqual(tree.tostring(), wanted) # Test sanity for editing "errors" input = '''\
  • Box 1
  • Box 2
  • Box 3
  • ''' wanted = '''\

    • Box 1
    • foo Box 2
    • Box 3

    ''' tree = tests.new_parsetree_from_xml(input) buffer.set_parsetree(tree) iter = buffer.get_iter_at_line(2) # iter *before* checkbox buffer.insert(iter, 'foo ') #print buffer.get_parsetree(raw=True).tostring() #print buffer.get_parsetree().tostring() tree = buffer.get_parsetree() self.assertEqual(tree.tostring(), wanted) # Strange bug let to second bullet disappearing in this case input = '''\

    • Box 1
    • Box 2
    • Box 3

    ''' tree = tests.new_parsetree_from_xml(input) buffer.set_parsetree(tree) iter = buffer.get_iter_at_line(2) # iter before checkbox bound = iter.copy() bound.forward_char() buffer.select_range(iter, bound) buffer.toggle_textstyle('strike') #~ print buffer.get_parsetree(raw=True).tostring() #~ print buffer.get_parsetree().tostring() tree = buffer.get_parsetree() self.assertEqual(tree.tostring(), input) # Check how robust we are for placeholder utf8 character buffer = TextBuffer() buffer.insert_at_cursor(u'foo \uFFFC bar') wanted = '''\

    foo bar

    ''' tree = buffer.get_parsetree() self.assertEqual(tree.tostring(), wanted) # Test merge lines logic on delete input = '''\ Foo Bar

    • List item 0

    • List item 1

    ''' wanted = '''\ FooBar

    List item 0

    List item 1

    ''' # Note: we don't insert extra newlines, but
  • assumes them tree = tests.new_parsetree_from_xml(input) buffer.set_parsetree(tree) tree = buffer.get_parsetree() self.assertEqual(tree.tostring(), input) iter = buffer.get_iter_at_line(2) # before h2 bound = iter.copy() iter.backward_chars(2) # after h1 buffer.delete(iter, bound) iter = buffer.get_iter_at_line(2) # list item 0 bound = iter.copy() bound.forward_chars(2) # Behind bullet buffer.delete(iter, bound) iter = buffer.get_iter_at_line(4) # list item 1 bound = iter.copy() bound.forward_chars(2) # Behind bullet buffer.delete(iter, bound) #~ print buffer.get_parsetree().tostring() #~ print wanted tree = buffer.get_parsetree() self.assertEqual(tree.tostring(), wanted) # Exercize recursive checkbox lists input = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja ''' tree = tests.new_parsetree_from_xml(input) buffer.set_parsetree(tree) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), input) # just a sanity check wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' buffer.toggle_checkbox(2, recursive=True) # Bar buffer.toggle_checkbox(3, recursive=True) # Bar 1 # After first click all children become checked # After second click one becomes xchecked buffer.place_cursor(buffer.get_iter_at_line(1)) # Foo buffer.toggle_checkbox_for_cursor_or_selection(XCHECKED_BOX) # Like on first list item line tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' start = buffer.get_iter_at_line(2) # Bar end = buffer.get_iter_at_line(6) # Bar 3 end.forward_to_line_end() buffer.select_range(start, end) buffer.toggle_checkbox_for_cursor_or_selection(CHECKED_BOX, recursive=True) # Like keypress would trigger while selection present tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) # Test deleting checkbox and undo / redo does not mess up indenting etc undomanager = UndoStackManager(buffer) previous = wanted wanted = '''\ Dusss
  • Foo
  • Bar
  • Baz
  • Tja
    ''' start = buffer.get_iter_at_line(3) # Bar 1 end = buffer.get_iter_at_line(7) # Baz (before checkbox !) buffer.delete(start, end) tree = buffer.get_parsetree(raw=True) #~ print tree.tostring() #~ print wanted self.assertEqual(tree.tostring(), wanted) undomanager.undo() tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), previous) undomanager.redo() tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) def testReplace(self): # Check replacing a formatted word # word is deleted, but formatting should stay input = '''\

    aaa bbb ccc

    ''' wanted = '''\

    aaa eee ccc

    ''' tree = tests.new_parsetree_from_xml(input) buffer = TextBuffer() buffer.set_parsetree(tree) iter = buffer.get_iter_at_offset(7) # middle of "bbb" buffer.place_cursor(iter) buffer.select_word() with buffer.user_action: buffer.delete_selection(True, True) buffer.insert_interactive_at_cursor("eee", True) self.assertBufferEquals(buffer, wanted) def testSelectLink(self): input = '''\ aaa bbb ccc ''' tree = tests.new_parsetree_from_xml(input) buffer = TextBuffer() buffer.set_parsetree(tree) buffer.place_cursor(buffer.get_iter_at_offset(7)) # middle of link self.assertIsNone(buffer.get_has_link_selection()) data = buffer.select_link() self.assertEqual(data['href'], 'xxx') self.assertEqual(buffer.get_has_link_selection(), data) class TestUndoStackManager(tests.TestCase): def runTest(self): '''Test the undo/redo functionality''' buffer = TextBuffer() undomanager = UndoStackManager(buffer) wikitext = tests.WikiTestData.get('roundtrip') tree = new_parsetree_from_text(wikitext) with FilterNoSuchImageWarning(): buffer._insert_element_children(tree._etree.getroot()) # Use private method to circumvent begin-insert-tree # signal etc. so we get undo stack for inserting # First test is to check we have a continuous undo stack after # inserting a parse tree. Nota bene, if this test fails, the # insert_parsetree() function is not strictly serial, which # probably breaks proper formatting e.g. when pasting a tree # half way in a line. #~ import pprint #~ undomanager.flush_insert() #~ def tostring(data): #~ if hasattr(data, 'tostring'): #~ return data.tostring()[39:] #~ else: #~ return data.get_property('name') i = 0 for group in undomanager.stack + [undomanager.group]: #~ pprint.pprint( #~ [(a[0], a[1], a[2], tostring(a[3])) for a in group] ) for action in group: self.assertEqual(action[1], i) # assert undo stack is continous i = action[2] self.assertTrue(len(undomanager.stack) > 10) # check we recorded something # Now we iterate through the tree to verify we get a proper # state at every step of the stack, then we redo to check we # get back what we had buffertree1 = buffer.get_parsetree(raw=True) while undomanager.undo(): _ = buffer.get_parsetree() # just check for no warnings emptytree = buffer.get_parsetree(raw=True) self.assertEqual(emptytree.tostring(), "\n") with FilterNoSuchImageWarning(): while undomanager.redo(): _ = buffer.get_parsetree() # just check for no warnings buffertree2 = buffer.get_parsetree(raw=True) self.assertEqual(buffertree2.tostring(), buffertree1.tostring()) while undomanager.undo(): continue emptytree = buffer.get_parsetree(raw=True) self.assertEqual(emptytree.tostring(), "\n") buffer.clear() self.assertTrue(len(undomanager.stack) == 0) undomanager.unblock() # Test merging for c in 'fooo barr baz': with buffer.user_action: buffer.insert_at_cursor(c) #~ import pprint #~ undomanager.flush_insert() #~ pprint.pprint(undomanager.stack) self.assertTrue(len(undomanager.stack) == 5) # 3 words, 2 spaces for group in undomanager.stack: self.assertTrue(len(group) == 1) # merge was sucessfull self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr baz") for wanted in ( "\nfooo barr ", "\nfooo barr", "\nfooo ", "\nfooo", "\n" ): undomanager.undo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), wanted) while undomanager.redo(): continue self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr baz") # test other actions iter = buffer.get_iter_at_offset(7) buffer.place_cursor(iter) buffer.select_word() buffer.toggle_textstyle('strong') self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr baz") undomanager.undo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr baz") undomanager.redo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr baz") start, end = map(buffer.get_iter_at_offset, (5, 10)) with buffer.user_action: buffer.delete(start, end) self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo baz") undomanager.undo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr baz") undomanager.redo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo baz") # test folding undomanager.undo() undomanager.undo() undomanager.undo() undomanager.undo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr") with buffer.user_action: buffer.insert_at_cursor(' ') undomanager.undo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr") undomanager.undo() # here we undo fold of 4 undos above self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo baz") undomanager.undo() self.assertEqual(buffer.get_parsetree(raw=True).tostring(), "\nfooo barr baz") class TestFind(tests.TestCase, TestCaseMixin): def testVarious(self): buffer = TextBuffer() finder = buffer.finder buffer.set_text('''\ FOO FooBar FOOBAR FooBaz Foo Bar foo Bar Baz Foo ''') buffer.place_cursor(buffer.get_start_iter()) # Check normal usage, case-insensitive for text in ('f', 'fo', 'foo', 'fo', 'f', 'F', 'Fo', 'Foo'): finder.find(text) self.assertSelection(buffer, 0, 0, text.upper()) finder.find('Grr') self.assertCursorPosition(buffer, 0, 0) finder.find('Foob') self.assertSelection(buffer, 0, 4, 'FooB') for line, offset, text in ( (0, 11, 'FOOB'), (1, 0, 'FooB'), (0, 4, 'FooB'), ): finder.find_next() self.assertSelection(buffer, line, offset, text) for line, offset, text in ( (1, 0, 'FooB'), (0, 11, 'FOOB'), (0, 4, 'FooB'), ): finder.find_previous() self.assertSelection(buffer, line, offset, text) # Case sensitive finder.find('Foo', FIND_CASE_SENSITIVE) self.assertSelection(buffer, 0, 4, 'Foo') for line, offset, text in ( (1, 0, 'Foo'), (1, 7, 'Foo'), (2, 12, 'Foo'), (0, 4, 'Foo'), ): finder.find_next() self.assertSelection(buffer, line, offset, text) # Whole word finder.find('Foo', FIND_WHOLE_WORD) self.assertSelection(buffer, 1, 7, 'Foo') for line, offset, text in ( (2, 0, 'foo'), (2, 12, 'Foo'), (0, 0, 'FOO'), (1, 7, 'Foo'), ): finder.find_next() self.assertSelection(buffer, line, offset, text) # Regular expression finder.find(r'Foo\s*Bar', FIND_REGEX | FIND_CASE_SENSITIVE) self.assertSelection(buffer, 1, 7, 'Foo Bar') finder.find_next() self.assertSelection(buffer, 0, 4, 'FooBar') # Highlight - just check it doesn't crash finder.set_highlight(True) finder.set_highlight(False) def testReplace(self): buffer = TextBuffer() finder = buffer.finder tree = tests.new_parsetree_from_xml('''\ FOO FooBar FOOBAR FooBaz Foo Bar foo Bar Baz Foo ''') buffer.set_parsetree(tree) finder.find('Foo(\w*)', FIND_REGEX) # not case sensitive! finder.find_next() self.assertSelection(buffer, 0, 4, 'FooBar') finder.replace('Dus') self.assertSelection(buffer, 0, 4, 'Dus') wanted = '''\ FOO Dus FOOBAR FooBaz Foo Bar foo Bar Baz Foo ''' self.assertBufferEquals(buffer, wanted) finder.replace_all('dus*\\1*') wanted = '''\ dus** Dus dus*BAR* dus*Baz* dus** Bar dus** Bar Baz dus** ''' self.assertBufferEquals(buffer, wanted) class TestLists(tests.TestCase, TestCaseMixin): def testBulletLists(self): '''Test interaction for lists''' buffer = TextBuffer() input = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = tests.new_parsetree_from_xml(input) buffer.set_parsetree(tree) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), input) # just a sanity check undomanager = UndoStackManager(buffer) # check list initializes properly row, list = TextBufferList.new_from_line(buffer, 3) # Bar 1 self.assertEqual(list.firstline, 1) self.assertEqual(list.lastline, 7) self.assertEqual(row, 2) self.assertEqual(list, [ (1, 0, '*'), (2, 0, '*'), (3, 1, '*'), (4, 2, '*'), (5, 1, '*'), (6, 1, '*'), (7, 0, '*'), ] ) # Exercise indenting row, list = TextBufferList.new_from_line(buffer, 3) # Bar 1 self.assertFalse(list.can_indent(row)) self.assertFalse(list.indent(row)) row, list = TextBufferList.new_from_line(buffer, 2) # Bar self.assertTrue(list.can_indent(row)) self.assertTrue(list.indent(row)) self.assertFalse(list.can_indent(row)) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) row, list = TextBufferList.new_from_line(buffer, 7) # Baz self.assertFalse(list.can_unindent(row)) self.assertFalse(list.unindent(row)) row, list = TextBufferList.new_from_line(buffer, 3) # Bar 1 self.assertTrue(list.can_unindent(row)) self.assertTrue(list.unindent(row)) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) for line in (2, 5, 6): # Bar, Bar 2 & Bar 3 row, list = TextBufferList.new_from_line(buffer, line) self.assertTrue(list.can_unindent(row)) self.assertTrue(list.unindent(row)) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), input) # Test undo / redo for indenting and lists for i in range(3): self.assertTrue(undomanager.undo()) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) while undomanager.undo(): pass tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), input) while undomanager.redo(): pass tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), input) for i in range(3): self.assertTrue(undomanager.undo()) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) # Exercize recursive checkbox lists input = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = tests.new_parsetree_from_xml(input) buffer.set_parsetree(tree) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), input) # just a sanity check undomanager = UndoStackManager(buffer) row, list = TextBufferList.new_from_line(buffer, 2) # Bar list.set_bullet(row, CHECKED_BOX) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) list.set_bullet(row, UNCHECKED_BOX) row = list.get_row_at_line(3) # Bar 1 list.set_bullet(row, XCHECKED_BOX) row = list.get_row_at_line(5) # Bar 2 list.set_bullet(row, UNCHECKED_BOX) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) row = list.get_row_at_line(5) # Bar 2 list.set_bullet(row, CHECKED_BOX) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) row = list.get_row_at_line(4) # Bar 1.1 list.set_bullet(row, UNCHECKED_BOX) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) wantedpre1 = wanted row = list.get_row_at_line(4) # Bar 1.1 list.set_bullet(row, CHECKED_BOX) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) # Test indenting / unindenting the whole list wantedpre = wanted row = list.get_row_at_line(1) # Foo list.indent(row) wanted = '''\ Dusss
  • Foo
  • Bar
  • Bar 1
  • Bar 1.1
  • Bar 2
  • Bar 3
  • Baz
  • Tja
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) list.unindent(row) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wantedpre) # Test undo / redo for indenting and lists for xml in (wanted, wantedpre, wantedpre1): self.assertTrue(undomanager.undo()) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), xml) for xml in (wantedpre, wanted, wantedpre): self.assertTrue(undomanager.redo()) tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), xml) while undomanager.undo(): pass tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), input) while undomanager.redo(): pass tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wantedpre) def testNumberedLists(self): buffer = TextBuffer() # The rules for renumbering are: # # 1. If this is top of the list, number down # 2. Otherwise look at bullet above and number down from there # (this means whatever the user typed doesn't really matter) # 3. If above bullet is non-number bullet, replace the numbered # item with that bullet (for checkboxes always an open # checkbox is used.) # # Note that the bullet on the line we look also at does not have # to be a numbered bullet. The one above or below may still be # number. And vice versa input = '''\
  • A
  • B
  • C
  • D
  • E
  • ''' wanted = '''\
  • A
  • B
  • C
  • D
  • E
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) buffer.renumber_list(1) # top of list: A. self.assertBufferEquals(buffer, wanted) buffer.set_parsetree(tests.new_parsetree_from_xml(input)) buffer.renumber_list(2) # middle of list: 3. self.assertBufferEquals(buffer, wanted) input = '''\
  • A
  • B
  • C
  • D
  • E
  • ''' wanted = '''\
  • A
  • B
  • C
  • D
  • E
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) buffer.renumber_list(5) # after sub list: "*" self.assertBufferEquals(buffer, wanted) input = '''\
  • A
  • B
  • C
  • ''' wanted = '''\
  • A
  • B
  • C
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) buffer.renumber_list(2) # middle of list: B. self.assertBufferEquals(buffer, wanted) input = '''\
  • A
  • B
  • C
  • ''' wanted = '''\
  • A
  • B
  • C
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) buffer.renumber_list(2) # middle of list: B. self.assertBufferEquals(buffer, wanted) input = '''\
  • A
  • B
  • C
  • ''' wanted = '''\
  • A
  • B
  • C
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) buffer.renumber_list(2) # middle of list: B. self.assertBufferEquals(buffer, wanted) # Renumber behavior after changing indenting: # # 1. If this is now middle of a list (above item is same or # more indenting) look above and renumber # 2. If this is now top of a sublist (above item is lower # indent) look _below_ and copy bullet found there then # number down # 3. If this is the top of a new sublist (no item below) # switch bullet style (numbers vs letters) and reset count # 4. If this is the top of the list (no bullet above) don't # need to do anything # # ALSO look at previous level where item went missing, # look at above item at that level and number downward def indent(buffer, line): row, list = TextBufferList.new_from_line(buffer, line) list.indent(row) def unindent(buffer, line): row, list = TextBufferList.new_from_line(buffer, line) list.unindent(row) input = '''\
  • A
  • B
  • C
  • D
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) wanted = '''\
  • A
  • B
  • C
  • D
  • ''' indent(buffer, 3) # new sub-list -- reset style and numbering self.assertBufferEquals(buffer, wanted) wanted = '''\
  • A
  • B
  • C
  • D
  • ''' indent(buffer, 4) # add to existing sub list self.assertBufferEquals(buffer, wanted) wanted = '''\
  • A
  • B
  • C
  • D
  • ''' indent(buffer, 2) # top of existing sub list self.assertBufferEquals(buffer, wanted) prev = wanted wanted = '''\
  • A
  • B
  • C
  • D
  • ''' indent(buffer, 4) # yet another new sub level self.assertBufferEquals(buffer, wanted) unindent(buffer, 4) self.assertBufferEquals(buffer, prev) wanted = '''\
  • A
  • B
  • C
  • D
  • ''' unindent(buffer, 2) # renumber both levels self.assertBufferEquals(buffer, wanted) wanted = '''\
  • A
  • B
  • C
  • D
  • ''' unindent(buffer, 4) self.assertBufferEquals(buffer, wanted) buffer.set_bullet(4, NUMBER_BULLET) self.assertBufferEquals(buffer, wanted) input = '''\
  • A
  • B
  • C
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) wanted = '''\
  • A
  • B
  • C
  • ''' indent(buffer, 3) self.assertBufferEquals(buffer, wanted) input = '''\
  • A
  • B
  • C
  • D
  • ''' buffer.set_parsetree(tests.new_parsetree_from_xml(input)) wanted = '''\
  • A
  • B
  • C
  • D
  • ''' indent(buffer, 4) self.assertBufferEquals(buffer, wanted) wanted = '''\
  • A
  • B
  • C
  • D
  • ''' unindent(buffer, 2) self.assertBufferEquals(buffer, wanted) def press(widget, sequence): #~ print 'PRESS', sequence for key in sequence: event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) if isinstance(key, (int, long)): event.keyval = int(key) elif key == '\n': event.keyval = int( gtk.gdk.keyval_from_name('Return') ) elif key == '\t': event.keyval = int( gtk.gdk.keyval_from_name('Tab') ) else: event.keyval = int( gtk.gdk.unicode_to_keyval(ord(key)) ) if not isinstance(key, (int, long)): event.string = key #gtk.main_do_event(event) #assert widget.event(event) # Returns True if event was handled #while gtk.events_pending(): # gtk.main_iteration() widget.emit('key-press-event', event) class TestTextView(tests.TestCase, TestCaseMixin): def setUp(self): # Initialize default preferences from module self.preferences = {} for pref in ui_preferences: self.preferences[pref[0]] = pref[4] def testTyping(self): print '\n!! Two GtkWarnings expected here for gdk display !!' view = TextView(self.preferences) buffer = TextBuffer() view.set_buffer(buffer) undomanager = UndoStackManager(buffer) # Need a window to get the widget realized window = gtk.Window() window.add(view) view.realize() #~ window.show_all() #~ view.grab_focus() press(view, 'aaa\n') start, end = buffer.get_bounds() self.assertEqual(buffer.get_text(start, end), 'aaa\n') # Just checking test routines work # Test bullet & indenting logic press(view, '* foo') wanted = '''\ aaa
  • foo
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) press(view, '\n') wanted = '''\ aaa
  • foo
  • ''' tree = buffer.get_parsetree(raw=True) start, end = buffer.get_bounds() self.assertEqual(tree.tostring(), wanted) press(view, '\tduss') wanted = '''\ aaa
  • foo
  • duss
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) press(view, '\n') wanted = '''\ aaa
  • foo
  • duss
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) press(view, 'CamelCase\n') wanted = '''\ aaa
  • foo
  • duss
  • CamelCase
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) press(view, '\n') wanted = '''\ aaa
  • foo
  • duss
  • CamelCase
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) # selection + * to toggle bullets start = buffer.get_iter_at_line(1) # before foo end = buffer.get_iter_at_line(4) # empty line ! buffer.select_range(start, end) press(view, '*') wanted = '''\ aaa foo
    duss CamelCase
    ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) start = buffer.get_iter_at_line(1) # before foo end = buffer.get_iter_at_line(4) # empty line ! buffer.select_range(start, end) press(view, '*') wanted = '''\ aaa
  • foo
  • duss
  • CamelCase
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) iter = buffer.get_iter_at_line(1) iter.forward_to_line_end() # behind "foo" buffer.place_cursor(iter) press(view, '\n') # because foo has children, insert indent 1 instead of 0 wanted = '''\ aaa
  • foo
  • duss
  • CamelCase
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) # Test unindenting and test backspace can remove line end press(view, (KEYVALS_BACKSPACE[0],)) # unindent wanted = '''\ aaa
  • foo
  • duss
  • CamelCase
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) press(view, (KEYVALS_LEFT_TAB[0],)) # Check does not fall through to Tab when indent fails tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) press(view, (KEYVALS_BACKSPACE[0],)) # delete bullet at once wanted = '''\ aaa
  • foo
  • duss
  • CamelCase
  • ''' tree = buffer.get_parsetree(raw=True) self.assertEqual(tree.tostring(), wanted) # TODO: this test case fails, even though it works when I try it interactively !? #~ press(view, (KEYVALS_BACKSPACE[0],)) # remove newline #~ wanted = '''\ #~ #~ aaa #~
  • foo
  • #~
  • duss
  • #~
  • CamelCase
  • #~ #~
    ''' #~ tree = buffer.get_parsetree(raw=True) #~ self.assertEqual(tree.tostring(), wanted) # TODO more unindenting ? # TODO checkboxes # TODO Auto formatting of various link types # TODO enter on link, before link, after link def testCopyPaste(self): dir = self.get_tmp_name('testCopyPaste') notebook = tests.new_notebook(fakedir=dir) page = notebook.get_page(Path('roundtrip')) parsetree = page.get_parsetree() buffer = TextBuffer(notebook, page) textview = TextView(self.preferences) textview.set_buffer(buffer) print '** HACK for cleaning up parsetree' def cleanup(parsetree): # FIXME - HACK - dump and parse as wiki first to work # around glitches in pageview parsetree dumper # main visibility when copy pasting bullet lists # Same hack in gui clipboard code from zim.notebook import Path, Page from zim.formats import get_format dumper = get_format('wiki').Dumper() text = ''.join( dumper.dump(parsetree) ).encode('utf-8') parser = get_format('wiki').Parser() parsetree = parser.parse(text) return parsetree #-- # paste Clipboard.set_parsetree(notebook, page, parsetree) with FilterNoSuchImageWarning(): textview.emit('paste-clipboard') result = buffer.get_parsetree() result = cleanup(result) self.assertEqual(result.tostring(), parsetree.tostring()) # paste replacing selection buffer.set_text('foo bar baz') buffer.select_range(*buffer.get_bounds()) # select all with FilterNoSuchImageWarning(): textview.emit('paste-clipboard') result = buffer.get_parsetree() result = cleanup(result) self.assertEqual(result.tostring(), parsetree.tostring()) # copy Clipboard.clear() self.assertIsNone(Clipboard.get_parsetree()) buffer.select_range(*buffer.get_bounds()) # select all textview.emit('copy-clipboard') result = Clipboard.get_parsetree(notebook, page) self.assertIsNotNone(result) result = cleanup(result) self.assertEqual(result.tostring(), parsetree.tostring()) # copy partial # line 33, offset 6 to 28 "try these **bold**, //italic//" in roundtrip page wanted_tree = "\n

    try these bold, italic

    " wanted_text = "try these bold, italic" # no newline ! Clipboard.clear() self.assertIsNone(Clipboard.get_parsetree()) start = buffer.get_iter_at_line_offset(33, 6) end = buffer.get_iter_at_line_offset(33, 28) buffer.select_range(start, end) textview.emit('copy-clipboard') result = Clipboard.get_parsetree(notebook, page) self.assertIsNotNone(result) self.assertEqual(result.tostring(), wanted_tree) self.assertEqual(Clipboard.get_text(), wanted_text) # cut Clipboard.clear() self.assertIsNone(Clipboard.get_parsetree()) buffer.select_range(*buffer.get_bounds()) # select all textview.emit('cut-clipboard') result = Clipboard.get_parsetree(notebook, page) self.assertIsNotNone(result) result = cleanup(result) self.assertEqual(result.tostring(), parsetree.tostring()) self.assertEqual(buffer.get_text(*buffer.get_bounds()), '') # popup menu page = tests.new_page_from_text('Foo **Bar** Baz\n') dir = self.get_tmp_name('testCopyPaste') pageview = setUpPageView(fakedir=dir) pageview.set_page(page) def get_context_menu(): buffer = pageview.view.get_buffer() buffer.select_range(*buffer.get_bounds()) # select all return pageview.view.get_popup() def click(id): menu = get_context_menu() tests.gtk_activate_menu_item(menu, id) #~ tests.gtk_activate_menu_item(menu, 'gtk-copy') #~ self.assertEqual(Clipboard.get_text(), 'Test') #~ ## Looks like this item not initialized yet menu = get_context_menu() item = tests.gtk_get_menu_item(menu, _('Copy _As...')) copy_as_menu = item.get_submenu() tests.gtk_activate_menu_item(copy_as_menu, 'Wiki') self.assertEqual(Clipboard.get_text(), 'Foo **Bar** Baz\n') tree = Clipboard.get_parsetree(pageview.ui.notebook, page) self.assertEqual(tree.tostring(), '\n

    Foo Bar Baz\n

    ') page = tests.new_page_from_text('[[bar]]') pageview.set_page(page) click(_('Copy _Link')) self.assertEqual(Clipboard.get_text(), 'Bar') tree = Clipboard.get_parsetree(pageview.ui.notebook, page) self.assertEqual(tree.tostring(), '\nBar') page = tests.new_page_from_text('[[wp?foobar]]') pageview.set_page(page) click(_('Copy _Link')) self.assertEqual(Clipboard.get_text(), 'http://en.wikipedia.org/wiki/foobar') tree = Clipboard.get_parsetree(pageview.ui.notebook, page) self.assertEqual(tree.tostring(), '\nwp?foobar') page = tests.new_page_from_text('[[~//bar.txt]]') # Extra '/' is in there to verify path gets parsed as File object pageview.set_page(page) click(_('Copy _Link')) self.assertEqual(Clipboard.get_text(), '~/bar.txt') tree = Clipboard.get_parsetree(pageview.ui.notebook, page) self.assertEqual(tree.tostring(), '\n~/bar.txt') # TODO: More popup stuff class TestPageView(tests.TestCase, TestCaseMixin): def testGetSelection(self): pageview = setUpPageView() buffer = pageview.view.get_buffer() buffer.set_text('''\ Foo bar Baz ''') iter = buffer.get_iter_at_offset(5) buffer.place_cursor(iter) self.assertEqual(pageview.get_word(), 'bar') self.assertEqual(pageview.get_selection(), 'bar') self.assertEqual(pageview.get_selection(format='wiki'), 'bar') def testAutoSelect(self): # This test indirectly tests select_word, select_line and strip_selection pageview = setUpPageView() buffer = pageview.view.get_buffer() buffer.set_text('''Test 123. foo\nline with spaces \n\n''') # select word (with / without previous selection) buffer.place_cursor(buffer.get_iter_at_offset(6)) pageview.autoselect() self.assertSelection(buffer, 0, 5, '123') pageview.autoselect() self.assertSelection(buffer, 0, 5, '123') # no change buffer.place_cursor(buffer.get_iter_at_offset(33)) pageview.autoselect() self.assertFalse(buffer.get_has_selection()) # middle of whitespace # select line (with / without previous selection) buffer.place_cursor(buffer.get_iter_at_offset(6)) pageview.autoselect() self.assertSelection(buffer, 0, 5, '123') pageview.autoselect(selectline=True) self.assertSelection(buffer, 0, 0, 'Test 123. foo') # extended pageview.autoselect(selectline=True) self.assertSelection(buffer, 0, 0, 'Test 123. foo') # no change buffer.place_cursor(buffer.get_iter_at_offset(6)) self.assertFalse(buffer.get_has_selection()) pageview.autoselect(selectline=True) self.assertSelection(buffer, 0, 0, 'Test 123. foo') # empty line buffer.place_cursor(buffer.get_iter_at_line(3)) self.assertFalse(buffer.get_has_selection()) pageview.autoselect(selectline=True) self.assertFalse(buffer.get_has_selection()) # existing selection needs stripping start = buffer.get_iter_at_offset(4) end = buffer.get_iter_at_offset(10) buffer.select_range(start, end) self.assertSelection(buffer, 0, 4, ' 123. ') pageview.autoselect() self.assertSelection(buffer, 0, 5, '123.') def testInsertLinks(self): pageview = setUpPageView() buffer = pageview.view.get_buffer() buffer.set_text('''Test 123\n''') buffer.place_cursor(buffer.get_end_iter()) pageview.insert_links((Path("foo"), File("/foo.txt"), "~/bar.txt")) wantedtext = 'Test 123\nfoo\n%s\n~/bar.txt\n' % File('/foo.txt').uri text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, wantedtext) buffer.place_cursor(buffer.get_iter_at_line(2)) buffer.select_line() pageview.insert_links(('http://cpan.org',)) wantedtext = 'Test 123\nfoo\n%s\n~/bar.txt\n' % 'http://cpan.org ' text = buffer.get_text(*buffer.get_bounds()) self.assertEqual(text, wantedtext) class TestPageviewDialogs(tests.TestCase): def testVarious(self): '''Test input/output of various pageview dialogs''' ## Insert Date dialog ui = MockUI() buffer = MockBuffer() ui.notebook.mock_method('suggest_link', Path(':suggested_link')) ui.config = ConfigManager() # need dates.list dialog = InsertDateDialog(ui, buffer) dialog.linkbutton.set_active(False) dialog.view.get_selection().select_path((0,)) dialog.assert_response_ok() self.assertEqual(buffer.mock_calls[-1][0], 'insert_at_cursor') dialog = InsertDateDialog(ui, buffer) dialog.linkbutton.set_active(True) dialog.view.get_selection().select_path((0,)) dialog.assert_response_ok() self.assertEqual(buffer.mock_calls[-1][0], 'insert_link_at_cursor') ## Insert Image dialog ui = MockUI() buffer = MockBuffer() file = File('data/zim.png') dialog = InsertImageDialog(ui, buffer, Path(':some_page'), file) self.assertTrue(dialog.filechooser.get_preview_widget_active()) #~ self.assertEqual(dialog.get_file(), file) #~ dialog.assert_response_ok() #~ self.assertEqual(buffer.mock_calls[-1][0], 'insert_image_at_cursor') ## Edit Image dialog ui = MockUI() file = File('data/zim.png') ui.notebook.mock_method('resolve_file', file) ui.notebook.mock_method('relative_filepath', './data/zim.png') buffer = TextBuffer() buffer.insert_image_at_cursor(file, '../MYPATH/./data/zim.png') dialog = EditImageDialog(ui, buffer, Path(':some_page')) self.assertEqual(dialog.form['width'], 48) self.assertEqual(dialog.form['height'], 48) dialog.form['width'] = 100 self.assertEqual(dialog.form['width'], 100) self.assertEqual(dialog.form['height'], 100) dialog.reset_dimensions() self.assertEqual(dialog.form['width'], 48) self.assertEqual(dialog.form['height'], 48) dialog.form['height'] = 24 self.assertEqual(dialog.form['width'], 24) self.assertEqual(dialog.form['height'], 24) dialog.assert_response_ok() iter = buffer.get_iter_at_offset(0) imagedata = buffer.get_image_data(iter) self.assertEqual(imagedata, { 'src': './data/zim.png', # preserve relative path '_src_file': file, 'height': 24, }) self.assertEqual(type(imagedata['height']).__name__, 'int') ## Insert text from file dialog ui = MockUI() buffer = MockBuffer() dialog = InsertTextFromFileDialog(ui, buffer) #~ dialog.set_file() #~ dialog.assert_response_ok() #~ self.assertEqual(buffer.mock_calls[-1][0], 'insert_parsetree_at_cursor') ## Find And Replace dialog ui = MockUI() textview = TextView({}) buffer = textview.get_buffer() buffer.set_text('''\ foo bar foooobar foo bar bazzz baz ''') dialog = FindAndReplaceDialog(ui, textview) dialog.find_entry.set_text('foo') dialog.replace_entry.set_text('dus') dialog.word_option_checkbox.set_active(True) dialog.replace() dialog.replace_all() self.assertEqual(buffer.get_text(*buffer.get_bounds()), '''\ dus bar foooobar dus bar bazzz baz ''') ## Word Count dialog pageview = tests.MockObject() pageview.view = textview pageview.ui = MockUI() dialog = WordCountDialog(pageview) dialog.destroy() # nothing to test really def testInsertLinkDialog(self): # Insert Link dialog ui = MockUI() ui.notebook.index = tests.MockObject() ui.notebook.index.mock_method('list_pages', []) ui.notebook.index.mock_method('walk', []) pageview = tests.MockObject() pageview.page = Path('Test:foo:bar') textview = TextView({}) pageview.view = textview dialog = InsertLinkDialog(ui, pageview) dialog.form.widgets['href'].set_text('Foo') dialog.assert_response_ok() buffer = textview.get_buffer() self.assertEqual(buffer.get_text(*buffer.get_bounds()), 'Foo') class MockUI(tests.MockObject): def __init__(self): tests.MockObject.__init__(self) self.mainwindow = None self.notebook = tests.MockObject() self.preferences = SectionedConfigDict() self.page = Path('Test') def register_preferences(self, section, preferences): for p in preferences: if len(p) == 5: key, type, category, label, default = p self.preferences[section].setdefault(key, default) else: key, type, category, label, default, check = p self.preferences[section].setdefault(key, default, check=check) class MockBuffer(tests.MockObject): pass class TestCamelCase(tests.TestCase): def testLatin(self): for text in ( 'CamelCase', 'AbbA', u'ĚěščřžýáíéúůŮěščřžýáíéúů' ): self.assertTrue( camelcase(unicode(text)), msg='"%s" should be CamelCase' % text ) for text in ( 'A', 'AAAA', 'aaaa', 'Aaaaa', 'AAAAaaa', 'aAAAAA', 'aaaAAA', '123', 'A123A123', u'ĚŠČŘŽÝÁÍÉÚŮ', u'ěščřžýáíéúů', ): self.assertFalse( camelcase(unicode(text)), msg='"%s" should NOT be CamelCase' % text ) def testArabic(self): # Arabic text should never be CamelCase, # letters test as neither upper not lower case for text in ( u'سلام', u'کهکشان', u'روزانه', u'ذائقه', u'آبادی', u'انشاء', u'محَبّت', u'اَعْداد', u'حتماً', u'ماوراء‌الطبیعه', u'پشتک‌وارو', u'راه‌راه', u' یاپ کارزنبرگ', ): assert isinstance(text, unicode) self.assertFalse( camelcase(unicode(text)), msg='"%s" should NOT be CamelCase' % text ) zim-0.65/tests/export.py0000664000175000017500000005427712614412356015175 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2014 Jaap Karssenberg from __future__ import with_statement import tests import os from zim.fs import _md5, File, Dir from zim.config import data_file, SectionedConfigDict from zim.notebook import Path, Notebook, init_notebook, \ interwiki_link, get_notebook_list, NotebookInfo #~ from zim.exporter import Exporter, StaticLinker #~ from zim.applications import Application from zim.templates import list_templates from zim.main import ExportCommand # TODO add check that attachments are copied correctly from functools import partial from zim.export import * from zim.export.layouts import * from zim.export.linker import * from zim.export.selections import * from zim.export.template import * from zim.export.exporters.files import * from zim.export.exporters.mhtml import MHTMLExporter from zim.templates import Template from zim.templates.expression import ExpressionParameter, \ ExpressionFunctionCall, ExpressionList from zim.notebook import Path from zim.command import UsageError def md5(f): return _md5(f.raw()) class TestMultiFileLayout(tests.TestCase): # dir/ # `--> _resources/ # `--> page.html # `--> page/ # `--> attachment.png def runTest(self): dir = Dir(self.get_tmp_name()) rdir = dir.subdir('_resources') layout = MultiFileLayout(dir, 'html') self.assertEqual(layout.relative_root, dir) self.assertEqual(layout.resources_dir(), rdir) for path, file, adir in ( (Path('Foo'), dir.file('Foo.html'), dir.subdir('Foo')), (Path('Foo:Bar'), dir.file('Foo/Bar.html'), dir.subdir('Foo/Bar')), ): self.assertEqual(layout.page_file(path), file) self.assertEqual(layout.attachments_dir(path), adir) self.assertRaises(PathLookupError, layout.page_file, Path(':')) layout = MultiFileLayout(dir, 'html', namespace=Path('Test')) self.assertEqual(layout.relative_root, dir) self.assertEqual(layout.resources_dir(), rdir) for path, file, adir in ( (Path('Test:Foo'), dir.file('Foo.html'), dir.subdir('Foo')), (Path('Test:Foo:Bar'), dir.file('Foo/Bar.html'), dir.subdir('Foo/Bar')), ): self.assertEqual(layout.page_file(path), file) self.assertEqual(layout.attachments_dir(path), adir) self.assertRaises(PathLookupError, layout.page_file, Path(':')) self.assertRaises(PathLookupError, layout.page_file, Path('Foo')) class TestFileLayout(tests.TestCase): # page.html # page_files/ # `--> attachment.png # `--> subpage.html # `--> subpage/attachment.pdf # `--> _resources/ def runTest(self): tdir = Dir(self.get_tmp_name()) topfile = tdir.file('page.html') dir = tdir.subdir('page_files') rdir = dir.subdir('_resources') layout = FileLayout(topfile, Path('Test'), 'html') self.assertEqual(layout.relative_root, dir) self.assertEqual(layout.resources_dir(), rdir) for path, file, adir in ( (Path('Test'), topfile, dir), (Path('Test:Foo'), dir.file('Foo.html'), dir.subdir('Foo')), (Path('Test:Foo:Bar'), dir.file('Foo/Bar.html'), dir.subdir('Foo/Bar')), ): self.assertEqual(layout.page_file(path), file) self.assertEqual(layout.attachments_dir(path), adir) self.assertRaises(PathLookupError, layout.page_file, Path(':')) self.assertRaises(PathLookupError, layout.page_file, Path('Foo')) class TestSingleFileLayout(tests.TestCase): # page.html # page_files/ # `--> attachment.png # `--> subpage/attachment.pdf # `--> _resources/ def runTest(self): tdir = Dir(self.get_tmp_name()) topfile = tdir.file('page.html') dir = tdir.subdir('page_files') rdir = dir.subdir('_resources') layout = SingleFileLayout(topfile, page=Path('Test')) self.assertEqual(layout.relative_root, dir) self.assertEqual(layout.resources_dir(), rdir) for path, file, adir in ( (Path('Test'), topfile, dir), (Path('Test:Foo'), topfile, dir.subdir('Foo')), (Path('Test:Foo:Bar'), topfile, dir.subdir('Foo/Bar')), ): self.assertEqual(layout.page_file(path), file) self.assertEqual(layout.attachments_dir(path), adir) self.assertRaises(PathLookupError, layout.page_file, Path(':')) self.assertRaises(PathLookupError, layout.page_file, Path('Foo')) class TestLinker(tests.TestCase): def runTest(self): dir = Dir(self.get_tmp_name()) notebook = tests.new_notebook(fakedir=dir.subdir('notebook')) layout = MultiFileLayout(dir.subdir('layout'), 'html') source = Path('foo:bar') output = layout.page_file(source) linker = ExportLinker(notebook, layout, source=source, output=output, usebase=True ) self.assertEqual(linker.link('+dus'), './bar/dus.html') self.assertEqual(linker.link('dus'), './dus.html') self.assertEqual(linker.link('./dus.pdf'), './bar/dus.pdf') self.assertEqual(linker.link('../dus.pdf'), './dus.pdf') self.assertEqual(linker.link('../../dus.pdf'), '../dus.pdf') self.assertEqual(linker.link('/dus.pdf'), File('/dus.pdf').uri) # TODO: # img # icon # resource # resolve_source_file # page_object # file_object # # document_root_url ## setup environment for interwiki link if os.name == 'nt': uri = 'file:///C:/foo' else: uri = 'file:///foo' list = get_notebook_list() list.append(NotebookInfo(uri, interwiki='foo')) list.write() ## href = interwiki_link('foo?Ideas:Task List') self.assertIsNotNone(href) self.assertEqual(linker.link('foo?Ideas:Task List'), uri + '/Ideas/Task_List.txt') class TestExportTemplateContext(tests.TestCase): def setUp(self): tmpdir = self.get_tmp_name() notebook = tests.new_notebook(tmpdir + '/notebook') layout = MultiFileLayout(Dir(tmpdir + '/export'), 'html') linker_factory = partial(ExportLinker, notebook=notebook, layout=layout, output=layout.page_file(Path('test')), usebase=True ) dumper_factory = get_format('html').Dumper title = 'Test Export' self.content = [notebook.get_page(Path('Test:foo'))] self.context = ExportTemplateContext( notebook, linker_factory, dumper_factory, title, self.content, special=None, home=None, up=None, prevpage=None, nextpage=None, links=None, ) def runTest(self): def get(name): param = ExpressionParameter(name) return param(self.context) # Test context setup self.assertIsInstance(get('generator.name'), basestring) self.assertTrue(get('generator.name').startswith('Zim')) self.assertIsInstance(get('generator.user'), basestring) self.assertEqual(get('title'), 'Test Export') pages = list(get('pages')) self.assertEqual(len(pages), 1) self.assertTrue(all(isinstance(o, PageProxy) for o in pages)) self.assertEqual(pages[0]._page, self.content[0]) ## TODO # pages # content # special # # navigation - links to other export pages (if not included here) # home # up # prev -- prev export file or None # next -- next export file or None # # links -- links to other export pages (index & plugins / ...) - sorted dict to have Index, Home first followed by plugins # # link # .name # .basename # Test PageProxy self.context['mypage'] = pages[0] self.assertEqual(get('mypage.title'), 'Foo') self.assertEqual(get('mypage.name'), 'Test:foo') self.assertEqual(get('mypage.namespace'), 'Test') self.assertEqual(get('mypage.basename'), 'foo') self.assertEqual(get('mypage.heading'), 'Foo') self.assertIsInstance(get('mypage.content'), basestring) self.assertIsInstance(get('mypage.body'), basestring) self.assertIsInstance(get('mypage.properties'), dict) # .links # .backlinks # .attachments # # Test HeadingsProxy mycall = ExpressionFunctionCall( ExpressionParameter('mypage.headings'), ExpressionList(), ) headings = list(mycall(self.context)) self.assertEqual(len(headings), 2) self.context['h1'] = headings[0] self.context['h2'] = headings[1] self.assertEqual(get('h1.level'), 1) self.assertEqual(get('h2.level'), 2) self.assertIsInstance(get('h1.heading'), basestring) self.assertIsInstance(get('h1.body'), basestring) self.assertIsInstance(get('h1.content'), basestring) # Test FileProxy # file # .basename # .mtime # .size # ## TODO # options -- dict with template options (for format) # # toc([page]) -- iter of headings in this page or all of pages # index([namespace]) -- index of full export job, not just in this page # uri(link|file) # resource(file) # anchor(page|section) # # From template: # range() / len() / sorted() / reversed() # strftime() # strfcal() # # test single page by "IF loop.first and loop.last" ## TODO test all of the attributes / items accesible through the ## context dict are string, expressionfunction, or proxy defined in this module ## TODO test modification of options by template ends up in context ## test setting other local paramters in template does NOT affect context object ## test setting page properties is NOT allowed ## TODO list simple template with processor to test looping through pages class TestPageSelections(tests.TestCase): def _test_iface(self, selection): self.assertIsNotNone(selection.name) self.assertIsNotNone(selection.title) self.assertIsNotNone(selection.notebook) for p in selection: self.assertIsInstance(p, Page) # TODO add alternative method to walk names for ToC # TODO add __len__ that gives total pages for progress # TODO Use collections subclass to make interface complete ? def testAllPages(self): selection = AllPages(tests.new_notebook()) self._test_iface(selection) def testSinglePage(self): notebook = tests.new_notebook() page = notebook.get_page(Path('Test')) selection = SinglePage(notebook, page) self._test_iface(selection) self.assertIsNotNone(selection.prefix) def testSubPages(self): notebook = tests.new_notebook() page = notebook.get_page(Path('Test')) selection = SinglePage(notebook, page) self._test_iface(selection) self.assertIsNotNone(selection.prefix) class TestMultiFileExporter(tests.TestCase): def runTest(self): dir = Dir(self.create_tmp_dir()) #~ dir = VirtualDir('/test') notebook = tests.new_notebook(fakedir='/foo') pages = AllPages(notebook) exporter = build_notebook_exporter(dir, 'html', 'Default') self.assertIsInstance(exporter, MultiFileExporter) exporter.export(pages) file = exporter.layout.page_file(Path('roundtrip')) text = file.read() self.assertIn('Lorem ipsum dolor sit amet', text) class TestSingleFileExporter(tests.TestCase): def runTest(self): dir = Dir(self.create_tmp_dir()) #~ dir = VirtualDir('/test') file = dir.file('export.html') notebook = tests.new_notebook(fakedir='/foo') pages = AllPages(notebook) exporter = build_single_file_exporter(file, 'html', 'Default') self.assertIsInstance(exporter, SingleFileExporter) exporter.export(pages) text = file.read() self.assertIn('Lorem ipsum dolor sit amet', text) @tests.slowTest # Slow because it uses a tmp file internally class TestMHTMLExporter(tests.TestCase): def runTest(self): dir = Dir(self.create_tmp_dir()) #~ dir = VirtualDir('/test') file = dir.file('export.mht') notebook = tests.new_notebook(fakedir='/foo') pages = AllPages(notebook) exporter = build_mhtml_file_exporter(file, 'Default') self.assertIsInstance(exporter, MHTMLExporter) exporter.export(pages) text = file.read() self.assertIn('Lorem ipsum dolor sit amet', text) class TestTemplateOptions(tests.TestCase): def runTest(self): dir = Dir(self.create_tmp_dir()) file = dir.file('test.tex') page = Path('roundtrip') exporter = build_page_exporter(file, 'latex', 'Article', page) notebook = tests.new_notebook(fakedir='/foo') selection = SinglePage(notebook, page) exporter.export(selection) result = file.read() #~ print result self.assertIn('\section{Head1}', result) # this implies that document_type "article" was indeed used class TestExportFormat(object): def runTest(self): dir = Dir(self.create_tmp_dir()) #~ dir = VirtualDir('/test') i = 0 print '' for template, file in list_templates(self.format): print 'Testing template: %s' % template notebook = tests.new_notebook(fakedir='/foo') pages = AllPages(notebook) # TODO - sub-section ? exporter = build_notebook_exporter(dir.subdir(template), self.format, template) self.assertIsInstance(exporter, MultiFileExporter) exporter.export(pages) file = exporter.layout.page_file(Path('roundtrip')) text = file.read() self.assertIn('Lorem ipsum dolor sit amet', text) i += 1 if self.format in ('html', 'latex'): self.assertTrue(i >= 3) class TestExportFormatHtml(TestExportFormat, tests.TestCase): format = 'html' class TestExportFormatLatex(TestExportFormat, tests.TestCase): format = 'latex' class TestExportFormatMarkDown(TestExportFormat, tests.TestCase): format = 'markdown' class TestExportFormatRst(TestExportFormat, tests.TestCase): format = 'rst' ## TODO test all exports templates #~ @tests.slowTest #~ class TestExportTemplateResources(TestExport): #~ #~ data = './tests/data/templates/' #~ #~ options = { #~ 'format': 'html', #~ 'template': './tests/data/templates/html/Default.html' #~ } #~ #~ def runTest(self): #~ pass # should not run, block just in case #~ #~ def testExportResources(self): #~ '''Test export notebook to html with template resources''' #~ self.export() #~ #~ file = self.dir.file('Test/foo.html') #~ self.assertTrue(file.exists()) #~ text = file.read() #~ self.assertTrue('src="../_resources/foo/bar.png"' in text) #~ self.assertTrue(self.dir.file('_resources/foo/bar.png').exists()) #~ #~ for icon in ('checked-box',): #'unchecked-box', 'xchecked-box'): #~ # Template has its own checkboxes #~ self.assertTrue(self.dir.file('_resources/%s.png' % icon).exists()) #~ self.assertNotEqual( #~ md5(self.dir.file('_resources/%s.png' % icon)), #~ md5(data_file('pixmaps/%s.png' % icon)) #~ ) #~ #~ def testListTemplates(self): #~ '''Assert list templates still works with resource folders present''' #~ import shutil #~ from zim.config import XDG_DATA_HOME #~ from zim.templates import list_templates, get_template #~ #~ # Make sure our template with resources is first in line #~ datahome = XDG_DATA_HOME.subdir('zim/templates/') #~ assert not datahome.exists() #~ shutil.copytree(self.data, datahome.path) #~ #~ for name, basename in list_templates('html'): #~ if name == 'Default': #~ self.assertEqual(basename, 'Default.html') #~ #~ template = get_template('html', 'Default') #~ self.assertEqual(template.file, datahome.file('html/Default.html').path) #~ self.assertEqual(template.resources_dir, datahome.subdir('html/Default')) #~ self.assertTrue(template.resources_dir.exists()) class TestExportCommand(tests.TestCase): def setUp(self): self.tmpdir = Dir(self.create_tmp_dir()) self.notebook = self.tmpdir.subdir('notebook') init_notebook(self.notebook) def testOptions(self): # Only testing we get a valid exporter, not the full command, # because the command is very slow ## Full notebook, minimal options cmd = ExportCommand('export') cmd.parse_options(self.notebook.path) self.assertRaises(UsageError, cmd.get_exporter, None) cmd = ExportCommand('export') cmd.parse_options(self.notebook.path, '--output', self.tmpdir.subdir('output').path, ) exp = cmd.get_exporter(None) self.assertIsInstance(exp, MultiFileExporter) self.assertIsInstance(exp.layout, MultiFileLayout) self.assertIsInstance(exp.layout.dir, Dir) self.assertIsInstance(exp.template, Template) self.assertIsNone(exp.document_root_url) self.assertIsNotNone(exp.format) self.assertIsNone(exp.index_page) ## Full notebook, full options cmd = ExportCommand('export') cmd.parse_options(self.notebook.path, '--format', 'markdown', '--template', './tests/data/TestTemplate.html', '--output', self.tmpdir.subdir('output').path, '--root-url', '/foo/', '--index-page', 'myindex', '--overwrite', ) exp = cmd.get_exporter(None) self.assertIsInstance(exp, MultiFileExporter) self.assertIsInstance(exp.layout, MultiFileLayout) self.assertIsInstance(exp.layout.dir, Dir) self.assertIsInstance(exp.template, Template) self.assertIsNotNone(exp.document_root_url) self.assertIsNotNone(exp.format) self.assertIsNotNone(exp.index_page) ## Single page cmd = ExportCommand('export') cmd.parse_options(self.notebook.path, 'Foo:Bar', '--output', self.tmpdir.subdir('output').path, ) exp = cmd.get_exporter(Path('Foo:Bar')) self.assertIsInstance(exp, MultiFileExporter) self.assertIsInstance(exp.layout, FileLayout) self.assertIsInstance(exp.layout.file, File) self.assertIsInstance(exp.template, Template) self.assertIsNone(exp.document_root_url) self.assertIsNotNone(exp.format) self.assertIsNone(exp.index_page) cmd = ExportCommand('export') cmd.parse_options(self.notebook.path, 'Foo:Bar', '--recursive', '--output', self.tmpdir.subdir('output').path, ) exp = cmd.get_exporter(Path('Foo:Bar')) self.assertIsInstance(exp, MultiFileExporter) self.assertIsInstance(exp.layout, FileLayout) self.assertIsInstance(exp.layout.file, File) self.assertIsInstance(exp.template, Template) self.assertIsNone(exp.document_root_url) self.assertIsNotNone(exp.format) self.assertIsNone(exp.index_page) cmd = ExportCommand('export') cmd.parse_options(self.notebook.path, 'Foo:Bar', '-rs', '--output', self.tmpdir.subdir('output').path, ) exp = cmd.get_exporter(Path('Foo:Bar')) self.assertIsInstance(exp, SingleFileExporter) self.assertIsInstance(exp.layout, SingleFileLayout) self.assertIsInstance(exp.layout.file, File) self.assertIsInstance(exp.template, Template) self.assertIsNone(exp.document_root_url) self.assertIsNotNone(exp.format) ## MHTML exporter cmd = ExportCommand('export') cmd.parse_options(self.notebook.path, 'Foo:Bar', '-rs', '--format', 'mhtml', '--output', self.tmpdir.subdir('output').path, ) exp = cmd.get_exporter(Path('Foo:Bar')) self.assertIsInstance(exp, MHTMLExporter) self.assertIsInstance(exp.file, File) self.assertIsInstance(exp.template, Template) self.assertIsNone(exp.document_root_url) @tests.slowTest def testExport(self): # Only test single page, just to show "run()" works file = self.notebook.file('Foo/Bar.txt') file.write('=== Foo\ntest 123\n') output = self.tmpdir.file('output.html') cmd = ExportCommand('export') cmd.parse_options(self.notebook.path, 'Foo:Bar', '--output', output.path, '--template', 'tests/data/TestTemplate.html' ) cmd.run() self.assertTrue(output.exists()) html = output.read() self.assertTrue('

    Foo' in html) self.assertTrue('test 123' in html) @tests.slowTest class TestExportDialog(tests.TestCase): def testDialog(self): '''Test ExportDialog''' from zim.gui.exportdialog import ExportDialog, ExportDoneDialog dir = Dir(self.create_tmp_dir()) notebook = tests.new_notebook(fakedir='/foo/bar') ui = tests.MockObject() ui.notebook = notebook ui.page = Path('foo') ui.mainwindow = None ui.uistate = SectionedConfigDict() ## Test export all pages dialog = ExportDialog(ui) dialog.set_page(0) page = dialog.get_page() page.form['selection'] = 'all' dialog.next_page() page = dialog.get_page() page.form['format'] = 'HTML' page.form['template'] = 'Print' dialog.next_page() page = dialog.get_page() page.form['folder'] = dir page.form['index'] = 'INDEX_PAGE' with tests.DialogContext(ExportDoneDialog): dialog.assert_response_ok() file = dir.file('Test/foo.html') self.assertTrue(file.exists()) text = file.read() self.assertTrue('' in text, 'template used') self.assertTrue('

    Foo

    ' in text) #~ print dialog.uistate self.assertEqual(dialog.uistate, ui.uistate['ExportDialog']) self.assertIsInstance(dialog.uistate['output_folder'], Dir) ## Test export single page dialog = ExportDialog(ui) dialog.set_page(0) page = dialog.get_page() page.form['selection'] = 'page' page.form['page'] = 'Test:foo' dialog.next_page() page = dialog.get_page() page.form['format'] = 'HTML' page.form['template'] = 'Print' dialog.next_page() page = dialog.get_page() page.form['file'] = dir.file('SINGLE_FILE_EXPORT.html').path with tests.DialogContext(ExportDoneDialog): dialog.assert_response_ok() file = dir.file('SINGLE_FILE_EXPORT.html') self.assertTrue(file.exists()) text = file.read() self.assertTrue('' in text, 'template used') self.assertTrue('

    Foo

    ' in text) #~ print dialog.uistate self.assertEqual(dialog.uistate, ui.uistate['ExportDialog']) self.assertIsInstance(dialog.uistate['output_file'], File) self.assertIsInstance(dialog.uistate['output_folder'], Dir) # Keep this in state as well def testLogging(self): from zim.gui.exportdialog import LogContext mylogger = logging.getLogger('zim.export') foologger = logging.getLogger('zim.foo') log_context = LogContext() with tests.LoggingFilter(message='Test'): with log_context: mylogger.warn('Test export warning') mylogger.debug('Test export debug') foologger.warn('Test foo') file = log_context.file self.assertTrue(file.exists()) #~ print ">>>\n", file.read(), "\n<<<" self.assertTrue('Test export warning' in file.read()) self.assertFalse('Test export debug' in file.read()) self.assertFalse('Test foo' in file.read()) class VirtualDir(object): def __init__(self, path): self.path = path if '/' in path: x, self.basename = path.rsplit('/', 1) else: self.basename = path self._contents = {} def file(self, path): # TODO normalize path if path in self._contents: assert isinstance(self._contents[path], VirtualFile) else: self._contents[path] = VirtualFile(self, self.path + '/' + path) return self._contents[path] def subdir(self, path): # TODO normalize path if path in self._contents: assert isinstance(self._contents[path], VirtualDir) else: self._contents[path] = VirtualDir(self.path + '/' + path) return self._contents[path] class VirtualFile(object): def __init__(self, dir, path): self.path = path if '/' in path: x, self.basename = path.rsplit('/', 1) else: self.basename = path self.dir = dir self._contents = [] def write(self, text): self._contents.append(text) def writelines(self, lines): self._contents.extend(lines) def read(self): return ''.join(self._contents) def readlines(self): return ''.join(self._contents).splitlines(True) zim-0.65/tests/signals.py0000664000175000017500000000276012374655231015306 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2013 Jaap Karssenberg from __future__ import with_statement import tests import time from zim.signals import * class TestEmitter(tests.TestCase): def runTest(self): # Test hook emitter = Emitter() self.assertIsNone(emitter.emit('foo', 'x')) emitter.connect('foo', lambda o, a: a * 3) emitter.connect('foo', lambda o, a: a * 5) self.assertEqual(emitter.emit('foo', 'x'), 'xxx') # pick first result # TODO test Connector, DelayedCallback class Emitter(SignalEmitter): __hooks__ = ('foo') class TestSignalHandler(tests.TestCase): def runTest(self): obj = ClassWithHandler() self.assertEqual(obj.count, 0) self.assertEqual(id(obj.add_one), id(obj.add_one)) # unique instance object obj.add_one() self.assertEqual(obj.count, 1) with obj.add_one.blocked(): obj.add_one() obj.add_one() obj.add_one() self.assertEqual(obj.count, 1) obj.add_one() obj.add_one() obj.add_one() self.assertEqual(obj.count, 4) class ClassWithHandler(object): def __init__(self): self.count = 0 @SignalHandler def add_one(self): self.count += 1 @tests.slowTest class TestDelayedCallback(tests.TestCase): def runTest(self): counter = tests.Counter() callback = DelayedCallback(500, lambda o: counter()) for i in range(3): callback('foo') for i in range(10): time.sleep(1) tests.gtk_process_events() if callback.timer_id is None: break self.assertEqual(counter.count, 1) zim-0.65/tests/imagegenerators.py0000664000175000017500000001605112614412356017014 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg from __future__ import with_statement import tests import gtk from zim.fs import Dir from zim.plugins.base.imagegenerator import \ ImageGeneratorClass, ImageGeneratorDialog, MainWindowExtensionBase from zim.plugins.equationeditor import InsertEquationPlugin, EquationGenerator from zim.plugins.diagrameditor import InsertDiagramPlugin, DiagramGenerator from zim.plugins.gnu_r_ploteditor import InsertGNURPlotPlugin, GNURPlotGenerator from zim.plugins.gnuplot_ploteditor import InsertGnuplotPlugin, GnuplotGenerator from zim.plugins.gnuplot_ploteditor import MainWindowExtension as GnuplotMainWindowExtension from zim.plugins.scoreeditor import InsertScorePlugin, ScoreGenerator from zim.plugins.ditaaeditor import InsertDitaaPlugin, DitaaGenerator from zim.plugins.sequencediagrameditor import InsertSequenceDiagramPlugin, SequenceDiagramGenerator @tests.slowTest class TestGenerator(tests.TestCase): pluginklass = None generatorklass = None dialogklass = ImageGeneratorDialog def _test_generator(self): plugin = self.pluginklass() extensionklass = plugin.extension_classes['MainWindow'] self.assertTrue(issubclass(extensionklass, MainWindowExtensionBase)) dir = Dir(self.get_tmp_name()) extension = extensionklass(plugin, MockWindow(dir)) generator = extension.build_generator() self.assertIsInstance(generator, ImageGeneratorClass) # Check properties self.assertIsNotNone(generator.object_type) self.assertIsNotNone(generator.scriptname) self.assertIsNotNone(generator.imagename) # Input OK generator = self.generatorklass(plugin) generator.cleanup() # ensure files did not yet exist imagefile, logfile = generator.generate_image(self.validinput) self.assertTrue(imagefile.exists()) if generator.uses_log_file: self.assertTrue(logfile.exists()) else: self.assertIsNone(logfile) # Cleanup generator.cleanup() self.assertFalse(imagefile.exists()) if generator.uses_log_file: self.assertFalse(logfile.exists()) # Input NOK if self.invalidinput is not None: generator = self.generatorklass(plugin) imagefile, logfile = generator.generate_image(self.invalidinput) self.assertIsNone(imagefile) if generator.uses_log_file: self.assertTrue(logfile.exists()) else: self.assertIsNone(logfile) # Dialog OK attachment_dir = Dir(self.create_tmp_dir()) dialog = self.dialogklass(MockUI(attachment_dir), '', generator) dialog.set_text(self.validinput) dialog.assert_response_ok() # Dialog NOK if self.invalidinput is not None: def ok_store(dialog): # Click OK in the "Store Anyway" question dialog dialog.do_response(gtk.RESPONSE_YES) with tests.DialogContext(ok_store): dialog = self.dialogklass(MockUI(attachment_dir), '<title>', generator) dialog.set_text(self.invalidinput) dialog.assert_response_ok() # Check menu #~ plugin = self.pluginklass(MockUI()) #~ menu = gtk.Menu() #~ plugin.do_populate_popup(menu, buffer, iter, image) @tests.skipUnless(InsertEquationPlugin.check_dependencies_ok(), 'Missing dependencies') class TestEquationEditor(TestGenerator): pluginklass = InsertEquationPlugin generatorklass = EquationGenerator validinput = r''' c = \sqrt{ a^2 + b^2 } \int_{-\infty}^{\infty} \frac{1}{x} \, dx f(x) = \sum_{n = 0}^{\infty} \alpha_n x^n x_{1,2}=\frac{-b\pm\sqrt{\color{Red}b^2-4ac}}{2a} \hat a \bar b \vec c x' \dot{x} \ddot{x} ''' invalidinput = r'\int_{' def runTest(self): 'Test Equation Editor plugin' TestGenerator._test_generator(self) @tests.skipUnless(InsertDiagramPlugin.check_dependencies_ok(), 'Missing dependencies') class TestDiagramEditor(TestGenerator): pluginklass = InsertDiagramPlugin generatorklass = DiagramGenerator validinput = r''' digraph G { foo -> bar bar -> baz baz -> foo } ''' invalidinput = r'sdf sdfsdf sdf' def runTest(self): 'Test Diagram Editor plugin' TestGenerator._test_generator(self) @tests.skipUnless(InsertGNURPlotPlugin.check_dependencies_ok(), 'Missing dependencies') class TestGNURPlotEditor(TestGenerator): pluginklass = InsertGNURPlotPlugin generatorklass = GNURPlotGenerator validinput = r''' x = seq(-4,4,by=0.01) y = sin(x) + 1 plot(x,y,type='l') ''' invalidinput = r'sdf sdfsdf sdf' def runTest(self): 'Test GNU R Plot Editor plugin' TestGenerator._test_generator(self) @tests.skipUnless(InsertGnuplotPlugin.check_dependencies_ok(), 'Missing dependencies') class TestGnuplotEditor(TestGenerator): pluginklass = InsertGnuplotPlugin generatorklass = GnuplotGenerator validinput = r'plot sin(x), cos(x)' invalidinput = r'sdf sdfsdf sdf' def testGenerator(self): 'Test Gnuplot Plot Editor plugin' TestGenerator._test_generator(self) @tests.skipUnless(InsertScorePlugin.check_dependencies_ok(), 'Missing dependencies') class TestScoreEditor(TestGenerator): pluginklass = InsertScorePlugin generatorklass = ScoreGenerator validinput = r''' \version "2.18.2" \relative c { \clef bass \key d \major \time 4/4 d4 a b fis g4 d g a } ''' invalidinput = r'sdf sdfsdf sdf' def runTest(self): 'Test Score Editor plugin' TestGenerator._test_generator(self) @tests.skipUnless(InsertDitaaPlugin.check_dependencies_ok(), 'Missing dependencies') class TestDitaaEditor(TestGenerator): pluginklass = InsertDitaaPlugin generatorklass = DitaaGenerator def setUp(self): self.validinput = r''' +--------+ +-------+ +-------+ | | --+ ditaa +--> | | | Text | +-------+ |diagram| |Document| |!magic!| | | | {d}| | | | | +---+----+ +-------+ +-------+ : ^ | Lots of work | +-------------------------+ ''' self.invalidinput = None # ditaa seems to render anything ... def runTest(self): 'Test Ditaa Editor plugin' TestGenerator._test_generator(self) @tests.skipUnless(InsertSequenceDiagramPlugin.check_dependencies_ok(), 'Missing dependencies') class TestSequenceDiagramEditor(TestGenerator): pluginklass = InsertSequenceDiagramPlugin generatorklass = SequenceDiagramGenerator def setUp(self): self.validinput = r''' seqdiag { browser -> webserver [label = "GET /index.html"]; browser <-- webserver; browser -> webserver [label = "POST /blog/comment"]; webserver -> database [label = "INSERT comment"]; webserver <-- database; browser <-- webserver; } ''' self.invalidinput = 'sdfsdf sdfsdf' def runTest(self): 'Test Sequence Diagram Editor plugin' TestGenerator._test_generator(self) class MockWindow(tests.MockObject): def __init__(self, dir): tests.MockObject.__init__(self) self.ui = MockUI(dir) self.ui.uistate = None self.ui.uimanager = tests.MockObject() self.pageview = tests.MockObject() self.mock_method('connect', None) class MockUI(tests.MockObject): def __init__(self, dir): tests.MockObject.__init__(self) self.notebook = tests.MockObject() self.notebook.mock_method('get_attachments_dir', dir) self.mainwindow = tests.MockObject() self.mainwindow.pageview = tests.MockObject() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/tests/tableeditor.py�����������������������������������������������������������������������0000664�0001750�0001750�00000007166�12614743207�016147� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- from __future__ import with_statement import tests from tests.pageview import setUpPageView from zim.config import ConfigDict from zim.formats import ParseTree, StubLinker from zim.formats.html import Dumper as HtmlDumper from zim.plugins.tableeditor import * from tests.pageview import setUpPageView class TestMainWindowExtension(tests.TestCase): def runTest(self): window = tests.MockObject() window.pageview = setUpPageView() window.ui = tests.MockObject() window.ui.uimanager = tests.MockObject() window.ui.uistate = ConfigDict() window.ui.mainwindow = window # XXX plugin = TableEditorPlugin() extension = MainWindowExtension(plugin, window) with tests.DialogContext(self.checkInsertTableDialog): extension.insert_table() tree = window.pageview.get_parsetree() #~ print tree.tostring() obj = tree.find('table') self.assertTrue(obj.attrib['aligns'] == 'left') self.assertTrue(obj.attrib['wraps'] == '0') # Parses tree to a table object tabledata = tree.tostring().replace("<?xml version='1.0' encoding='utf-8'?>", '')\ .replace('<zim-tree>', '').replace('</zim-tree>', '')\ .replace('<td> </td>', '<td>text</td>') table = plugin.create_table({'type': 'table'}, ElementTree.fromstring(tabledata)) self.assertTrue(isinstance(table, TableViewObject)) def checkInsertTableDialog(self, dialog): self.assertIsInstance(dialog, EditTableDialog) dialog.assert_response_ok() class TestEditTableExtension(tests.TestCase): def checkUpdateTableDialog(self, dialog): self.assertIsInstance(dialog, EditTableDialog) dialog.assert_response_ok() def testChangeTable(self): attrib = {'aligns': 'normal,normal', 'wraps': '0,0'} header = ['h1', 'h2'] rows = [['t1', 't2'],] obj = TableViewObject(attrib, header, rows, {}) widget = obj.get_widget() with tests.DialogContext(self.checkUpdateTableDialog): widget.on_change_columns(None) self.assertTrue(isinstance(widget.treeview, gtk.TreeView)) class TestTableFunctions(tests.TestCase): def testCellFormater(self): self.assertEqual(CellFormatReplacer.input_to_cell('**hello**', with_pango=True), '<b>hello</b>') self.assertEqual(CellFormatReplacer.cell_to_input('<span background="yellow">highlight</span>', with_pango=True), '__highlight__') self.assertEqual(CellFormatReplacer.zim_to_cell('<link href="./alink">hello</link>'), '<span foreground="blue">hello<span size="0">./alink</span></span>') self.assertEqual(CellFormatReplacer.cell_to_zim('<tt>code-block</tt>'), '<code>code-block</code>') class TestTableViewObject(tests.TestCase): def runTest(self): attrib = {'aligns': 'left,left', 'wraps': '0,0'} preferences = {} for headers, rows in ( ( # Two simple rows ['C1', 'C2'], [ ['a', 'b'], ['q', 'x'] ] ), ( # Some empty fields ['C1', 'C2'], [ ['a', ' '], ['q', ' '], [' ', ' '] ] ), ): obj = TableViewObject(attrib, headers, rows, preferences) data = obj.get_data() self.assertEqual(data, (headers, rows, attrib)) widget = obj.get_widget() data = obj.get_data() self.assertEqual(data, (headers, rows, attrib)) # put object in pageview and serialize pageview = setUpPageView() pageview.insert_object(obj) tree = pageview.get_parsetree() #~ print tree.tostring() # re-construct from serialized version newpageview = setUpPageView() newpageview.set_parsetree(tree) buffer = newpageview.view.get_buffer() buffer.place_cursor(buffer.get_iter_at_offset(1)) newobj = buffer.get_object_at_cursor() self.assertIsInstance(newobj, TableViewObject) data = newobj.get_data() self.assertEqual(data, (headers, rows, attrib)) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/epydoc.conf��������������������������������������������������������������������������������0000664�0001750�0001750�00000000601�12374655231�014254� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[epydoc] # Information about the project. name: Zim Desktop Wiki url: http://zim-wiki.org modules: zim # Write html output to the directory "apidocs" output: html target: apidocs/ include-log: yes # Graph options graph: classtree # Code parsing options parse: yes introspect: no # Exclude private methods and signal handlers private: no exclude: zim\.inc\..* .*\.on_.* .*\.do_.* �������������������������������������������������������������������������������������������������������������������������������zim-0.65/PKG-INFO�����������������������������������������������������������������������������������0000664�0001750�0001750�00000000423�12615422672�013220� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Metadata-Version: 1.1 Name: zim Version: 0.65 Summary: Zim desktop wiki Home-page: http://www.zim-wiki.org Author: Jaap Karssenberg Author-email: jaap.karssenberg@gmail.com License: GPL v2+ Description: UNKNOWN Platform: UNKNOWN Requires: gobject Requires: gtk Requires: xdg ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/������������������������������������������������������������������������������0000775�0001750�0001750�00000000000�12615422672�014645� 5����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/es.po�������������������������������������������������������������������������0000664�0001750�0001750�00000275307�12613750113�015622� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spanish translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-07-16 02:19+0000\n" "Last-Translator: David <davpaez@gmail.com>\n" "Language-Team: Spanish <es@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "No se pudo ejecutar la aplicación: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "retornó un status de salida diferente a cero %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Error al completar el %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Predeterminado" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Parece que encontró un error" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "No existe el archivo: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "No se pudo leer: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" "Esto generalmente significa que el archivo contiene caracteres no válidos" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detalles" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "El Archivo no se puede escribir: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "%s de los archivos del disco han sido cambiados" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Personalizar…" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "No se encontraron aplicaciones" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Abrir con \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Configurar una aplicación para abrir los enlaces \"%s\"" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "Configurar una aplicación para abrir los archivos de tipo \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Configurar aplicaciones" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Añadir aplicación" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Predeterminado del sistema" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nombre" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Comando" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Hacer esta aplicación la aplicación por defecto" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "No se puede encontrar el ejecutable \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Herramientas personalizadas" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Puede configurar herramientas personalizadas que aparecerán\n" "en el menú de herramientas y en la barra de herramientas o los menús " "contextuales." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Editar herramienta personalizada" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Descripción" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Icono" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "El comando no modifica datos" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "La salida debe reemplazar la selección actual" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Mostrar en la barra de herramientas" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Los parámetros siguientes serán sustituídos\n" "en el comando cuando este se ejecute:\n" "<tt>\n" "<b>%f</b> la página fuente como un archivo temporal\n" "<b>%d</b> el directorio de adjuntos de la página actual\n" "<b>%s</b> el archivo fuente real de la página (si lo hay)\n" "<b>%n</b> la ubicación del cuaderno (archivo o carpeta)\n" "<b>%D</b> la raíz del documento (si la hay)\n" "<b>%t</b> el texto seleccionado o palabra bajo el cursor\n" "<b>%T</b> el texto seleccionado incluyendo formato de wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportar" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Actualizando índice" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Exportando cuaderno de notas" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "La carpeta existe: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "La carpeta existe y no está vacía, si exporta a esta carpeta puede " "sobreescribirse el contenido de la misma. ¿Desea continuar?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "El archivo ya existe" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Este archivo ya existe.\n" "¿Quiere sobrescribirlo?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Seleccione la(s) página(s) a exportar" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Cuaderno de _notas completo" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Una página" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Página" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Incluir subpáginas" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Seleccione el formato de exportación" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Otro..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Dar formato" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Plantilla" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" "Enlace los ficheros del directorio raíz de documentos con su ruta completa" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Mapear la raíz del documento al URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Obtener más plantillas de Internet" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Seleccione el archivo o carpeta de salida" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Exportar cada página a un archivo separado" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Exportar todas las páginas a un único archivo" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Directorio de salida" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Índice de páginas" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Archivo de salida" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "Han ocurrido %i errores, revise el registro" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "Han ocurrido %i advertencias, revise el registro" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Exportación completa" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Ver _registro" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Archivo" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Editar" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Ver" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Insertar" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Buscar" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_Formato" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Herramientas" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "I_r" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "Ay_uda" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "B_arra de direcciones" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Barra de herramientas" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nueva página" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nueva s_ubpágina" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Abrir otro cuaderno de notas" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Abrir en una _ventana nueva" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importar página..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Guardar" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Guardad una c_opia" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xportar..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Enviar a…" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Mover página..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Renombrar página..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Borrar Página" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "P_ropiedades" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Cerrar" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Salir" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Buscar..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Lo que _enlaza aquí..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Cambios Recientes" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copiar _lugar" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Plantillas" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Pr_eferencias" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Recargar" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Abrir _Carpeta de Adjuntos" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Abrir un directorio de libreta de notas" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Abrir Raíz de _Documentos" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Abrir la Carpeta del _Documento" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Adjuntar _Archivo" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Adjuntar archivo externo" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Editar _Código" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Arrancar _Servidor Web" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Actualizar índice" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Herramien_tas personalizadas" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "A_trás" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Ir a página anterior" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "A_delante" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Ir a página siguiente" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Padre" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Ir a la página padre" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Hija" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Ir a página hija" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Anterior en el índice" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Ir a la página anterior" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Siguiente en el índice" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Ir a la página siguiente" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Inicio" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Ir al inicio" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Sa_ltar a..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Contenidos" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "Preguntas _frecuentes" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Atajos de teclado" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Errores" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "Acerca _de" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Todos los paneles" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Mostrar todos los paneles" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Barra de _estado" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_paneles laterales" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Mostrar los paneles laterales" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Pantalla completa" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Cuaderno Editable" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Marcar cuaderno como editable" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Ninguno" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "Páginas _recientes" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Páginas Cambiadas Recientemente" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historial" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Iconos _y Texto" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "_Sólo íconos" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Sólo _Texto" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "Íconos _Grandes" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Íconos _Pequeños" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Íconos _minúsculos" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Adicionar banda de liberación a los menúes" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Use <Ctrl><Space> para cambiar al panel lateral" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Eliminar enlaces cuando se borren las páginas" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" "Utilizar siempre la última posición del cursor cuando se abre una página" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "El archivo o carpeta que especificó no existe.\n" "Por favor chequee si el camino es el correcto." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "No existe el archivo o carpeta: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "La página tiene cambios sin guardar" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "¿Actualizar la libreta de notas?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Esta libreta a sido creada con una versión antigua de zim.\n" "Desea actualizarla a la última versión ahora?\n" "\n" "Actualizar podría tomas algún tiempo y podría hacer algunos cambios\n" "a la libreta. En general es una buena idea hacer un\n" "respaldo antes de hacer esto.\n" "\n" "Si usted elige no actualizar ahora, algunas catacteristicas\n" "pueden no funcionar como se esperan" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Actualizando la libreta de notas" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "El índice está aún ocupado actualizando. Hasta que esto termine los enlaces " "no pueden ser actualizados correctamente. Ejecutando esta acción ahora puede " "romper enlaces, ¿desea continuar de todos modos?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Actualizando enlaces" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Eliminando enlaces" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "¿Crear carpeta?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "El directorio \"%s\" no existe ¿Desea crear uno nuevo ahora?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "No se puede abrir: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Esta página no tiene una carpeta para archivos adjuntos" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Editando el archivo. %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Está editando el archivo en una aplicación externa. Puede cerrar este " "dialogo cuando este listo" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Una wiki de escritorio" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Adolfo Jayme https://launchpad.net/~fitojb\n" " Alberto Guerra Linares https://launchpad.net/~bebetoguerra\n" " Antonio Maldonado https://launchpad.net/~a.m.\n" " Carlos Albornoz https://launchpad.net/~caralbornozc\n" " Charles Edward Bedón Cortázar https://launchpad.net/~charles-bedon\n" " David https://launchpad.net/~davpaez\n" " DiegoJ https://launchpad.net/~diegojromerolopez\n" " Eduardo Alberto Calvo https://launchpad.net/~edu5800\n" " Fido https://launchpad.net/~fedevera\n" " Gonzalo Testa https://launchpad.net/~gonzalogtesta\n" " Hector A. Mantellini https://launchpad.net/~xombra\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Janzun https://launchpad.net/~janzun-w\n" " Javier Rovegno Campos https://launchpad.net/~jrovegno\n" " Jonay https://launchpad.net/~jonay-santana\n" " Juan Ignacio Pucheu https://launchpad.net/~jpucheu\n" " Ktl__XV https://launchpad.net/~jorgegil222\n" " Lex https://launchpad.net/~lex-exe\n" " Mariano Draghi https://launchpad.net/~chaghi\n" " Mariano Esteban https://launchpad.net/~mesteban\n" " Monkey https://launchpad.net/~monkey-libre\n" " Pablo Angulo https://launchpad.net/~pablo-angulo\n" " Paco Molinero https://launchpad.net/~franciscomol\n" " Reynaldo Cordero https://launchpad.net/~reynaldo-cordero\n" " Servilio Afre Puentes https://launchpad.net/~servilio\n" " Ubuntu https://launchpad.net/~invrom-deactivatedaccount1-" "deactivatedaccount-deactivatedaccount\n" " sanzoperez https://launchpad.net/~sanzoperez\n" " victor tejada yau https://launchpad.net/~victormtyau" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Indice" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "sólo lectura" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Buscar" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Buscar en Páginas..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Enlace hacia atrás..." msgstr[1] "%i _Enlaces hacia atrás..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "No se pudo guardar la página: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Para continuar puede guardar una copia de esta página o\n" "descartar los cambios. Si guarda una copia también se\n" "descartarán los cambios, pero podrá restaurarla más adelante." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Descartar Cambios" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "Guardar una _copia" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Saltar a" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Saltar a página" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Sub página nueva" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Página nueva" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Por favor, note que enlazando a una página inexistente\n" "también crea una nueva página automáticamente." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Nombre de la página" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Plantilla de página" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "La página ya existe" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Guardar una copia" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importar página" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Archivos de Texto" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Mover página" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Mover página \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Actualizar %i página enlazando a ésta" msgstr[1] "Actualizar %i páginas enlazando a ésta" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Sección" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Renombrar Página" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Renombrar página \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Actualizar el encabezamiento de ésta página" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Borrar página" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Borrar página \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "La página «%s» y todas sus\n" "sub-páginas serán borradas" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Eliminar enlaces de %i página enlazando a está página" msgstr[1] "Eliminar enlaces de %i páginas enlazando a está página" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i archivo será borrado" msgstr[1] "%i archivos serán borrados" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Adjuntar Archivo" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "La página \"%s\" no tiene una carpeta para archivos adjuntos" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Insertar imágenes como enlaces" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Cuaderno" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Abrir cuaderno" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Cuaderno predeterminado" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Añadir cuaderno" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Por favor, seleccione un nombre y carpeta para el cuaderno de notas" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Carpeta" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Ninguna extensión esta disponible para mostrar este objeto." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "La extensión %s es requerida para mostrar este objeto." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Actualizando el índice..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Deshacer" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Rehacer" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Cor_tar" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copiar" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Pegar" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Borrar" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Alternar marca de cotejo" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Alternar cruz" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Editar Enlace u Objeto..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Eliminar enlace" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Fecha y hora..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Imagen…" #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Lista Bulle_t" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Lista _numerada" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Lista Checkbo_x" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Texto Desde _Archivo..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Enlace" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Inserta un enlace" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Limpiar formatos" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Buscar…" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Buscar _siguiente" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Buscar _anterior" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Reemplazar…" #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Conteo de palabras..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Ampliar" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Al_ejar" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Tamaño _normal" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nuevo _Adjunto" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Plantilla de _Archivo" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Encabezado _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Encabezado 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Encabezado _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Encabezado 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Encabezado _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Encabezado 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Encabezado _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Encabezado 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Encabezado _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Encabezado 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "Negrita_s" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Negritas" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Énfasis" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Énfasis" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Marcar" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Marcar" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Tachar" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Tachar" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "Su_bíndice" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "Su_períndice" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Literal" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Literal" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Use la tecla <Intro> para seguir enlaces\n" "(si está deshabilitado aún puede usar <Alt><Intro>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Mostrar el cursor en páginas no editables" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Convertir automáticamente palabras \"CamelCase\" en enlaces" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Convertir automáticamente rutas de archivo en enlaces" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Seleccionar automáticamente la palabra actual al aplicar un formato" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Desindentar con <Retroceso>\n" "(Si no se activa, puede usar <Mays><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Hacer click varias veces en una casilla alterna entre sus estados" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "(Des-)Indentando un artículo de una lista también cambia sub-artículos" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Activar una marca de cotejo también cambia sub-artículos" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Reformatear marcado de wiki al vuelo" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Formato predeterminado para copiar texto a la papelera" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Carpeta con plantillas para archivos adjuntos" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "El wiki no está definido: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Copiar _como…" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Mover texto seleccionado…" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Editar Propiedades" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Editar enlace" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copiar en_lace" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copiar dirección de correo-e" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Abrir carpeta" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Abrir Con..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Abrir" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "No hay ninguna plantilla instalada" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "El directorio\n" "%s\n" "no existe aún.\n" "¿Quiere crearlo ahora?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Introduzca fecha y hora" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendario" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "En_lazar a la fecha" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Insertar imagen" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Adjuntar imagen primero" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Tipo de archivo no soportado: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Editar imagen" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Ubicación" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Enlazar con" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Ancho" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Altura" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Restaurar Tamaño" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Insertar Texto desde Archivo" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Editar enlace" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "En_lace" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Texto" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Siguiente" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Previo" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Coincidir mayúsculas y minúsculas" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Toda la _palabra" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Expresión _regular" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "Resaltado" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Buscar" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opciones" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Encontrar y reemplazar" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Econtrar qué" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Reemplazar con" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Reemplazar" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Reemplazar _Todos" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Contar palabras" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Párrafo" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Selección" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Palabras" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Líneas" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Letras" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Caracteres excluyendo espacios" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Mover texto a otra página" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Mover" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Mover texto a" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Dejar enlace a la página nueva" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Abrir una página nueva" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Archivo nuevo" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interfaz" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Editando" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Preferencias" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Extensiones" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Aplicaciones" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Usar tipografía personalizada" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Más" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Configurar" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Obtener más extensiones en Internet" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dependencias" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Sin dependencias" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Aceptar" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Falló" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Opcional" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Habilitado" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Extensión" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configurar extensión" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opciones para la extensión %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Establecer editor de texto por defecto" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Propiedades" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Propiedades del Cuaderno" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Cambios recientes" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Hoy" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Ayer" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Última Modificación" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Para búsquedas avanzadas puede user operadores\n" "como «AND», «OR» y «NOT». Vea la página de ayuda\n" "para más detalles." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Limitar búsqueda a la página actual y sus subpáginas" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Puntuación" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Servidor web" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "El servidor no ha arrancado" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Permitir acceso público" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Puerto" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Servidor arrancado" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Servidor detenido" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Plantillas" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Examinar" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Copiar Plantilla" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Seleccione el archivo" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Expandir _todo" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Contraer todo" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Vaciar" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Seleccione la carpeta" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Seleccionar Imagen" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Inicio>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Panel lateral izquierdo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Panel lateral derecho" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Panel inferior" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Panel superior" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Esquina superior izquierda" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Esquina inferior izquierda" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Esquina superior derecha" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Esquina inferior derecha" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Cuando reporte este error por favor incluya\n" "la información en el recuadro de texto debajo" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Todos los Archivos" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Imágenes" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Archivo de registro" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "El archivo ya existe" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Un archivo con el nombre <b>\"%s\"</b> ya existe.\n" "Puede usar otro nombre o sobreescribir el archivo existente." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nombre del archivo" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Examinar" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Sobreescribir" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "No se pudo encontrar el archivo o carpeta para este cuaderno" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Por favor especifique un cuaderno" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "No se pudo encontrar el cuaderno: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Se requiere la ubicación para exportar" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "La carpeta de salida existe y no está vacía, especifique \"--overwrite\" " "para forzar la exportación." #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "El nombre de página introducido no es válido.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nombre de página inválido \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "El índice está aún ocupado actualizando mientras intentamos\n" "hacer una operación que necesita el índice.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "No se puede modificar la página: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Teclado Interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Página personal" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Documento raíz" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Perfil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmética" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Este plugin le permite insertar cálculos aritméticos en Zim. Está basado en " "el módulo aritmético de http://pp.com.mx/python/arithmetic\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmético" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Desconocida" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Tipo" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Tamaño" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Modificado" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Mover aquí" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Copiar aquí" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Cancelar" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Adjuntar Navegador" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Posición en la ventana" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Anexos" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Mostrar el explorador de datos adjuntos" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i_Adjunto" msgstr[1] "%i_Adjuntos" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Panel Backlinks" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este plugin agrega un widget extra que muestra una lista de páginas\n" "enlazadas a la página actual.\n" "\n" "Es un plugin propio de zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "BackLinks" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Vista previa" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Ocurrió un error mientras se generaba la imagen.\n" "¿Desea guardar el texto fuente de todos modos?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Diario" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Día" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Semana" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Mes" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Año" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Mostrar el calendario en el panel lateral en vez de como diálogo" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Usar una página por cada" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Hoy" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Calendario" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calendario" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Hoy" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Insertar diagrama" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión provee un editor de diagramas basado en GraphViz.\n" "\n" "Esta es una extensión principal que se suministra con zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_grama..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Insertar diagrama" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Edición sin distracciones" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Este plugin agrega configuraciones que ayudan a usar zim\n" "como un editor libre de distracciones.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Esconder la barra de menu en el modo pantalla completa" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Esconder la barra de herramientas en el modo pantalla completa" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Esconder la barra de direcciones en el modo pantalla completa" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Esconder la barra de status en el modo pantalla completa" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Ancho de página máximo" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Margen vertical" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Color del texto de fondo" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "color de texto" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "color de fondo de pantalla" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Insertar Diagrama" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión proporciona un editor de diagramas para Zim basado en Ditaa.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "Editar diagrama" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Insertar ecuación" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión provee un editor de ecuaciones basdo en LaTeX.\n" "\n" "Esta es una extensión principal suministrada con zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Editar ecuación" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Insertar Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Este plugin proporciona un editor gráfico de zim basado en Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Editar Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Insertar gráfico de GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Esta extensión provee un editor de gráficos basado en GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Editar gráfico de GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "El complemento de calculadora en línea\n" "no pudo evaluar la expresión en el cursor." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Calculadora en línea" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento le permite evaluar rápidamente\n" "expresiones matemáticas simples en Zim.\n" "\n" "Este es un complemento incluido en la base de Zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "No se pudo analizar la expresión" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Evaluar _matemática" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Insertar símbolo" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión adiciona el diálogo \"Insertar símbolo\"\n" "y permite el formateado automático de caracteres\n" "tipográficos.\n" "\n" "Esta es una extensión principal suministrada con zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sí_mbolo..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Ordenador de líneas" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Este plugin ordena alfabéticamente las líneas seleccionadas . \n" "Si la lista ya está ordenada invierte el orden\n" " (AZ para ZA).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Ordenar líneas" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Por favor, seleccione más de una línea de texto primero." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mapa de Enlaces" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión provee un diálogo con una\n" "representación gráfica de la estructura de enlaces\n" "del cuaderno. Puede ser usada como especie de\n" "mapa mental que muestra como las páginas se\n" "relacionan entre sí.\n" "\n" "Esta es una extensión principal suministrada con zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Mostrar Mapa de Enlaces" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Imprimir al Navegador" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión provee una solución alternativa para la\n" "falta de soporte de impresión en zim. La página actual\n" "se exporta a HTML y se abre en un navegador.\n" "Asumiendo que el navegador tienen soporte para\n" "impresión esto lleva sus datos a la impresora en dos\n" "pasos.\n" "\n" "Esta es una extensión principal suministrada con zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "Imprimir al na_vegador" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Nota rápida" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión adiciona una caja de diálogo para lanzar unas\n" "rápidamente un texto o el contenido del portapapeles dentro de\n" "página.\n" "\n" "Esta es una extensión principal suministrada con zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Nota rápida..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Crear una página nueva para cada nota" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Título" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Abrir _página" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "¿Desea borrar la nota?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Agregar puntaje" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este plugin provee a zim un editor de puntaje basado en GNU Lilypond.\n" "\n" "Este plugin viene con zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Incluir cabecera común" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Incluir pié de página común" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Edit Puntaje" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Insertar captura de pantalla" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento permite tomar una captura de pantalla\n" "e insertarla directamente en una página de Zim.\n" "\n" "Este es un complemento incluido en la base de Zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Captura de pantalla…" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Capturar pantalla completa" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Seleccionar ventana o región" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Retardo" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "segundos" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Ocurrió un error al ejecutar «%s»" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Corrector ortográfico" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Adiciona corrección ortográfica usando gtkspell.\n" "\n" "Esta es una extensión principal suministrada con zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Revisar _ortografía" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Esto puede significar que no tiene el diccionario\n" "apropiado instalado." #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Índice de contenidos" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión añade un espacio extra que muestra una tabla de contenidos " "para la página actual.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" "Mostrar Tabla_de_Contenido como un espacio a parte en lugar de en el panel " "principal" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Tabla_de_Contenido" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Inferior" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Superior" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etiquetas" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Este plugin ofrece un índice filtrado seleccionado de las etiquetas en una " "nube.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Ordenar páginas por etiquetas" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "sin etiquetar" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Ordenar alfabéticamente" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Lista de tareas" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento añade un diálogo que muestra todas las\n" "tareas pendientes de este cuaderno, sean cajas sin marcar \n" "o listas marcadas con las etiquetas \"TODO\" o \"FIXME\".\n" "\n" "Este es un complemento principal que se suministra con zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Considerar todas las marcas de cotejo como tareas" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Convertir el nombre de la página a etiquetas para las tareas" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "La fecha límite está implícita en las tareas del calendario" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Las tareas marcadas vencen el lunes o el martes antes del fin de semana" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Etiquetas que marcan tareas" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Etiqueta para la tarea siguiente" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Etiquetas para tareas no accionables" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Subárbol al índice" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Sub-árbol a ignorar" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Se necesita indizar el cuaderno de notas" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Esta es la primera vez que se abre la lista de\n" "tareas. Por tanto el índice necesita reconstruirse.\n" "Dependiendo del tamaño del cuaderno esto puede\n" "tomar varios minutos. La próxima vez que use la\n" "lista de tareas esto no será necesario de nuevo." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtrar" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Mostrar sólo tareas con acción" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i artículo abierto" msgstr[1] "%i artículos abiertos" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Todas las tareas" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Sin Etiqueta" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Tarea" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Fecha" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Icono del área de notificación" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento añade un icono en la bandeja del sistema\n" "para acceso rápido.\n" "\n" "Depende de: gtk versión 2.10 o mayor.\n" "\n" "Este es un complemento principal que se suministra con zim\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Bandeja del sistema clásica,\n" "no usar el nuevo estilo de ícono de estado en Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Mostrar un ícono separado para cada cuaderno" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "Nota _rápida..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Otro…" #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Cuadernos de notas" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Wiki de escritorio" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Control de versiones" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esta extensión añade control de versiones para las notas.\n" "Soporta los siguientes sistemas: Bazaar, Git y Mercurial.\n" "Es una extensión integrada e incluida por defecto en Zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Auto-guardar una versión a intervalos regulares" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Versión guardada automáticamente desde zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Gu_ardar versión" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versiones..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "No hay cambios en esta libreta de notas desde la última vez que se guardo" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Sin cambios desde la última versión" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "¿Activar control de versiones?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "El control de versiones no se ha habilitado para este cuaderno.\n" "¿Desea habilitarlo?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Administración" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Guardar versión" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Por favor, entre un comentario para esta versión" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versión guardada desde zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versiones" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Página" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Ver con _Anotaciones" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Seleccione una versión para ver los cambios entre esa versión y el estado " "actual.\n" "O seleccione multiples versiones para ver los cambios entre ellas.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Comentario" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Restaurar versión" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Mostrar _cambios" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "Lado a lado" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Fuente anotada de la página" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "¿Restaurar la página a su versión guardada?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "¿Desea restaurar la página: %(page)s\n" "a su versión guardada: %(version)s ?\n" "\n" "¡Todos los cambios hechos desde la versión guardada se perderán!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Cambios" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev." #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Registrar los eventos con Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Envía los eventos al daemon Zeitgeist" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Página Wiki: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Slow file system" #~ msgstr "Sistema de archivos lento" #~ msgid "Text Editor" #~ msgstr "Editor de texto" #~ msgid "File browser" #~ msgstr "Explorador de archivos" #~ msgid "Output" #~ msgstr "Salida" #~ msgid "Match c_ase" #~ msgstr "Coincidir m_ayúsculas y minúsculas" #~ msgid "Pages" #~ msgstr "Páginas" #~ msgid "Prio" #~ msgstr "Prioridad" #~ msgid "_Filter" #~ msgstr "_Filtro" #~ msgid "Web browser" #~ msgstr "Navegador web" #~ msgid "Email client" #~ msgstr "Cliente de correo-e" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/he.po�������������������������������������������������������������������������0000664�0001750�0001750�00000274125�12613750113�015604� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Hebrew translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2012-10-06 21:09+0000\n" "Last-Translator: Yaron <sh.yaron@gmail.com>\n" "Language-Team: Hebrew <he@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "כישלון בנסיון להריץ תוכנה: %s‏" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "החזיר קוד יציאה שונה מאפס %(code)i‏" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "‏כשלון בהפעלת: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "בררת מחדל" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "כנראה שמצאת שגיאה בתכנית" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "אין קובץ כזה: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "לא ניתן לקרוא: %s‏" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "בדרך הכלל זאת אומרת שהקובץ קלט כולל תוים בלתי חוקיים.‏" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "פרטים" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "‏קובץ אין ניתן לכתיבה: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "קובץ בקונן השתנה: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "התאם אישית..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "לא נמצאו יישומים מתאימות." #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "פתיחה באמצעות \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "הגדר יישום לפתוח קישורים מסוג: %s" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "הגדר יישום לפתוח קבצים מסוג: %s" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "הגדר יישומים" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "הוסף יישום" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "ברירת המחדל של המערכת" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "שם" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "פקודה" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "עשה כיישום בחירת מחדל" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "כלים מותאמים" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "ניתן להגדיר את הכלים המותאמים שיופיעו\n" "בסרגל הכלים או בתפריטי ההקשר." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "עריכת הכלים המותאמים" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "תיאור" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "סמל" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "הפקודה אינה משנה את הנתונים" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "הצגה בסרגל כלים" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "הפרמטרים הבאים יוחלפו בפקודה כשיופעלו:\n" "<tt>\n" "<b>%f</b> מקור העמוד כקובץ זמני\n" "<b>%d</b> תיקיית הקבצים המצורפים של העמוד הנוכחי\n" "<b>%s</b> קובץ המקור האמתי של העמוד (אם יש כזה)\n" "<b>%n</b> מיקום הקלסר (קובץ או תיקייה)\n" "<b>%D</b> שורש המסמך (אם יש כזה)\n" "<b>%t</b> הטקסט או המילה שמתחת לסמן העכבר\n" "<b>%T</b> הטקסט הנבחר לרבות עיצוב הוויקי\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "ייצוא" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "המפתח מתעדכן" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "ייצוא מחברת" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "התיקייה קיימת: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "התיקייה כבר קיימת ויש בה תוכן, ייצוא תיקייה זו עלול לשכתב על קבצים קיימים. " "האם ברצונך להמשיך?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "הקובץ קיים" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "קובץ זה כבר קיים.\n" "האם ברצונך לשכתב עליו?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "בחירת העמודים ליצוא" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "כל ה_מחברת" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "עמוד _יחיד" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "עמוד" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "בחירת מבנה הפלט" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "אחר..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "מבנה" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "תבנית" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "קישור קבצים תחת שורש המסמכים עם נתיב מלא לקובץ" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "מיפוי שורש המסמכים לכתובת באינטרנט" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "בחירת קובץ או תיקיית הפלט" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "תיקיית הפלט" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "עמוד מפתח" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "קובץ פלט" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "הצ_גת רישום" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_קובץ" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "ע_ריכה" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_תצוגה" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "ה_וספה" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_חיפוש" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_עיצוב" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_כלים" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_מעבר" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "ע_זרה" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "סרגל _נתיב" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "סרגל _כלים" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_עמוד חדש..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "_תת־עמוד חדש..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "פתיחת מחברת א_חרת..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "פתיחה ב_חלון חדש" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "יי_בוא עמוד..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_שמירה" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "שמירת _עותק..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "יי_צוא..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "ש_ליחה אל..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "ה_עברת עמוד..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "שי_נוי שם של עמוד..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "מ_חיקת עמוד" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "מא_פיינים" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_סגירה" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "י_ציאה" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_חיפוש..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "חיפוש קישורים _מפנים..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "הע_תק מיקום" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_תבניות" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "ה_עדפות" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_רענון" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "פתיחת _תיקיית הקבצים המצורפים" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "פתיחת תיקיית ה_מחברת" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "פתיחת _שורש המסמכים" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "פתיחת תיקיית ה_מסמכים" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "צירוף _קובץ" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "צירוף קובץ חיצוני" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "עריכת ה_מקור" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "ה_פעלת שרת אינטרנט" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "לחדש מפתח דפים" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "_כלים מותאמים" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "ח_זרה" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "חזרה לעמוד הקודם" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_קדימה" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "מעבר לעמוד הבא" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "הו_רה" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "מעבר לדף ההורה" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_צאצא" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "מעבר לעמוד הצאצא" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "ה_קודם במפתח" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "מעבר לעמוד הקודם" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "ה_בא במפתח" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "מעבר לעמוד הבא" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "דף ה_בית" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "מעבר לדף הבית" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_מעבר אל..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_תכנים" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_שאלות נפוצות" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_קיצורי מקלדת" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_תקלות" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "על _אודות" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "כל הלוחות" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "הראה כל הלוחות" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "שורת המ_צב" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "לוחות צד" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "הראה לוחות צד" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "מ_סך מלא" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "המחברת _ניתנת לעריכה" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "נעילה/שחרור המחברת לעריכה" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_ללא" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "עמודים _אחרונים" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "היס_טוריה" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "סמלים ו_טקסט" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "ס_מלים בלבד" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "טקסט _בלבד" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "סמלים _גדולים" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "סמלים _קטנים" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "סמלים קט_נטנים" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "הוסף רצועות 'זריזות' לתפריטים" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "יש להשתמש ב־<Ctrl><רווח> כדי לעבור לחלונית הצד" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "יש להסיר קישורים בעת מחיקת דפים" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "השאיר סמן במקום האחרון שלו בפתיחת דפים." #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "הקובץ או התיקייה שצוינו אינם קיימים.\n" "יש לבדוק האם הנתיב נכון." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "הקובץ או התיקייה אינם קיימים: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "האם לשדרג את המחברת?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "מחברת זו נוצרה בגרסה ישנה יותר של zim.\n" "האם ברצונך לשדרג אותה לגרסה העדכנית ביותר כעת?\n" "\n" "השדרוג עלול לערוך זמן מה וליצור כמה שינויים למחברת.\n" "על פי רוב מומלץ להכין גיבויים בטרם ביצוע פעולה זו.\n" "\n" "אם המחברת לא תשודרג כעת, כמה מהתכונות עלולות\n" "שלא לעבוד כמצופה." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "המחברת משתדרגת" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "האינדקס עדיין עסוק בעדכון. עד שתהליך זה יסתיים לא ניתן לעדכן קישורים כראוי. " "ביצוע פעולה זו ישבור קישורים, האם ברצונך להמשיך בכל זאת?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "הקישורים מתעדכנים" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "הקישורים מוסרים" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "האם ליצור תיקייה?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "לא ניתן לפתוח: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "לעמוד זה אין תיקיית קבצים מצורפים" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "קובץ בעריכה: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "קובץ זה נערך על ידיך ביישום חיצוני. באפשרותך לסגור את תיבת דו־שיח זו עם " "הסיום." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "ויקי לשולחן העבודה" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Beni Cherniavsky https://launchpad.net/~cben\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Yaron https://launchpad.net/~sh-yaron\n" " dotancohen https://launchpad.net/~dotancohen" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "מפתח" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "לקריאה בלבד" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "חיפוש" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i קישור מ_פנה אחד..." msgstr[1] "%i קישורים מ_פנים..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "לא ניתן לשמור את העמוד: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "כדי להמשיך ניתן לשמור עותק של עמוד זה או להתעלם\n" "משינויים כלשהם. אם ישמר עותק השינויים ייעלמו גם כן,\n" "אך ניתן לשחזר את העותק מאוחר יותר." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "ה_תעלמות מהשינויים" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_שמירת עותק" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "מעבר אל" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "מעבר לעמוד" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "תת־עמוד חדש" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "עמוד חדש" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "נא לשים לב כי קישור לעמוד שאינו קיים\n" "יוצר עמוד חדש אוטומטית." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "שם העמוד" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "תבנית דף" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "העמוד קיים" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "שמירת עותק" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "ייבוא עמוד" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "קובצי טקסט" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "העברת עמוד" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "העברת העמוד \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "%i עדכון עמוד אחד המפנה לעמוד זה" msgstr[1] "עדכון %i עמודים המפנים לעמוד זה" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "שינוי שם העמוד" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "שינוי שם העמוד \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "עדכון כותרת עמוד זה" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "מחיקת עמוד" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "האם למחוק את העמוד \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "העמוד \"%s\" על כל תת־עמודיו\n" "והקבצים המצורפים לו ימחקו" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "%i הסרת קישורים מהעמוד המפנה לעמוד זה" msgstr[1] "הסרת קישורים מ־%i העמודים המפנים לעמוד זה" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i קובץ אחד יימחק" msgstr[1] "%i קבצים יימחקו" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "צירוף קובץ" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "לעמוד \"%s\" אין תיקייה לקבצים מצורפים" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "הוספת תמונות כקישור" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "מחברת" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "פתיחת מחברת" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "מחברת ברירת המחדל" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "הוספת מחברת" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "נא לבחור שם ותיקייה למחברת." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "תיקייה" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "המפתח מתעדכן..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_ביטול" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_ביצוע שוב" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_גזירה" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "ה_עתקה" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "ה_דבקה" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "מ_חיקה" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "החלפת מצב תיבת 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "החלפת מצב תיבת 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "עריכת _קישור או פריט..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "ה_סרת קישור" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "ת_אריך ושעה..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_תמונה..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "רשימת ת_בליטים" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "רשימה ממוספרת" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "רשימת תיבות _סימון" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "טקסט מ_קובץ..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "ק_ישור..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "הוספת קישור" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "מחיקת ה_עיצוב" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "חי_פוש..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "חיפוש _הבא" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "חיפוש _הקודם" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "הח_לפה..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "ספירת מילים..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "הת_קרבות" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "הת_רחקות" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "גודל ר_גיל" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "מצורף חדש" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "כותרת _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "כותרת 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "כותרת _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "כותרת 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "כותרת _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "כותרת 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "כותרת _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "כותרת 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "כותרת _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "כותרת 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_מחוזק" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "מחוזק" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "ה_דגשה" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "הדגשה" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_סימון" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "סימון" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "קו חו_צה" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "קו חוצה" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "כתב ת_חתי" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "כתב _עלי" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_אחיד" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "אחיד" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "יש להשתמש במקש <Enter> כדי לעקוב אחר קישורים\n" "(אם אינם פעילים עדיין ניתן להשתמש ב־<Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "הצגת הסמן גם לעמודים שלא ניתן לערוך" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "הפיכה אוטומטית של מילים בצורת \"CamelCase\" לקישורים" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "הפיכת נתיבי קבצים לקישורים אוטומטית" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "בחירת המילה הנבחרת אוטומטית בעת החלת עיצוב" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "מחיקת ההזחה עם <BackSpace>\n" "(אם לא פעיל עדיין ניתן להשתמש ב־<Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "לחיצה חוזרת על תיבת סימון משנה את מצב התיבה באופן מחזורי" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "הזחה וביטולה על פריט משנות גם את צאצאיו" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "סימון תיבה משנה גם תת־פריטים" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "שינוי תחביר הוויקי בעת העבודה" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "מבנה בררת המחדל להעתקת טקסט ללוח הגזירים" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "תיקייה עם טבניות לקבצים מצורפים" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "לא מוגדר כזה ויקי: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "העתק כ־" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "הזז טקסט נבחר..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "ערוך מאפיינים" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_עריכת הקישור" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "העתקת ה_קישור" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "העתקת כתובת הדוא\"ל" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "פתיחת תיקייה" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "פתיחה באמצעות..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_פתיחה" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "לא מותקנות תבניות" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "תיקיית %s אינו קיים. האם ברצונך ליצור אותו כעת?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "הוספת תאריך ושעה" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "לוח _שנה" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_קישור לתאריך" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "הוספת תמונה" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "הוספת תמונה תחילה" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "סוג קובץ לא נתמך: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "עריכת תמונה" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "מיקום" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "קישור אל" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "רוחב" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "גובה" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "איפוס ה_ממדים" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "הוספת טקסט מקובץ" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "עריכת קישור" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_קישור" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "טקסט" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "ה_בא" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "ה_קודם" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "התאמת _רישיות" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "המילה _כולה" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_ביטוי רגולרי" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "ה_דגשה" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "חיפוש" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "אפשרויות" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "חיפוש והחלפה" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "מה לחפש" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "החלפה עם" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "ה_חלפה" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "החלפת ה_כול" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "ספירת המילים" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "פסקה" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "בחירה" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "מילים" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "שורות" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "תווים" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "הזז טקסט לדף אחר" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_הזז" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "העבר טקסט אל" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "השאר קישורית לדף חדש" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "פתח בדף חדש" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "ממשק" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "עריכה" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "העדפות" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "תוספים" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "שימוש בגופן מותאם אישית" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_עוד" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "ה_גדרה" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "תלויות" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "אין תלויות" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "אישור" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "כשל" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "לא מחייב" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "יוצר" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "פעיל" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "תוסף" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "הגדרת תוסף" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "אפשרויות עבור התוסף %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "מאפיינים" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "מאפייני המחברת" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "כדי לערוך חיפוש מתקדם ניתן להשתמש בביטויים לוגיים\n" "כגון AND,‏ OR ו־NOT. ניתן לעיין במסמכי העזרה לפרטים נוספים." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "ניקוד" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "השרת לא הופעל" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "פתחה" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "השרת הופעל" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "השרת נעצר" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "תבניות" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "העתק טבנית" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "בחירת קובץ" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "פרוש הכל" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_קפל הכל" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "נקה" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "בחירת תיקייה" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "בחירת תמונה" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<עליון>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "לוח שמאלי" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "לוח ימיני" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "לוח תחתון" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "לוח עליון" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "למעלה משמאל" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "למטה משמאל" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "למעלה מימין" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "למטה מימין" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "בעת דיווח על תקלות נא לכלול את\n" "הפרטים מתיבת הטקסט שלהלן" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "כל הקבצים" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "תמונות" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "קובץ רישום" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "הקובץ קיים" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "קובץ בשם <b>\"%s\"</b> כבר קיים. ניתן לבחור שם אחר או לשכתב את הקובץ הקיים." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "שם קובץ" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_עיון" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "שכתוב" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "לא ניתן למצוא את הקובץ או התיקייה של מחברת זו" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "לא ניתן למצוא את המחברת: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "שם העמוד שהוזן אינו תקני.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "שם העמוד \"%s\" אינו תקני" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "המפתח עדיין עסוק בעדכונו בזמן שאנו מנסים\n" "לבצע פעולות הדורשות שימוש במפתח.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "לא ניתן לשנות את העמוד: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "מילת מפתח" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "דף הבית" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "שורש המסמכים" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "מאפיינים-אישיים" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "חשבון" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "חשבון" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "לא ידוע" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "גודל" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "שונה" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "ה_עבר לכאן" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "העתק כאן" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "ביטול" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "דפדפן מצורפים" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "מיקום בחלון" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "מצורפים" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "לוח קישורי החזר" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מוסיף רשימת דפים המקרים אל דף הנוכחי.\n" "\n" "תוסף זה הוא תוסף מרכזי המגיע עם צים.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "קישורי החזר" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_תצוגה מקדימה" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "ארעה שגיאה בעת יצירת התמונה.\n" "האם ברצונך לשמור את טקסט המקור בכל מקרה?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "יום" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "שבוע" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "חודש" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "שנה" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "יש להציג לוח שנה בחלונית הצד במקום כדו־שיח" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "השתמש בדף עבור כל אחד" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "ה_יום" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_לוח שנה" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "לוח שנה" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "ה_יום" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "הוספת תרשים" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מהווה עורך תרשימים ל־GraphViz מבוסס zim.\n" "\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "תר_שים..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "הוספת תרשים" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "הוספת משוואה" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מספק עורך משוואות עבור zim על בסיס latex.\n" "\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "ע_ריכת משוואה" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "השתל Gnuplot‏" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "תוסף זה מספק עורך גרפים מבוסס על תוכנת Gnuplot.‏\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "ערוך Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "הוספת שרטוט GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "תוסף זה מספק עורך שרטוטים עבור zim המבוסס על GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "ערי_כת שרטוט GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "המחשבון מובנה השורה לא הצליח\n" "להעריך את הביטוי במיקום של הסמן." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "מחשבון בתוך השורה" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מאפשר הערכה מהירה של ביטויים מתמטיים פשוטים ב־Zim.\n" "\n" "זהו תוסף מובנה ב־Zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "לא ניתן להעריך את הביטוי" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "ה_ערכת הביטוי המתמטי" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "הוספת סימן" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מוסיף את הדו־שיח 'הוספת סימן' כדי ומאפשר\n" "תווים טיפוגרפיים המתעצבים מעצמם.\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "_סימן..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "מסדר השורות" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "תוסף זה מסדר את השורות הנבחרות בסדר אלפביתי.\n" "אם הרשימה כבר מסודרת אז הסדר יתהפך\n" "(מ־א–ת ל־ת–א או מ־A-Z ל־Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_סידור השורות" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "נא לבחור יותר משורה אחת של טקסט תחילה." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "מפת קישורים" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מספק דו־שיח עם ייצוג גרפי של המבנה\n" "הקישורי של המחברת. ניתן להשתמש בו כמעין\n" "\"מיפוי מוח\" המציג את הקשר בין העמודים.\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "הצגת מפת קישורים" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "הדפסה לדפדפן" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מספק מעקף למחסור בתמיכה בהדפסה\n" "ב־zim. התוסף מייצא את העמוד הנוכחי ל־html\n" "ופותח אותו בדפדפן. בהנחה שלדפדפן יש תמיכה\n" "בהדפסה פעולה זו תעביר את הנתונים שלך אל\n" "המדפסת בשני שלבים.\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "ה_דפסה לדפדפן" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "הערה חטופה" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מוסיף דו־שיח להוספה של טקסט או את תוכן\n" "לוח הגזירים לעמוד ויקי.\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "הערה חטופה..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "יצירת עמוד חדש עבור כל הערה" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "כותרת" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "פתח דף" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "הכנס ניקוד" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "כותרת ראשית משותף" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "כותרת תחתית משותף" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "ערוך ניקוד" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "הוספת צילום מסך" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מאפשר צילום מסך מתוך Zim, וצירופו ישר לתוך דף Zim.\n" "\n" "זהו תוסף מובנה ל־Zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_צילום מסך..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "צילום כל המסך" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "בחירת חלון או אזור" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "השהייה" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "שניות" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "התרחשה שגיאה בזמן הרצת \"%s\"‏" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "בדיקת האיות" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "התוסף מוסיף תמיכה בבדיקת איות באמצעות gtkspell.\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "בדיקת ה_איות" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "יכול להיות שלא מותקנים אצלך המילונים\n" "המתאימים" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "תוכן העניינים" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מוסיף תוכן עניינים לדף הנוכחי.\n" "תוסף זה הוא תוסף גרעין המסופק עם צים.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "הראה תוכן העניינים בחלון נפרד במקום בתוך מסגרת שוליים" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "תוכן העניינים" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "הרד" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "העלה" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "תגיות" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "תוסף זה מספק מפתח דפים המסונן באותו האופן בו בוחרים תגיות בענן.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "סידור דפים לפי תגיות" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "ללא תגית" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "מיון לפי אלפבית" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "רשימת משימות" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מוסיף דו־שיח המציג את כל המשימות\n" "הפתוחות במחברת זו. משימות פתוחות יכולות\n" "להיות תיבות סימון או פריטים המסומנים בתגיות\n" "כגון \"TODO\" או \"FIXME\".\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "התייחסות אל כל תיבות הסימון כאל משימות" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "שימוש בשם הדף כתגיות לפרטי משימה" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "תוויות לסימון משימות" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "יש צורך ליצור מפתח למחברת" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "זוהי הפעם הראשונה בה נפתחת רשימת המשימות.\n" "לכן יש לבנות מחדש את המפתח.\n" "בהתאם לגודל המחברת פעולה זו עלולה לארוך\n" "מספר דקות. בפעם הבאה שיעשה שימוש ברשימת\n" "המשימות פעולה זו לא תהיה הכרחית עוד." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "מסנן" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i פריט אחד פתוח" msgstr[1] "%i פריטים פתוחים" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "כל המשימות" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "ללא תגית" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "משימה" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "תאריך" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "סמל אזור המערכת" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "תוסף זה מוסיף סמל לאזור המערכת לגישה מהירה.\n" "\n" "תוסף זה תלוי ב־Gtk+‎ גרסה 2.10 או עדכנית יותר.\n" "\n" "זהו תוסף המהווה חלק מהליבה של zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "סמל דיווח קלסי.\n" "אין להשתמש בסמל בסגנון חדש באובונטו." #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "הצגת סמל נפרד עבור כל מחברת" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "הערה ח_טופה..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_אחר..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "מחברות" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "zim הוויקי השולחני" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "בקרת גרסאות" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "שמירת גרסה אוטומטית במרווחי זמן קבועים" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "גרסה שנשמרה אוטומטית מ־zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "שמירת ה_גרסה..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "ג_רסאות..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "לא נערכו שינויים למחברת זו מאז הגרסה האחרונה שנשמרה" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "לא נערכו שינויים מאז הגרסה האחרונה" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "האם לאפשר בקרת גרסאות?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "בקרת גרסאות אינה פעילה כעת עבור מחברת זו.\n" "האם ברצונך להפעיל אותה?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "תשתית" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "שמירת הגרסה" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "נא להזין תגובה לגרסה זו" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "גרסה שנשמרה מ־zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "גרסאות" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_עמוד" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "צפייה עם _פירושים" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "נא לבחור גרסה להצגת השינויים בינה ובין המצב הנוכחי. או שניתן\n" "לבחור מספר גרסאות כדי לצפות בשינויים בין גרסאות אלה.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "הערה" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "שח_זור הגרסה" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "הצגת ה_שינויים" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_זה לצד זה" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "מקור הדף עם פירושים" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "האם להחזיר את העמוד לגרסה שנשמרה?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "האם ברצונך לשחזר את העמוד: %(page)s\n" "לגרסה שנשמרה: %(version)s ?\n" "\n" "כל השינויים מאז הגרסה האחרונה שנשמרה יאבדו !" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "שינויים" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "מהדורה" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "דף: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "עורך טקסט" #~ msgid "Web browser" #~ msgstr "דפדפן אינטרנט" #~ msgid "Pages" #~ msgstr "עמודים" #~ msgid "Output" #~ msgstr "פלט" #~ msgid "Match c_ase" #~ msgstr "התאם _רישיות" #~ msgid "Prio" #~ msgstr "עדיפות" #~ msgid "_Filter" #~ msgstr "_מסנן" #~ msgid "File browser" #~ msgstr "סייר קבצים" #~ msgid "Slow file system" #~ msgstr "מערכת קבצים אטית" #~ msgid "Email client" #~ msgstr "לקוח דוא״ל" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/pl.po�������������������������������������������������������������������������0000664�0001750�0001750�00000270602�12613750113�015617� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Polish translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # Mirosław Zalewski <miroslaw-zalewski@o2.pl>, 2012. msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-06-14 17:19+0000\n" "Last-Translator: Jaap Karssenberg <jaap.karssenberg@gmail.com>\n" "Language-Team: Polish <pl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" "Language: pl\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Nie udało się uruchomić aplikacji: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "Komenda %(cmd)s zwróciła niezerowy status %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Nie udało się uruchomić: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Domyślna" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Wygląda na to, że znalazłeś błąd" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Brak takiego pliku: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Nie można odczytać: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Ten komunikat przeważnie oznacza, że plik zawiera niepoprawne znaki." #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Szczegóły" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Plik nie ma atrybutu zapisywalności: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Plik na dysku twardym został zmieniony: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Dostosuj..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Nie znaleziono aplikacji" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Otwórz za pomocą \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Aplikacja uruchamiająca odnośniki typu \"%s\"" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "Aplikacja otwierająca pliku typu \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Konfiguruj aplikacje" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Dodaj aplikację" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Domyślne ustawienia systemowe" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nazwa" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Polecenie" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Ustaw jako aplikację domyślną" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Narzędzia użytkownika" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Możesz konfigurować narzędzia użytkownika, które zostaną wyświetlone\n" "w menu narzędzi, w pasku narzędzi lub menu kontekstowych." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Edytuj narzędzie użytkownika" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Opis" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikona" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Komenda nie modyfikuje danych" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Pokaż na pasku narzędziowym" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Poniższe zmienne zostaną zastąpione\n" "podczas wykonywania polecenia:<tt>\n" "<b>%f</b> ścieżka do tymczasowego pliku zawierającego kod źródłowy strony\n" "<b>%d</b> ścieżka do katalogu z załącznikami aktualnej strony\n" "<b>%s</b> ścieżka do pliku zawierającego kod źródłowy strony (jeśli " "istnieje)\n" "<b>%n</b> ścieżka do notesu (plik lub katalog)\n" "<b>%D</b> katalog główny dokumentu (jeśli istnieje)\n" "<b>%t</b> zaznaczony tekst lub słowo pod kursorem\n" "<b>%T</b> zaznaczony tekst lub słowo pod kursorem wraz z formatowaniem wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Eksport" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Odświeżanie indeksu" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Eksportowanie notesu" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Katalog istnieje: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Katalog już istnieje i nie jest pusty. Eksport do tego katalogu może " "nadpisać znajdujące się w nim pliki. Czy na pewno chcesz kontynuować?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Plik istnieje" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Ten plik już istnieje.\n" "Czy chcesz go nadpisać?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Wybierz stronę do eksportu" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Cały _notes" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Pojedyncza _strona" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Strona" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Wybierz format eksportu" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Inny..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Format" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Szablon" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Użyj pełnych ścieżek do plików w katalogu głównym" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Mapuj katalog główny na URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Wybierz plik wyjściowy lub folder" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Folder docelowy" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Indeks" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Plik wyjściowy" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Wyświetl _dziennik zdarzeń" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Plik" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Edycja" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Widok" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Wstaw" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Szukaj" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mat" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Narzędzia" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Idź" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Pomoc" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Pasek ścieżki" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Pasek narzędzi" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nowa strona..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nowa podstrona..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Otwórz kolejny notes..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Ot_wórz w nowym oknie" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importuj stronę..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "Zapi_sz" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Zapisz _kopię..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "Wye_ksportuj..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Wyślij do..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Przenieś stronę..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Zmień nazwę strony..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Usuń stronę" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Właściwości" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Zamknij" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Zakończ" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "Szukaj..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Szukaj linków zwrotnych" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "S_kopiuj położenie" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Szablony" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Preferencje" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Odśwież" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Otwórz katalog z _załącznikami" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Otwórz katalog notesu" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Otwórz katalog główny" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Otwórz katalog z dokumentami" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Dołącz _plik" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Dołącz zewnętrzny plik" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Edytuj _źródło" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Uruchom _serwer www" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Uaktualnij indeks" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Narzędzia uży_tkownika" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Wstecz" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Przejdź do poprzedniej strony" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Naprzód" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Przejdź do następnej strony" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Nadrzędny" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Przejdź do strony nadrzędnej" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Podrzędny" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Przejdź do strony podrzędnej" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Poprzedni w indeksie" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Wróć do poprzedniej strony" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Następny w indeksie" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Przejdź do następnej strony" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "Start" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Przejdź do początku" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Przejdź do..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Zawartość" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Skróty klawiszowe" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Błędy" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_O programie" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "Wszystkie p_anele" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Pokaż wszystkie panele" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Pasek _stanu" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "Panele _boczne" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Pokaż panele boczne" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Pełny ekran" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Notes możliwy do edytowania" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Zmień możliwość edytowania notesu" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Brak" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Ostatnie strony" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historia" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikony i tekst" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Tylko _ikony" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Tylko _tekst" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Duże ikony" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Małe ikony" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Malutkie ikony" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Dodaj odrywalne paski do menu" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Użyj <Ctrl><Space> by przejść do panelu bocznego" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Usuń odnośniki podczas usuwania stron" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Zapamiętaj ostatnią pozycję kursora w czasie otwierania strony" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Określony plik lub katalog nie istnieje.\n" "Sprawdź, czy podana ścieżka jest poprawna." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Brak następującego pliku lub katalogu: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Zaktualizować zeszyt?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Zeszyt został stworzony przez starszą wersję programu zim.\n" "Czy chcesz zaktualizować program do najnowszej wersji?\n" "\n" "Aktualizacja może trochę potrwać i może zmienić rozmaite zmiany\n" "w zeszycie. Dobrym pomysłem jest zrobić kopie zapasową\n" "przed zrobieniem tego.\n" "\n" "jeżeli nie zaktualizujesz programu teraz, niektóre funkcje\n" "mogą nie działać" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Aktualizowanie zeszytu" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Indeks zajęty jest aktualizacją. Dopóki nie zostanie ukończona, odnośniki " "nie mogą zostać poprawnie zaktualizowane. Wykonanie tego działania może " "uszkodzić odnośniki. Czy pomimo wszystko chcesz kontynuować?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Aktualizacja odnośników" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Usuwanie linków" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Utworzyć katalog?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Nie mogłem otowrzyć: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Ta strona nie posiada katalogu z załącznikami" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Edytowany plik: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Edytujesz plik za pomocą zewnętrznej aplikacji. Zamknij to okno kiedy " "skończysz" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Twój osobisty notatnik" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " BPS https://launchpad.net/~bps\n" " DB79 https://launchpad.net/~mr-bogus\n" " Dariusz Dwornikowski https://launchpad.net/~tdi-kill-9-deactivatedaccount\n" " Filip Stepien https://launchpad.net/~filstep\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Kabturek https://launchpad.net/~marcindomanski\n" " Lucif https://launchpad.net/~lucif-onet\n" " Marcin Swierczynski https://launchpad.net/~orneo1212\n" " Mirosław Zalewski https://launchpad.net/~miroslaw-zalewski\n" " Tomasz (Tomek) Muras https://launchpad.net/~zabuch\n" " ZZYZX https://launchpad.net/~zzyzx-eu\n" " ciastek https://launchpad.net/~ciastek\n" " yaras https://launchpad.net/~jaroslaw-zajaczkowski" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Indeks" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Tylko do odczytu" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Znajdź" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Link zwrotny" msgstr[1] "%i _Linków zwrotnych" msgstr[2] "%i odnośniki do tej strony" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Nie udało się zapisać strony: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Aby kontynuować możesz zapisać kopię tej strony lub odrzucić\n" "wprowadzone zmiany. Jeśli zapiszesz kopię tej strony zmiany również zostaną\n" "odrzucone, jednak później będziesz mógł przywrócić kopię." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Odrzuć zmiany" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Zapisz Kopię" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Przejdź do" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Przejdź do strony" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nowa podstrona" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nowa strona" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Pamiętaj że utworzenie linku do nieistniejącej strony powoduje jej " "automatyczne utworzenie." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Nazwa strony" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Szablon strony" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Strona istnieje" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Zapisz Kopię" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importuj stronę" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Pliki tekstowe" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Przenieś stronę" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Przenieś stronę \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Zaktualizuj %i stron odwołujących się do tej strony" msgstr[1] "Zaktualizuj %i stronę odwołującą się do tej strony" msgstr[2] "Zaktualizuj %i strony odwołujące się do tej strony" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Zmień nazwę strony" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Zmień nazwę strony \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Zaktualizuj nagłówek tej strony" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Usuń stronę" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Usunąć stronę \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Strona \"%s\" oraz wszystkie jej\n" "podstrony i załączniki zostaną usunięte" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Usuń odnośniki ze strony %i powiązane z tą stroną" msgstr[1] "Usuń odnośniki ze stron %i powiązane z tą stroną" msgstr[2] "Usuń odnośniki ze stron %i powiązane z tą stroną" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i plik nie będzie usunięty" msgstr[1] "%i plik będzie usunięty" msgstr[2] "%i plików będzie usunięte" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Załącz plik" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Strona \"%s\" nie posiada katalogu z załącznikami" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Wstaw obrazek jako odnośnik" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Notes" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Otwórz notes" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Domyślny notes" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Dodaj notes" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Wybierz nazwę i folder dla notatnika." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Katalog" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Odświeżanie indeksu..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Cofnij" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Ponów" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Wytnij" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Skopiuj" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Wklej" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Usuń" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Zmień zaznaczenie pola 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Zmień zaznaczenie pola 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Edytuj odnośnik lub obiekt..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Usuń odnośnik" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Data i czas..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Obraz..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Wypunk_towanie" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Lista numeryczna" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Lista checkbo_x" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Tekst z _pliku..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Odnośnik..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Wstaw odnośnik" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Wyczyść formatowanie" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Znajdź…" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Zn_ajdź następne" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Znajdź p_oprzednie" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "Za_stąp..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Liczba słów..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "Po_większ" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Po_mniejsz" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Zwykły rozmiar" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nowy _Załącznik" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Szab_lony plików..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Nagłówek _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Nagłówek 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Nagłówek _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Nagłówek 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Nagłówek _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Nagłówek 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Nagłówek _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Nagłówek 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Nagłówek _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Nagłówek 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Pogrubienie" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Silne zaakcentowanie" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "Pochylenie" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Wyróżnienie" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Zaznacz" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Zaznacz" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Przekreślenie" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Przekreślenie" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "Indeks dolny" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "Indeks górny" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Wyjustowanie" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Wyjustowanie" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Użyj klawisza <Enter>, by podążać za odnośnikami\n" "(Jeśli wyłączysz, nadal możesz używać <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "" "Pokaż kursor również na stronach nie posiadających możliwości edytowania" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Automatycznie twórz odnośniki z \"TakichSłów\"" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Automatycznie twórz odnośniki ze ścieżek do plików" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Automatycznie zaznacz aktualne słowo przy nadawaniu formatowania" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Usuń wcięcie klawiszem <BackSpace>\n" "(jeśli wyłączysz, nadal możesz użyć <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Zmiana wcięcia elementu listy zmienia także elementy podrzędne" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Zaznaczenie tego pola spowoduje zmianę pól podrzędnych" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Zamieniaj znaczniki wiki na formatowanie w trakcie pisania" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Domyślny format tekstu skopiowanego do schowka" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Katalog zawierający szablony załączników" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Nie znaleziono strony: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopiuj _Jako..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Przenieś Zaznaczony Tekst..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Zmień ustawienia" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Edytuj odnośnik" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Skopiuj _odnośnik" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Skopiuj adres e-mail" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Otwórz katalog" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Otwórz za pomocą..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Otwórz" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Nie zainstalowano szablonów" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Katalog%s\n" "jeszcze nie istnieje.\n" " Utworzyć go?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Wstawienie daty i czasu" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalendarz" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Odnośnik do daty" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Wstaw obraz" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Najpierw dołącz obraz" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Plik o nieobsługiwanym typie: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Edytuj obraz" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Położenie" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Odnośnik do" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Szerokość" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Wysokość" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Przywróć rozmiar początkowy" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Wstaw tekst z pliku" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Edytuj odnośnik" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Odnośnik" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Tekst" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Następny" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Poprzedni" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Wielkość _Liter" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Tylko całe słowa" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Wyrażenie regularne" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Podświetlenie" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Znajdź" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opcje" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Znajdź i zamień" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Znajdź" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Zamień na" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Zastąp" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Zastąp _wszystkie" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Ilość słów" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Akapit" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Zaznaczenie" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Słowa" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Wiersze" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Znaki" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Przenieś tekst na inną stronę" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Przenieś" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Przenieś tekst na" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Pozostaw odnośnik do nowej strony" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Otwórz nową stronę" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interfejs" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Edycja" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Ustawienia" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Wtyczki" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Użyj wybranej czcionki" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Więcej" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "Sk_onfiguruj wtyczkę" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Zależności" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Brak zależności" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Nie udało się" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Opcjonalnie" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Włączona" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Wtyczka" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Skonfiguruj wtyczkę" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opcje dla wtyczki %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Właściwości" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Właściwości notesu" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Dla zaawansowanego wyszukiwania możesz używać operatorów takich jak\n" "AND, OR i NOT. Aby uzyskać więcej informacji, zobacz stronę pomocy." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Trafność" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Serwer nie został uruchomiony" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Serwer został uruchomiony" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Serwer został zatrzymany" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Szablony" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Skopiuj szablon" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Wybierz plik" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "_Rozwiń wszystkie" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "Zw_iń wszystkie" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Wyczyść" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Wybierz katalog" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Wybierz obraz" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Panel po lewej stronie" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Panel po prawej stronie" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Panel na dole" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Panel na górze" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Góra, po lewej" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Dół, po lewej" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Góra, po prawej" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Dół, po prawej" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "W trakcie zgłaszania błędu, proszę podać\n" "informacje z pola poniżej" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Wszystkie typy plików" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Obrazy" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Plik dziennika" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Plik istnieje" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Plik o nazwie <b>\"%s\"</b> już istnieje.\n" "Możesz użyć innej nazwy lub nadpisać istniejący plik." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nazwa pliku" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Przeglądaj" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Nadpisz" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Brak pliku lub katalogu dla tego notesu" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Brak notesu: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Podana nazwa strony nie jest prawidłowa.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nieprawdiłowa nazwa strony \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Podczas próby wykonania akcji wymagającej indeksu\n" "indeks był nadal w trakcie aktualizacji.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Brak możliwości zmodyfikowania strony: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Strona główna" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Katalog główny dokumentów" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Arytmetyka" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Arytmetyka" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Nieznany" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Rozmiar" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Data modyfikacji" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Przenieś tutaj" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Skopiuj tutaj" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Anuluj" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Przeglądarka załączników" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Pozycja w oknie" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Załączniki" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _załącznik" msgstr[1] "%i _załączniki" msgstr[2] "%i _załączników" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Panel z Odnośnikami do strony" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka dodaje widżet pokazujący listę stron zawierających\n" "odnośniki do aktualnej strony.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Odnośniki do strony" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Podgląd" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Podczas generowania pliku graficznego wystąpił błąd. Czy mimo to chcesz " "zapisać tekst źródłowy?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "dnia" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "tygodnia" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "miesiąca" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "roku" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Pokaż kalendarz w panelu bocznym zamiast w oknie dialogowym" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Użyj osobnej strony dla każdego" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Dziś" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Kalen_darz" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalendarz" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Dziś" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Wstaw diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka udostępnia programowi Zim edytor diagramów wykorzystujący GraphViz.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Wstaw diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Wstaw Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka udostępnia programowi Zim edytor diagramów wykorzystujący Ditaa.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Edytuj Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Wstaw wyrażenie matematyczne" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka udostępnia programowi Zim edytor równań wykorzystujący LaTeX.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Edytuj wyrażenie matematyczne" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Wstaw Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Wtyczka dostarcza programowi Zim edytor wykresów na podstawie Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Edytuj Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Wstaw wykres GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Wtyczka dostarcza programowi Zim edytor wykresów na podstawie GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Edytuj wykres GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Wtyczka kalkulatora wewnętrznego nie była w stanie\n" "obliczyć wyrażenia pod kursorem." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Kalkulator wewnętrzny" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka umożliwia szybkie obliczanie prostych wyrażeń matematycznych\n" "w programie Zim.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Błąd analizy składni wyrażenia" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Oblicz wyrażenie" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Wstaw symbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka dodaje okno 'Wstaw symbol' i umożliwia\n" "automatyczne formatowanie znaków typograficznych.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbol..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Sortowanie wierszy" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Wtyczka sortuje wybrane wiersze w kolejności alfabetycznej.\n" "Jeżeli wiersze są już posortowane, kolejność jest odwracana\n" "(A-Z na Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "Sortuj wiersze" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Proszę wpierw wybrać więcej niż jeden wiersz tekstu." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mapa odnośników" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka udostępnia okno zawierające graficzną\n" "reprezentację struktury odnośników w notesie.\n" "Może być użyta jako coś na wzór „mapy myślowej”\n" "przedstawiającej relacje między stronami.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Pokaż mapę odnośników" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Drukuj do przeglądarki www" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka ta służy jako substytut drukowania w programie Zim.\n" "Eksportuje aktualną stronę do pliku html i otwiera ten plik\n" "w przeglądarce www. Następnie możesz użyć przeglądarki www\n" "do wydrukowania swojej strony.\n" "\n" "Jest to wtyczka domyślnie dostarczana z programem Zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Drukuj do przeglądarki www" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Szybka notatka" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka udostępnia okno do szybkiego umieszczania tekstu\n" "ze schowka w treści aktualnej strony.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Szybka notatka..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Stwórz nową stronę dla każdej notatki" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Nazwa" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Otwórz _stronę" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Wstaw partyturę" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka dostarcza programowi Zim edytor partytur na podstawie Lilypond.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Nagłówek dołączany za każdym razem" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Stopka dołączana za każdym razem" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Edytuj partyturę" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Wstaw zrzut ekranu" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka umożliwia wykonywanie zrzutów ekranu i bezpośrednie wstawianie ich\n" "na aktualną stronę.\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Zrzut ekranu..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Zrób zrzut całego ekranu" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Wybierz okno lub obszar" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Opóźnienie" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekund" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "W trakcie wykonywania polecenia \"%s\" wystąpiły błędy" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Sprawdzanie pisowni" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dodaje obsługę sprawdzania pisowni przy użyciu gtkspell.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Sprawdź _pisownię" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "To może oznaczać, że nie masz zainstalowanych\n" "odpowiednich słowników" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Spis treści" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka dodaje specjalny widżet wyświetlający spis treści aktualnej strony.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" "Wyświetlaj spis treści jako pływający widżet zamiast w panelu bocznym" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Spis treści" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Poziom niżej" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Poziom wyżej" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Znaczniki" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Wtyczka udostępnia indeks stron filtrowanych według znaczników wyświetlanych " "w chmurce.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sortuj strony zgodnie ze znacznikami" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "brak znaczników" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Sortuj w kolejności alfabetycznej" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Lista zadań" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta wtyczka wyświetla okno dialogowe zawierające wszystkie zadania do " "wykonania\n" "znajdujące się w otwartym notesie. Zadania te powinny być umieszczone w " "notesie\n" "w postaci niezaznaczonych pól \"[ ]\" lub elementów oznakowanych słowami " "\"TODO\" lub \"FIXME\".\n" "\n" "Jest to wtyczka domyślnie dostarczana z programem Zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Rozpatruj wszystkie pola wyboru jako zadania" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Przekształć nazwę strony w znaczniki dla zadań" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Domniemana data wykonania dla zadań na stronach kalendarza" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Oznaczaj zadania do wykonania na poniedziałek lub wtorek jako przedweekendowe" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Etykiety wskazujące na zadania" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Etykieta następnego zadania" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Należy stworzyć indeks notesu" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Otwierasz listę zadań po raz pierwszy.\n" "Najpierw należy przebudować indeks notesu.\n" "W zależności od rozmiarów notesu, może to zająć\n" "do kilku minut. Nie będzie potrzeby przebudowywania\n" "indeksu gdy następnym razem otworzysz listę zadań." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtr" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Pokaż tylko zadania wymagające akcji" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i zadań do wykonania" msgstr[1] "%i zadanie do wykonania" msgstr[2] "%i zadania do wykonania" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Wszystkie zadania" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Nieoznaczone" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Zadanie" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Data" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ikona obszaru powiadamiania" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka to dodaje ikonę obszaru powiadamiania, by ułatwić szybki dostęp do " "notesu Zim.\n" "\n" "Zależy od Gtk+ w wersji 2.10 lub wyższej.\n" "\n" "Jest to wtyczka domślnie dostarczana z programem Zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klasyczna ikona obszaru powiadamiania,\n" "nie używaj nowych ikon statusu na Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Pokaż oddzielne ikony dla każdego notatnika" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "Szybka notatka" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Inne..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Notesy" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim - Osobista Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Kontrola wersji" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Wtyczka dodaje kontrolę wersji dla notesów.\n" "\n" "Wtyczka obsługuje systemy kontroli wersji Bazaar, Git i Mercurial.\n" "\n" "Wtyczka ta jest domyślnie dostarczona wraz z programem Zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Automatyczny zapis wersji w określonych przedziałach czasu" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automatycznie zapisana wersja z programu Zim." #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Zapisz wersje..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "Wersje..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Brak zmian od ostatniej zapisanej wersji" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Brak zmian od ostatniej wersji" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Włączyć kontrolę wersji?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Kontrola wersji nie jest włączona dla tego notesu.\n" "Czy chcesz ją włączyć?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "System kontroli wersji" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Zapisz wersję" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Wpisz komentarz do tej wersji" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Zapisana wersja z programu Zim." #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Wersje" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Strona" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Pokaż _opisane" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Wybierz wersję, którą chcesz porównać z obecnym stanem.\n" "Możesz też wybrać wiele wersji, by porównać je między sobą.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Komentarz" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Przywróć wersję" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Pokaż _Zmiany" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Obok siebie" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Opisane źródło strony" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Przywrócić stronę do zapisanej wersji?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Czy chcesz przywrócić stronę: %(page)s\n" "do zapisanej wersji: %(version)s ?\n" "\n" "Wszystkie zmiany wprowadzone po zapisaniu ostatniej wersji zostaną utracone!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Zmiany" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rewizja" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Zapisuj wydarzenia przy pomocy Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Przesyła wydarzenia do usługi Zeitgeist." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Strona wiki: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Web browser" #~ msgstr "Przeglądarka WWW" #~ msgid "File browser" #~ msgstr "Przeglądarka plików" #~ msgid "Pages" #~ msgstr "Strony" #~ msgid "Output" #~ msgstr "Wyjście" #~ msgid "Match c_ase" #~ msgstr "Rozróżniaj małe i wielkie litery" #~ msgid "Prio" #~ msgstr "Ważn" #~ msgid "Text Editor" #~ msgstr "Edytor tekstowy" #~ msgid "Email client" #~ msgstr "Klient e-mail" #~ msgid "Slow file system" #~ msgstr "Wolny system plików" #~ msgid "_Filter" #~ msgstr "_Filtruj" ������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/et.po�������������������������������������������������������������������������0000664�0001750�0001750�00000252566�12613750113�015625� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Estonian translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # # FIRST AUTHOR <EMAIL@ADDRESS>, 2009, 2010. msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2012-10-06 21:09+0000\n" "Last-Translator: Jaap Karssenberg <jaap.karssenberg@gmail.com>\n" "Language-Team: Estonian <et@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Vaikimisi" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Tundub, et Sa leidsid programmivea." #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Sellist faili pole: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detailid" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Open with \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nimi" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Käsk" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Kohandatud tööriistad" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Muuda kohandatud tööriista" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Kirjeldus" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikoon" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Käsklus ei muuda andmeid" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Näita tööriistaribal" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Ekspordi" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Registrite uuendamine" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Märkmiku eksportimine" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Kataloog on juba olemas ja sisaldab faile. Eksportimine antud kataloogi võib " "olemasolevad failid üle kirjutada. Oled kindel, et soovid jätkata?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Fail on olemas" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "This file already exists.\n" "Do you want to overwrite it?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Vali leheküljed, mida soovid eksportida" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Terve _märkmik" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Üksik _lehekülg" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Lehekülg" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Vali eksportimise formaat" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Muu..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Vorming" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Mall" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Lingi dokumendi juurkaustas asuvad failid täisfailiteena" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Vastenda dokumendi juurkaust URLiks" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Vali väljundfail või -kaust" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Väljundkaust" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Indekslehekülg" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Väljundfail" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Kuva _logi" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Fail" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Redigeeri" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Kuva" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Lisamine" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Otsing" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "Vor_ming" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Tööriistad" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Mine" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Abi" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "F_ailitee riba" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Töör_iistariba" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Uus Lehekülg..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Uus A_lamlehekülg..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "A_va olemasolev märkmik..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Ava uues _Aknas" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Impordi lehekülg..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Salvesta" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Salvesta _koopia..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Ekspordi..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Saada..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Liiguta lehekülg..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Nimeta leht ümber" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Kustuta lehekülg" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "A_tribuudid" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Sulge" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Lõpeta" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Otsing..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Otsi _tagasiviiteid..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Eelistused" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "La_e uuesti" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Ava _Manuste kaust" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Ava _Märkmiku kaust" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Ava _Dokumendi juurkaust" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Ava _Dokumendikaust" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Manusta fail" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Manusta väline fail" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Muuda lähtekoodi" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Käivita _veebiserver" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Kohandatud _Tööriistad" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Tagasi" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Eelmine lehekülg" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Edasi" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Järgmine lehekülg" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Ülemlehekülg" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Mine ülemleheküljele" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "Alamlehekülg" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Mine alamleheküljele" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Eelmine registris" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Mine eelmisele leheküljele" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Järgmine registris" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Mine järgmisele leheküljele" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Kodu" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Liigu koju" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Liigu l_eheküljele..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Sisu" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_KKK" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "Klahviseosed" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Veateated" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Teave" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Olekuriba" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Täisekraan" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Märkmik on _muudetav" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Lülita ümber märkmikku kirjutamine" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Puudub" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Hiljutised leheküljed" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Ajalugu" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikoonid ja tekstid" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Ainult _ikoonid" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Ainult _tekst" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Suured ikoonid" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Väikesed ikoonid" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Pisikesed ikoonid" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Lisa rebitavad ribad menüüdele" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Sellist faili või kausta pole: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Uuenda märkmikku?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Täiendan märkmikku" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Indeks on endiselt värskendamisega hõivatud. Viiteid ei saa enne lõppu " "värskendada. Selle sammu astumine võib viia linkide katkemiseni. Oled Sa " "kindel, et soovid sellest hoolimata jätkata?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Värskendan viiteid" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Eemaldan viiteid" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Loo uus kaust?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Ei saa avada: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Sellel leheküljel pole manuste kausta" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Muudan faili: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Hetkel kasutatakse faili välise programmi poolt. Sa võid selle akna pärast " "tegevuse lõpetamist sulgeda" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Töölaua wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " *nix https://launchpad.net/~xinu7\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Timo Sulg https://launchpad.net/~timgluz\n" " mahfiaz https://launchpad.net/~mahfiaz\n" " milosh https://launchpad.net/~raoul-hot" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Ainult loetav" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Otsing" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i Ta_gasiviide..." msgstr[1] "%i Ta_gasiviited..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Lehekülje %s salvestamine ebaõnnestus" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Unusta muudatused" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "Salvesta _koopia" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Liigu..." #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Liigu leheküljele" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Uus Alamleht" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Uus Lehekülg" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Lehekülje nimi" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Lehekülg on olemas" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Salvesta koopia" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Impordi lehekülg" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Tekstifailid" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Liiguta lehekülg" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Move page \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Värskenda %i lehekülg, viidates sellele leheküljele" msgstr[1] "Värskenda %i lehekülge, viidates sellele leheküljele" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Muuda lehekülje nime" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Rename page \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Uuenda lehekülje päist" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Kustuta lehekülg" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Delete page \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Eemalda %i lehel asuv viide käesolevale leheküljele" msgstr[1] "Eemalda %i lehel asuvad viited käesolevale leheküljele" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "" msgstr[1] "" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Manusta fail" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Page \"%s\" does not have a folder for attachments" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Lisa pilt viitena" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Märkmik" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Ava märkmik" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Aktiivne märkmik" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Lisa uus märkmik" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Vali palun märkmikule pealkiri ja kataloog." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Kaust" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Indeksite uuendamine..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "Võta _tagasi" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Taasta" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Lõika" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopeeri" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Kleebi" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Kustuta" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Märgista valikkast 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Märgista valikkast 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Viite või objekti redigeerimine" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Eemalda viide" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "Kuupäev ja kellaaeg..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Pilt..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Tekst _failist..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Viide..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Viite lisamine" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Puhasta vorming" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Otsi..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Otsi _järgmine" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Otsi _eelmine" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Asenda..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Sõnaarvestus..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Pealkiri _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Pealkiri 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Pealkiri _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Pealkiri 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Pealkiri _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Pealkiri 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Pealkiri _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Pealkiri 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Pealkiri _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Pealkiri 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Tugev" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Tugev" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Rõhutatud" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Rõhutatud" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Märgistatud" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Märgistatud" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Läbikriipsutatud" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Läbikriipsutatud" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "Allindek_s" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_ülaindeks" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Sõnasõnaline" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Sõnasõnaline" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Kuva kursor ka kirjutuskaitsud lehekülgedel." #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Automatically turn \"CamelCase\" words into links" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Teisenda faili asukohatee automaatselt viidaks." #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Vormingu lisamisel märgista automaatselt käesolev sõna" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Taande muutmine muudab ka alamkirjeid" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Valikasti valimine muudab ka alamkirje väärtust." #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Vorminda wiki märgistus jooksvalt ümber" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Redigeeri linki" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Kopeeri _link" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopeeri e-posti aadress" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Ava kaust" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Ava kasutades..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Ava" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Kuupäeva ja kellaaja lisamine" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "Vii_ta kuupäevale" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Lisa pilt" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Manusta esmalt pilt" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Muuda pilti" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Asukoht" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Viita..." #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Laius" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Kõrgus" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "Suuruse l_ähtestamine" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Lisa tekst failist" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Muuda linki" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Viit" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Tekst" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Järgmine" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Eelmine" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Erista _Suurtähti" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Terve s_õna" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Regulaaravaldis" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Tõsta esile" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Otsi" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Valikud" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Otsi ja asenda" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Otsi mida" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Asenda millega" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Asenda" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Asenda _kõik" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Sõnaarvestus" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Lõik" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Valik" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Sõnad" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Read" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Tähed" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Eelistused" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Lisandmoodulid" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Kasuta kohandatud fonti" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "V_eel" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Seadista" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Sõltuvused" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Sõltuvusi pole" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Nurjus" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Lubatud" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Lisandmoodul" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Seadista lisandmoodulit" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Lisandmooduli %s suvandid" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Atribuudid" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Märkmiku atribuudid" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "For advanced search you can use operators like\n" "AND, OR and NOT. Vaata lähemalt abilehekülgedelt." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Hinnang" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server pole käivitunud." #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server on käivitunud" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server on peatatud" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Vali fail" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Vali kaust" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Kõik failid" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Pildid" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Logifail" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Selle märkmiku faili või kausta ei leitud" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Ei leitud märkmiku: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "The given page name is not valid.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Invalid page name \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Lehekülje %s muutmine ebaõnnestus." #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Kodulehekülg" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Dokumendi juurkaust" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Manusesirvija" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Eelvaade" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Kuvab kalenderit külgpaanil, mitte dialgooaknas" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Tänase _päeva leheküljele" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Kalender" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalender" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Täna" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Lisa Diagramm" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "_Diagramm" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Lisa diagramm" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Lisa valem" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Muuda valemit" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Lisa GNU R diagramm" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "This plugin provides a plot editor for zim based on GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Muuda GNU R diagrammi" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Tekstisisene kalkulaator" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Avaldise sõelumine nurjus" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Hinda _Avaldist" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Lisa sümbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sü_mbol..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Viidaloend" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Ava viidaloend" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Trüki veebilehitseja kaudu" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Trüki veebilehitseja abil" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Kiire märge" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Kiire märge..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Lisa iga märkme jaoks eraldi leht" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Pealkiri" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Lisa ekraanitõmmis" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Ekraanitõmmis" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Kaasa terve ekraan." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Vali aken või piirkond" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Viivitus" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekundid" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Some error occurred while running \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Õigekirjakontroll" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Kontrolli _õigekirja" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Sildid" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Ülesandeloend" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Consider all checkboxes as tasks" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Labels marking tasks" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Need to index the notebook" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i avatud kirje" msgstr[1] "%i avatud kirjet" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Ülesanne" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Kuupäev" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Tray Icon" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Show a separate icon for each notebook" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Quick Note..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Muu..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Märkmikud" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Töölaua Viki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Versioonihaldus" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Salvesta versioon regulaarse ajavahemiku järel" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automaatselt salvestatud Zimi versioonid" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Sa_lvesta versioon" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versioonid" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Märkmikusse ei ole viimase versiooni salvestamisest saadik tehtud muudatusi" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Eelmise versiooniga võrreldes muudatused puuduvad" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Lülitan versioonihalduse sisse?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Salvesta versioon" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Sisesta kommentaar versiooni kohta" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Salvestatud Zimi versioonid" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versioonid" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Lehekülg" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Vaata märgitu_d" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Kommentaar" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Taasta versioon" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Kuva _muutused" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Rida-realt" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Märgistatud lehekülje lähtekood" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Kas soovid lehekülje salvestatud versiooni põhjal taastada?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Muudatused" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "Tekstiredator" #~ msgid "Pages" #~ msgstr "Leheküljed" #~ msgid "Output" #~ msgstr "Väljund" #~ msgid "Match c_ase" #~ msgstr "Tõstutundlik" #~ msgid "Web browser" #~ msgstr "Veebisirvija" #~ msgid "Email client" #~ msgstr "E-posti rakendus" #~ msgid "Slow file system" #~ msgstr "Aeglane failisüsteem" #~ msgid "_Filter" #~ msgstr "_Filter" #~ msgid "File browser" #~ msgstr "Failisirvija" #~ msgid "Prio" #~ msgstr "Prioriteet" ������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/el.po�������������������������������������������������������������������������0000664�0001750�0001750�00000341214�12613750113�015602� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Greek translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-06-14 17:19+0000\n" "Last-Translator: Aggelos Arnaoutis <angelosarn@hotmail.com>\n" "Language-Team: Greek <el@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Αποτυχημένη εκτέλεσης της εφαρμογής: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "Επεστράφει μη μηδενική κατάσταση εξόδου %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Αποτυχία εκτέλεσης: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Προεπιλογή" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "ημερολόγιο:αρχή_εβδομάδας:0" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Απ' ότι φαίνεται μόλις βρήκατε ένα σφάλμα προγραμματισμού" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Ανύπαρκτο αρχείο: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Ανέφικτη ανάγνωση: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" "Συνήθως πρόκειται για ένδειξη ότι το αρχείο περιέχει μη αποδεκτούς χαρακτήρες" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Λεπτομέρειες" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Το αρχείο δεν είναι εγγράψιμο: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Το αρχείο τροποποιήθηκε στο δίσκο: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Προσαρμογή..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Δε βρέθηκαν Εφαρμογές" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Άνοιγμα με \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Ρύθμιση εφαρμογής για το άνοιγμα \"%s\" συνδέσμων" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Ρύθμιση εφαρμογής για το άνοιγμα\n" "αρχείων τύπου \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Ρύθμιση Εφαρμογών" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Προσθήκη Εφαρμογής" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Προεπιλογή Συστήματος" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Όνομα" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Εντολή" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Ορισμός ως προεπιλεγμένη εφαρμογή" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Αδυναμία εύρεσης εκτελέσιμου \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Προσαρμοσμένα εργαλεία" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Μπορείτε να καθορίσετε ποια προσαρμοσμένα εργαλεία θα εμφανίζονται\n" "στο μενού εργαλείων και στην εργαλειοθήκη ή τα αναδυόμενα μενού" #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Επεξεργασία προσαρμοσμένου εργαλείου" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Περιγραφή" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Εικονίδιο" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Η εντολή δεν τροποποιεί δεδομένα" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Η έξοδος πρέπει να αντικαταστήσει την τρέχουσα επιλογή" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Εμφάνιση στην εργαλειοθήκη" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Οι ακόλουθες παράμετροι θα αντικατασταθούν\n" "στην εντολή κατά την εκτέλεσή της:\n" "<tt>\n" "<b>%f</b> η πηγαία σελίδα ως προσωρινό αρχείο\n" "<b>%d</b> ο φάκελος επισυνάψεων της τρέχουσας σελίδας\n" "<b>%s</b> το πραγματικό αρχείο πηγαίου κώδικα (αν υπάρχει)\n" "<b>%n</b> η τοποθεσία του σημειωματάριου (αρχείο ή φάκελος)\n" "<b>%D</b> η αφετηρία αρχείων (αν υπάρχει)\n" "<b>%t</b> το επιλεγμένο κείμενο ή η λέξη κάτω από τον κέρσορα\n" "<b>%T</b> το επιλεγμένο κείμενο με τη wiki μορφοποίηση \n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Εξαγωγή" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Ενημέρωση ευρετηρίου" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Εξαγωγή σημειωματάριου" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Υφιστάμενος φάκελος: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Ο φάκελος υπάρχει ήδη και δεν είναι κενός. Αν κάνετε εξαγωγή σε αυτόν, είναι " "πιθανό να επικαλύψετε υπάρχοντα αρχεία. Θέλετε να συνεχίσετε;" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Το αρχείο υπάρχει ήδη" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Το αρχείο υπάρχει ήδη.\n" "Θέλετε να το αντικαταστήσετε;" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Επιλογή σελίδων για εξαγωγή" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Ο_λόκληρο το σημειωματάριο" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Μία _σελίδα" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Σελίδα" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Συμπερίλιψη υποσελίδων" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Επιλογή της μορφής εξόδου" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Άλλο..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Μορφή" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Πρότυπο" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Χρήση πλήρους διαδρομής σε δεσμούς για τοπικά αρχεία" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Αντιστοίχηση του ριζικού καταλόγου του εγγράφου σε URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Απέκτησε πιο πολλά πρότυπα διαδικτυακά" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Επιλογή του αρχείου ή φακέλου εξόδου" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Εξαγωγή κάθε σελίδας σε ξεχωριστό αρχείο" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Εξαγωγή όλων των σελίδων σε ένα αρχείο" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Φάκελος εξόδου" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Σελίδα ευρετηρίου" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Αρχείο εξόδου" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" "%(n_error)i σφάλματα και %(n_warning)i προειδοποιήσεις συνέβησαν, δείτε την " "καταγραφή" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i σφάλματα συνέβησαν, δείτε την καταγραφή" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i προειδοποιήσεις συνέβησαν, δείτε την καταγραφή" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Εξαγωγή ολοκληρώθηκε" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Εμφάνιση _καταγραφής" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Αρχείο" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Επεξεργασία" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Προβολή" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "Ε_ισαγωγή" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "Ανα_ζήτηση" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "Μορ_φοποίηση" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "Ερ_γαλεία" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Μετάβαση" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Βοήθεια" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Γρ_αμμή διαδρομής" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Εργαλειο_θήκη" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Νέα σελίδα..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Νέα _υποσελίδα..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "Άν_οιγμα νέου σημειωματάριου..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Άνοιγμα σε νέο παρά_θυρο" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "Ε_ισαγωγή σελίδας..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Αποθήκευση" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Αποθήκευση ενός αν_τιγράφου..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "Εξαγ_ωγή..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Αποστολή π_ρος..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Μετακίνηση σελίδας..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Μετονομασία _σελίδας..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Διαγραφή σελίδας" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Ιδιότ_ητες" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Κλείσιμο" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "'Ε_ξοδος" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "Ανα_ζήτηση..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Αναζήτηση για _Backlinks..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Πρόσφατες Τροποποιήσεις..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Αντιγραφή _Τοποθεσίας" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Πρότυπα" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Π_ροτιμήσεις" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Επαναφόρτωση" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Άνοιγμα _φακέλου επισυνάψεων" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Ά_νοιγμα φακέλου σημειωματάριων" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Άνοιγμα αρχι_κού καταλόγου εγγράφου" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Άνοιγμα φακέλου του ε_γγράφου" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Επισύνα_ψη αρχείου" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Επισύναψη εξωτερικού αρχείου" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Επεξεργασία _κώδικα" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Εκκίνηση εξυπηρετητή _Ιστού" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Ενημέρωση Ευρετηρίου" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Προσαρμοσμένα _εργαλεία" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Πίσω" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Μετάβαση στην προηγούμενη σελίδα" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Μπροστά" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Μετάβαση στην επόμενη σελίδα" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "Πάν_ω" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Μετάβαση στη μητρική σελίδα" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Κάτω" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Μετάβαση στη θυγατρική σελίδα" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Προη_γούμενη στο ευρετήριο" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Μετάβαση στην προηγούμενη σελίδα" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Επόμε_νη στο ευρετήριο" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Μετάβαση στην επόμενη σελίδα" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Αρχική" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Μετάβαση στην αρχική σελίδα" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Μετάβαση σε..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "Περιε_χόμενα" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_Συχνές ερωτήσεις" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "Συντομεύσεις πλη_κτρολογίου" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "Σ_φάλματα" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Περί" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Όλα τα Πλαίσια" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Προβολή Όλων των Πλαισίων" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Γ_ραμμή κατάστασης" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "Π_λαϊνά Πλαίσια" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Προβολή Πλαϊνού Πλαισίου" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Πλήρης οθόνη" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Ε_πεξεργάσιμο σημειωματάριο" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Εναλλαγή δυνατότητας επεξεργασίας σημειωματάριου" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Τίποτα" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "Π_ρόσφατες σελίδες" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Πρόσφατα Τ_ροποποιημένες σελίδες" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Ιστορικό" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Εικονίδι_α και κείμενο" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Ε_ικονίδια μόνο" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "_Κείμενο μόνο" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "Μεγά_λα εικονίδια" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Μικρά εικονίδια" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Πολύ μικρά _εικονίδια" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Χρήση αποσπώμενων μενού" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Χρησιμοποίησε <Ctrl><Space> για μετάβαση στην πλαϊνή περιοχή" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Αφαίρεση των συνδέσμων όταν διαγράφονται σελίδες" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" "Να χρησιμοποιείται πάντα η τελευταία θέση του κέρσορα όταν ανοίγει μια σελίδα" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Τα αρχείο ή ο φάκελος που καθορίσατε δεν υπάρχει.\n" "Παρακαλώ σιγουρευτείτε ότι η διαδρομή είναι σωστή." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Δεν υπάρχει τέτοιο αρχείο ή κατάλογος: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Η σελίδα έχει μη αποθηκευμένες αλλαγές" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Να γίνει αναβάθμιση του σημειωματάριου;" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Το σημειωματάριο αυτό δημιουργήθηκε με μια παλιότερη έκδοση του zim.\n" "Θέλετε να αναβαθμιστεί στην τελευταία έκδοση;\n" "\n" "Η αναβάθμιση μπορεί να διαρκέσει αρκετά και να κάνει σημαντικές αλλαγές\n" "στο σημειωματάριο. Σας προτείνουμε να κρατήσετε ένα αντίγραφο ασφαλείας\n" "πριν συνεχίσετε.\n" "\n" "Αν αποφασίσετε να μην κάνετε την αναβάθμιση τώρα, κάποιες λειτουργίες\n" "μπορεί να μην δουλεύουν όπως θα έπρεπε." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Γίνεται αναβάθμιση του σημειωματάριου" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Το ευρετήριο ενημερώνεται ακόμη. Μέχρι να ολοκληρωθεί η ενημέρωσή του, η " "τροποποίηση των δεσμών δεν μπορεί να γίνει με ασφάλεια. Αν συνεχίσετε μπορεί " "να καταλήξετε με 'σπασμένους' δεσμούς. Θέλετε να συνεχίσετε;" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Γίνεται ενημέρωση δεσμών" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Γίνεται αφαίρεση δεσμών" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Δημιουργία φακέλου;" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Ο φάκελος \"%s\" δεν υπάρχει.\n" "Επιθυμείτε να το δημιουργήσετε τώρα;" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Αδύνατο ανοίγματος: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Αυτή η σελίδα δεν έχει φάκελο επισυνάψεων" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Επεξεργασία αρχείου: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Το αρχείο είναι ανοικτό σε μία εξωτερική εφαρμογή. Μπορείτε να κλείσετε αυτό " "το παράθυρο όταν τελειώσετε" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Ένα Wiki για την Επιφάνεια Εργασίας" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Aggelos Arnaoutis https://launchpad.net/~angelosarn\n" " Constantinos Koniaris https://launchpad.net/~kostkon\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Melsi Habipi https://launchpad.net/~mhabipi\n" " Spiros Georgaras https://launchpad.net/~sngeorgaras\n" " paxatouridis https://launchpad.net/~paxatouridis-deactivatedaccount\n" " tkout https://launchpad.net/~tkout\n" " tzem https://launchpad.net/~athmakrigiannis" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Ευρετήριο" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Μόνο για ανάγνωση" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Αναζήτηση" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Αναζήτηση στις Σελίδες..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Backlink..." msgstr[1] "%i _Backlinks..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Αδύνατη η αποθήκευση της σελίδας: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Για να συνεχίσετε θα πρέπει να αποθηκεύσετε ένα αντίγραφο της σελίδας, " "αλλιώς οι\n" "αλλαγές σας θα χαθούν. Αν κάνετε αποθήκευση, οι αλλαγές θα χαθούν και πάλι, " "αλλά\n" "θα μπορείτε να τις επαναφέρετε αργότερα από το αντίγραφο." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "Από_ρριψη αλλαγών" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "Αποθήκευ_ση αντιγράφου" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Μετάβαση σε" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Μετάβαση στη σελίδα" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Νέα υποσελίδα" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Νέα σελίδα" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Παρακαλώ σημειώστε ότι όταν δημιουργήσετε ένα δεσμό σε μία\n" "μη υπάρχουσα σελίδα, αυτή δημιουργείται αυτόματα." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Όνομα σελίδας" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Πρότυπο Σελίδας" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Η σελίδα υπάρχει" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Αποθήκευση αντιγράφου" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Εισαγωγή σελίδας" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Αρχεία κειμένου" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Μετακίνηση σελίδας" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Μετακίνηση της σελίδας \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Ενημέρωση %i σελίδας που έχει δεσμούς σε αυτήν τη σελίδα" msgstr[1] "Ενημέρωση %i σελίδων που έχουν δεσμούς σε αυτήν τη σελίδα" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Τομέας" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Μετονομασία σελίδας" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Μετονομασία της σελίδας \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Ενημέρωση της κεφαλίδας αυτής της σελίδας" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Διαγραφή σελίδας" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Να διαγραφεί η σελίδα \"%s\";" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Η σελίδα \"%s\" και όλες οι υποσελίδες\n" "και επισυνάψεις της θα διαγραφούν" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Αφαίρεση δεσμών από %i σελίδα που αναφέρονται σε αυτή τη σελίδα" msgstr[1] "Αφαίρεση δεσμών από %i σελίδες που αναφέρονται σε αυτή τη σελίδα" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i αρχείο θα διαγραφεί" msgstr[1] "%i αρχεία θα διαγραφούν" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Επισύναψη αρχείου" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Η σελίδα \"%s\" δεν έχει φάκελο επισυνάψεων" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Εισαγωγή εικόνων ως δεσμοί" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Σημειωματάριο" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Άνοιγμα σημειωματάριου" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Προεπιλεγμένο σημειωματάριο" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Προσθήκη σημειωματάριου" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Παρακαλώ επιλέξτε το όνομα και ένα φάκελο για το σημειοματάριο." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Φάκελος" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Μη διαθεσιμότητα πρόσθετου για εμφάνιση αυτού του αντικειμένου." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Το πρόσθετο %s απαιτείται για εμφάνιση του αντικειμένου." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Ενημέρωση σημειωματάριου..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Αναίρεση" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "Α_κύρωση αναίρεσης" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Απ_οκοπή" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "Αντι_γραφή" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "Ε_πικόλληση" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Διαγραφή" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Σημείωση ως OK (V)" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Σημείωση ως NOK (X)" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Επεξεργασία δεσμού ή αντικειμένου..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Α_φαίρεση δεσμού" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "Η_μεροηνία και ώρα" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Εικόνα..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Λίσ_τα με κουκίδες" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Αριθμημέ_νη Λίστα" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Λίστα με κουτάκια" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Κείμενο από αρ_χείο..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Δεσμός..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Εισαγωγή δεσμού" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Εκκαθάριση μορφοποίησης" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Εύρεση..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Εύρεση ε_πόμενου" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Εύρεση προη_γούμενου" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Αντικατάσταση..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Μέτρηση λέξεων" #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "Εστίαση" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Απεστίαση" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Κα_νονικό Μέγεθος" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Νέο _Συννημένο" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Πρότυπα _Αρχείων" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Επικεφαλίδα _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Επικεφαλίδα 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Επικεφαλίδα _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Επικεφαλίδα 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Επικεφαλίδα _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Επικεφαλίδα 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Επικεφαλίδα _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Επικεφαλίδα 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Επικεφαλίδα _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Επικεφαλίδα 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "Έ_ντονα" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Έντονα" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "Έμ_φαση" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Έμφαση" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Μαρκάρισμα" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Μαρκάρισμα" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "Μεσο_γράμμιση" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Μεσογράμμιση" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Δείκτης" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "Εκ_θέτης" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "Α_υτολεξί" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Αυτολεξί" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Χρήση του <Enter> για ακολούθηση δεσμών\n" "(Αν είναι απενεργοποιημένο, χρησιμοποιήστε το <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "" "Εμφάνιση του δρομέα ακόμα και στις σελίδες οι οποίες δεν μπορούν να " "τροποποιηθούν" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "" "Αυτόματη μετατροπή λέξεων γραμμένων σε μορφή \"CamelCase\" σε δεσμούς" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Αυτόματη μετατροπή των διαδρομών αρχείων σε δεσμούς" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" "Αυτόματη επιλογή της τρέχουσας λέξης όταν γίνεται εφαρμογή διαμόρφωσης" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Αφαίρεση εσοχής με το <BackSpace>\n" "(Αν είναι απενεργοποιημένο, μπορείτε να χρησιμοποιήσετε το <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Πατώντας επανειλημμένα ένα κουτάκι αλλάζουν διαδοχικά οι καταστάσεις του" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Η αλλαγή στην εσοχή ενός στοιχείου λίστας, αλλάζει και τα υποστοιχεία του" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Η επιλογή σε ένα κουτάκι να αλλάζει και τα υφιστάμενα κουτάκια" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Επαναμορφοποίηση κώδικα markup στο παρασκήνιο" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Προεπιλεγμένη μορφοποίηση για την αντιγραφή κειμένου στο πρόχειρο" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Ο Φάκελος με πρότυπα για τα συννημένα αρχεία" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Δεν έχει οριστεί τέτοι wiki: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "_Αντιγραφή Ως..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Μετακίνηση Επιλογής..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Επεξεργασία Ιδιοτήτων" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "Ε_πεξεργασία δεμού" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Αντιγραφή _δεσμού" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Αντιγραφή διεύθυνσης email" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Άνοιγμα φακέλου" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Άνοιγμα με..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "Άν_οιγμα" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Δεν υπάρχουν εγκατεστημένα πρότυπα" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Ο φάκελος\n" "%s\n" "δεν υπάρχει.\n" "Επιθυμείτε να το δημιουργήσετε τώρα;" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Εισαγωγή ημερομηνίας και ώρας" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "Ημερολό_γιο" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Δεσμός στην ημερομηνία" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Εισαγωγή εικόνας" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Επισύναψη εικόνων πρώτα" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Μη υποστηριζόμενος τύπος αρχείου: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Επεξεργασία εικόνας" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Τοποθεσία" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Σύνδεση με" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Πλάτος" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Ύψος" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "Επαναφο_ρά μεγέθους" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Εισαγωγή κειμένου από αρχείο" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Επεξεργασία δεσμού" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Δεσμός" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Κείμενο" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Επόμενο" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Προηγούμενο" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Ταίριασμα πεζών/_κεφαλαίων" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Πλήρης _λέξη" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Κανονική έκφραση" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "Επι_σήμανση" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Αναζήτηση" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Επιλογές" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Εύρεση και Αντικατάσταση" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Αναζήτηση του" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Αντικατάσταση με" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Αντικατάσταση" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Αντικατάσταση ό_λων" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Μέτρηση λέξεων" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Παράγραφοι" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Επιλογή" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Λέξεις" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Γραμμές" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Χαρακτήρες" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Χαρακτήρες εξαιρουμένων των διαστημάτων" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Μετακίνηση Κειμένου σε Άλλη Σελίδα" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Μετακίνηση" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Μετακίνηση κειμένου σε" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Παραμονή συνδέσμου προς τη νέα σελίδα" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Άνοιγμα νέας σελίδας" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Νέο Αρχείο" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Διεπαφή" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Επεξεργασία" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Προτιμήσεις" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Πρόσθετα" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Εφαρμογές" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Χρήση προσαρμοσμένης γραμματοσειράς" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Περισσότερα" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "Ρύ_θμιση" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Απέκτησε πιο πολλά πρόσθετα διαδικτυακά" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Εξαρτήσεις" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Χωρίς εξαρτήσεις" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Εντάξει" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Απέτυχε" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Προαιρετική" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Δημιουργός" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Ενεργό" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Πρόσθετο" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Ρύθμιση προσθέτου" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Επιλογές για το πρόσθετο %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Ορισμός προεπιλεγμένου επεξεργαστή κειμένου" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Ιδιότητες" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Ιδιότητες σημειωματάριου" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Πρόσφατες Τροποποιήσεις" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Σήμερα" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Χθες" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Τελευταία Τροποποίηση" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Στην προχωρημένη αναζήτηση μπορείτε να χρησιμοποιήσετε\n" "τους τελεστές AND, OR και NOT. Ανατρέξτε στη σελίδα βοήθειας\n" "για περισσότερες πληροφορίες." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Περιορισμένη αναζήτηση στην τρέχουσα σελίδα και τις υποσελίδες" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Βαθμολογία" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Εξυπηρετητής Ιστού" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Ο εξυπηρετητής δεν εκκινήθηκε" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Επιτρέπεται η δημόσια πρόσβαση" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Θύρα" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Ο εξυπηρετητής εκκινήθηκε" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Ο εξυπηρετητής τερματίστηκε" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Πρότυπα" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Πλοήγηση" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Αντιγραφή Προτύπου" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Επιλογή αρχείου" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Επέκτ_αση όλων" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Σύμπτυξη όλων" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Εκκαθάριση" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Επιλογή φακέλου" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Επιλογή Εικόνας" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Κορυφή>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Αριστερό Πλαϊνό Πλαίσιο" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Δεξί Πλαϊνό Πλαίσιο" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Κάτω Πλαίσιο" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Πάνω Πλαίσιο" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Πάνω Αριστερά" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Κάτω Αριστερά" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Πάνω Δεξιά" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Κάτω Δεξιά" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Όταν καταγράφετε ένα σφάλμα παρακαλούμε να περιλαμβάνετε\n" "την πληροφορία από το κουτί κειμένου που ακολουθεί" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Όλα τα αρχεία" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Εικόνες" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Αρχείο καταγραφής" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Υφιστάμενο αρχείο" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Υπάρχει ήδη ένα αρχείο με το όνομα <b>\"%s\"</b>.\n" "Μπορείτε να δώσετε άλλο όνομα ή να αντικαταστήσετε το υφιστάμενο αρχείο." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Όνομα αρχείου" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "Περιήγηση" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Αντικατάσταση" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Αδύνατη η εύρεση του αρχείου ή φακέλου αυτού του σημειωματάριου" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Παρακαλώ καθορίστε σημειωματάριο" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Αδύνατη η εύρεση του σημειωματάριου: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Τοποθεσία εξόδου χρειάζεται για εξαγωγή" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Ο φάκελος εξόδου υπάρχει και δεν είναι κενός, καθορίστε \"--overwrite\" για " "εξαναγκασμένη εξαγωγή" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Ο φάκελος εξόδου υπάρχει, καθορίστε \"--overwrite\" για εξαναγκασμένη εξαγωγή" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Απαιτείται αρχείο εξόδου για εξαγωγή MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Απαιτείται φάκελος εξόδου για εξαγωγή πλήρους σημειωματαρίου" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Το όνομα σελίδας που δόθηκε δεν είναι έγκυρο.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Μη έγκυρο όνομα σελίδας \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Το ευρετήριο είναι υπό ανανέωση ενώ προσπαθούμε να\n" "εκτελέσουμε μια λειτουργία που απαιτεί το ευρετήριο.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Αδύνατη η τροποποίηση της σελίδας: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Interwiki Λέξη-κλειδί" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Αρχική σελίδα" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Ριζικός κατάλογος εγγράφου" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Προφίλ" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Άγνωστο>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Σφάλμα στο %(file)s στη γραμμή %(line)i κοντά στο \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Αριθμητική" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Το πρόσθετο αυτό επιτρέπει την ενσωμάτωση αριθμητικών υπολογισμών στο zim.\n" "Είναι βασισμένο στο αριθμητικό άρθρωμα από\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Αριθμητική" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Άγνωστη" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Τύπος" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Μέγεθος" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Τροποποίηση" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Μετακίνηση Εδώ" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "Αντι_γραφή Εδώ" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Ακύρωση" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Περιηγητής επισυνάψεων" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Θέση μέσα στο παράθυρο" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Συνημμένα" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Προβολή Πλοηγητή Συννημένων" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Συννημένο" msgstr[1] "%i _Συννημένα" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό προσθέτει ένα επιπλέον πλαίσιο που προβάλει τη λίστα με τις " "σελίδες\n" "που περιέχουν συνδέσμους που οδηγούν στην τρέχουσα σελίδα.\n" "\n" "Το πρόσθετο αυτό είναι βασικό και έρχεται μαζί με το zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "BackLinks" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Προεπισκόπηση" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Παρουσιάστηκε σφάλμα κατά τη δημιουργία της εικόνας.\n" "Θέλετε παρόλα αυτά να αποθηκεύσετε το πηγαίο αρχείο;" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Χρονικό" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Ημέρα" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Εβδομάδα" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Μήνας" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Έτος" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Εμφάνιση του ημερολογίου στην πλευρική μπάρα αντί διαλόγου" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Χρήση μίας σελίδα για κάθε" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Σήμε_ρα" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Ημερολό_γιο" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Εμφάνιση ημερολογίου" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Ημερολόγιο" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Σήμερα" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Εισαγωγή διαγράμματος" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό παρέχει έναν επεξεργαστή διαγραμμάτων\n" "για το zim βασισμένο στο GraphViz.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Διά_γραμμα" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Εισαγωγή διαγράμματος" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Απόκρυψη μπάρας μενού σε λειτουργία πλήρους οθόνης" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Απόκρυψη μπάρας εργαλείων σε κατάσταση πλήρους οθόνης" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Απόκρυψη μπάρας διαδρομής σε λειτουργία πλήρους οθόνης" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Απόκρυψη μπάρας κατάστασης σε λειτουργία πλήρους οθόνης" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Μέγιστο μήκος σελίδας" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Κατακόρυφο περιθώριο" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Χρώμα κειμένου φόντου" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Χρώμα κειμένου προσκηνίου" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Χρώμα φόντου οθόνης" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Εισαγωγή Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Αυτό το ένθετο παρέχει έναν συντάκτη διαγραμμάτων για το zim,\n" "βασισμένο στο Dita..\n" "\n" "Είναι ένα κεντρικό ένθετο που διανείμεται με το zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Επεξεργασία Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Εισαγωγή συνάρτησης" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό παρέχει έναν επεξεργαστή συναρτήσεων\n" "για το zim βασισμένο στο latex.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "Ε_πεξεργασία εξίσωσης" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Εισαγωγή Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Αυτό το ένθετο παρέχει ένα συντάκτη γραφημάτων για το zim,\n" "βασισμένο στο Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Επεξεργασία Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Εισαγωγή GNU R Plot" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Το πρόσθετο αυτό παρέχει έναν επεξεργαστή σχεδιαγραμμάτων βασισμένο στο GNU " "R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Επεξεργασία GNU R Plot" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Το πρόσθετο υπολογισμού μαθηματικών εκφράσεων απέτυχε\n" "να υπολογίσει την έκφραση στη θέση του δρομέα." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Υπολογιστής μαθηματικών εκφράσεων" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό υπολογίζει απλές\n" "μαθηματικές εκφράσεις στο zim.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Αδύνατη η ανάλυση της έκφρασης" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Υπολογισμός _μαθηματικής έκφρασης" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Εισαγωγή συμβόλου" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό εισάγει το διάλογο 'Εισαγωγή συμβόλου' και\n" "κάνει δυνατή τη χρήση τυπογραφικών χαρακτήρων.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Σύ_μβολο..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Ταξινόμος γραμμών" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Αυτό το ένθετο ταξινομεί τις επιλεγμένες γραμμές με\n" "αλφαβητική σειρά. Αν είναι ήδη ταξινομημένες, τότε\n" "αντιστρέφεται η ταξινόμηση (A-Ω σε Ω-Α).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "Ταξινόμηση γραμμών" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Παρακαλώ επέλεξε περισσότερς από μια γραμμές." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Χάρτης δεσμών" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό παρέχει μία γραφική αναπαράσταση της διάρθρωσης\n" "των δεσμών του σημειωματάριου. μπορεί να χρησιμοποιηθεί σαν ένα είδος\n" "\"χάρτη\" που εμφανίζει τον τρόπο με τον οποίο συνδέονται οι σελίδες\n" "μεταξύ τους.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Εμφάνιση χάρτη δεσμών" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Εκτύπωση στον περιηγητή" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό αποτελεί μια προσωρινή λύση για την έλλειψη\n" "υποστήριξης εκτύπωσης στο zim. Μετατρέπει και εξάγει την τρέχουσα\n" "σελίδα σε html και την ανοίγει τον περιηγητή ιστοσελίδων σας. Εφόσον\n" "ο περιηγητής ιστοσελίδων σας έχει υποστήριξη εκτύπωσης, θα μπορέσετε\n" "να εκτυπώσετε τα δεδομένα σας, έστω και έμμεσα.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "Εμφάνι_ση στον περιηγητή" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Γρήγορη σημείωση" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό παρέχει ένα διάλογο μέσω του οποίου μπορείτε\n" "εύκολα να εισάγετε κείμενο ή τα περιεχόμενα του προχείρου σε\n" "μία σελίδα του zim.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Γρήγορη σημείωση..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Τομέας σελίδας" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Δημιουργία νέας σελίδας για κάθε σημείωση" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Τίτλος" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Άνοιγμα Σελίδας" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Να απορριφθεί το σημείωμα;" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Εισαγωγή στιγμιότυπου οθόνης" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό επιτρέπει τη λήψη ενός στιγμιοτύπου οθόνης\n" "και την εισαγωγή του σε μία σελίδα του zim.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Εντολή λήψης στιγμιότυπου οθόνης" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "Σ_τιγμιότυπο οθόνης" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Σύλληψη ολόκληρης της οθόνης" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Επιλογή παραθύρου ή περιοχής" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Καθυστέρηση" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "δευτερόλεπτα" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Παρουσιάστηκε κάποιο σφάλμα κατά την εκτέλεση του \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Εισαγωγή διαγράμματος ακολουθίας" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Αυτό το πρόσθετο παρέχει έναν επεξεργαστή διαγραμμάτων ακολουθίας για τον " "zim βασισμένο στο seqdiag.\n" "Επιτρέπει την εύκολη επεξεργασία των διαγραμμάτων ακολουθίας.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Διάγραμμα ακολουθίας" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Προβολή πηγής" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Αυτό το πρόσθετο επιτρέπει την εισαγωγή 'μπλοκ κώδικα' σε αυτή τη σελίδα. " "Αυτά θα\n" "εμφανιστούν σαν ενσωματωμένα γραφικά στοιχεία με επισήμανση σύνταξης, " "αρίθμηση γραμμών κλπ.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Επισήμανση τρέχουσας γραμμής" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Εμφάνιση δεξιού περιθωρίου" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Τοποθεσία δεξιού περιθωρίου" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Πλάτος καρτέλας" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Μπλοκ κώδικα" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Εισαγωγή μπλοκ κώδικα" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Σύνταξη" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Εμφάνιση αριθμών γραμμής" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Έλεγχος ορθογραφίας" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό προσθέτει υποστήριξη ορθογραφικού ελέγχου\n" "με χρήση του gtkspell.\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Έλεγχος ορ_θογραφίας" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Αδυναμία φόρτωσης ορθογραφικού ελέγχου" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Αυτό μπορεί να είναι ένδειξη ότι δεν έχουν\n" "εγκατασταθεί τα απαραίτητα λεξικά" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "Αριστερά" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Κέντρο" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "Δεξιά" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Μη καθορισμένο" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Επεξεργαστής πίνακα" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "Με αυτό το πρόσθετο μπορείς να ενσωματωθεί ένα 'πίνακας' σε σελίδα wiki. Οι " "πίνακες εμφανίζονται σαν γραφικά στοιχεία GTK TreeView.\n" "Η εξαγωγή αυτών σε διάφορες μορφές (π.χ. HTML/LaTeX) ολοκληρώνει το σύνολο " "χαρακτηριστικών.\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "με γραμμές" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "καμία γραμμή πλέγματος" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "οριζόντιες γραμμές" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "κάθετες γραμμές" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Γραμμές πλέγματος" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Πίνακας" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Προσθήκη γραμμής" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Αφαίρεση γραμμής" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Κλωνοποίηση γραμμής" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Αλλαγή στηλών" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Άνοιγμα βοήθειας" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Διαγραφή γραμμής" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "Ο πίνακας πρέπει να αποτελείται από τουλάχιστον μια γραμμή!\n" " Καμία διαγραφή δεν πραγματοποιήθηκε." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Παρακαλώ επιλέξτε γραμμή, πριν πατήσετε το κουμπί." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Εισαγωγή πίνακα" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Επεξεργασία πίνακα" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Διαχείριση στηλών πίνακα" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Στήλη 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Στοίχιση" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Προσθήκη στήλης" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Αφαίρεση στήλης" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Ο πίνακας απαιτείται να έχει τουλάχιστον μια στήλη." #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Πίνακας Περιεχομένων" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Αυτό το ένθετο προσθέτει ένα νέο χειριστήριο που\n" "εμφανίζει τον πίνακα περιεχομένων της τρέχουσας σελίδας.\n" "\n" "Πρόκειται για ένα βασικό ένθετο της διανομής του zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Εμφάνιση του Πίνακα ως πλεούμενου χειριστήριου αντί για πλαϊνού" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "ΠΠ" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Υποχώρηση" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Προώθηση" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Ετικέτες" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Αυτό το ένθετο παρέχει ένα ευρετήριο σελίδων που φιλτράρεται με βάση\n" "την επιλογή ετικετών από ένα σύνεφο.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Εμφάνιση ονόματος πλήρους σελίδας" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Ταξινόμηση σελίδων ανά ετικέτα" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "κενό" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Αλφαβητική ταξινόμηση" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Λίστα εργασιών" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Αυτό το ένθετο προσθέτει ένα διάλογο που εμφανίζει όλες τις\n" "εκκρεμείς ενέργειες σε ένα σημειωματάριο. Εκκρεμείς ενέργειες\n" "αποτελούν είτε κουτάκια ελέγχου που δεν έχουν τσεκαρισιτεί ή\n" "στοιχεία που έχουν σημειωθεί με ετικέτες όπως \"TODO\" ή \"FIXME\".\n" "Είναι ένα κεντρικό ένθετο που παρέχεται με τη διανομή του zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Θεώρησε όλα τα κουτάκια ως εργασίες" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Μετατροπή ονομάτων σελίδων σε ετικέτες για τις ενέργειες" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Ετικέτες που καταδεικνύουν εργασίες:" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Ετικέττα για επόμενη ενέργεια" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Είναι απαραίτητη η επαναδημιουργία του ετυρετηρίου" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Είναι η πρώτη φορά που ανοίγει αυτή η λίστα ενεργειών.\n" "Για το λόγο αυτό πρέπει να ανασυνταχθεί το ευρετήριο.\n" "Ανάλογα με το μέγεθος αυτού του σημειωματάριου, \n" "μπορεί να απαιτηθούν έως και αρκετά λεπτά. Αυτό δεν \n" "ξανα-απαιτείται για το επόμενο άνοιγμα της λίστας." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Φίλτρο" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Εμφάνιση Μόνο Εκτελέσιμων Ενεργειών" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i ανοικτό αντικείμενο" msgstr[1] "%i ανοικτά αντικείμενα" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Όλες οι εργασίες" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Χωρίς ετικέτα" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Εργασία" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Ημερομηνία" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Εικονίδιο πλαισίου συστήματος" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Το πρόσθετο αυτό προσθέτει το Εικονίδιο πλαισίου συστήματος\n" "του zim για γρήγορη πρόσβαση στα σημειωματάρια.\n" "\n" "Το πρόσθετο εξαρτάται από την έκδοση 2.10 της Gtk+ (ή νεότερη).\n" "\n" "Είναι ένα από τα πρόσθετα του zim και παρέχεται μαζί του.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Κλασικό εικονίδιο συστήματος.\n" "Να μη χρησιμοποιηθεί το νέου στυλ εικονίδιο κατάστασης στο Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Εμφάνιση ξεχωριστού εικονιδίου για κάθε σημειωματάριο" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Γρήγορη σημείωση..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "Ά_λλα..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Σημειωματάρια" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Wiki Επιφάνειας Εργασίας" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Έλεγχος εκδόσεων" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Αυτό το ένθετο παρέχει έλεχγο εκδόσεων για τα σημειωματάρια.\n" "Το ένθετο υποστηρίζει τα συστήματα ελέγχου εκδόσεων Bazzar,\n" "Git και Mercurial.\n" "\n" "Είναι ένα κεντρικό ένθετο που παρέχεται με τη διανομή του zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Αυτόματη αποθήκευσης έκδοσης σε τακτά χρονικά διαστήματα" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Αυτόματα αποθηκευμένη έκδοση από το zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Απο_θήκευση έκδοσης" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "Ε_κδόσεις..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Δεν έχει γίνει καμία αλλαγή από την τελευταία αποθηκευμένη έκδοση του " "σημειωματάριου" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Καμία αλλαγή από την τελευταία αποθηκευμένη έκδοση" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Ενεργοποίηση του ελέγχου εκδόσεων" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Ο έλεγχος εκδόσεων δεν είναι ενεργός για αυτό το σημειωματάριο.\n" "Θέλετε να τον ενεργοποιήσετε;" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Σύστημα ελέγχου" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Αποθήκευση έκδοσης" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Εισαγάγετε σχόλιο για αυτήν την έκδοση" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Αποθηκευμένη έκδοση από το zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Εκδόσεις" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Σελίδα" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Εμφ_άνιση με Ενδείξεις" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Επιλέξτε μία έκδοση για να δείτε τις αλλαγές μεταξύ εκείνης και της\n" "τρέχουσας κατάστασης. Ή επιλέξτε πολλαπλές εκδόσεις για να δείτε\n" "τις διαφορές που έχουν μεταξύ τους.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Σχόλιο" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "Επαναφο_ρά έκδοσης" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Εμ_φάνιση αλλαγών" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Σε αντιπαραβολή" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Κώδικας Σελίδας με Ενδείξεις" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Επαναφορά σελίδας στην αποθηκευμένη έκδοση;" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Θέλετε να επαναφέρετε τη σελίδα: %(page)s\n" "στην αποθηκευμένη έκδοση: %(version)s;\n" "\n" "Όλες οι αλλαγές που έγιναν μετά την τελευταία\n" "αποθήκευση της σελίδας, θα χαθούν!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Αλλαγές" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Αναθ" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Βικισελίδα: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Αδυναμία εύρεσης πρότυπου \"%s\"" #~ msgid "Email client" #~ msgstr "Πελάτης email" #~ msgid "Pages" #~ msgstr "Σελίδες" #~ msgid "_Filter" #~ msgstr "_Φίλτρο" #~ msgid "Output" #~ msgstr "Έξοδος" #~ msgid "Match c_ase" #~ msgstr "Τ_αίριασμα πεζών/κεφαλαίων" #~ msgid "File browser" #~ msgstr "Περιηγητής αρχείων" #~ msgid "Web browser" #~ msgstr "Περιηγητής ιστοσελίδων" #~ msgid "Slow file system" #~ msgstr "Εμφάνιση συστήματος αρχείων" #~ msgid "Prio" #~ msgstr "Προτ" #~ msgid "Text Editor" #~ msgstr "Επεξεργαστής κειμένου" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/zim.pot�����������������������������������������������������������������������0000664�0001750�0001750�00000224666�12605533176�016211� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "" #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "" #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "" #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "" #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "" msgstr[1] "" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "" msgstr[1] "" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "" msgstr[1] "" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "" msgstr[1] "" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "" #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "" #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "" #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "" #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "" #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "" #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "" #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "" msgstr[1] "" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" ��������������������������������������������������������������������������zim-0.65/translations/it.po�������������������������������������������������������������������������0000664�0001750�0001750�00000304130�12613750113�015612� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Italian translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-12 17:26+0000\n" "Last-Translator: Marco Cevoli <Unknown>\n" "Language-Team: Italian <it@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Impossibile eseguire l'applicazione: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "ha restituito uno stato di uscita diverso da zero %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Impossibile avviare %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Predefinito" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Apparentemente è stato rilevato un bug." #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "File non trovato: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Impossibile leggere: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Ciò di solito significa che il file contiene caratteri non validi" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Dettagli" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "il file %s non è scrivibile" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Il file %s è stato modificato sul disco" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Personalizza..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Nessuna applicazione trovata" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Apri con \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Scegli un'applicazione per aprire i collegamenti \"%s\"" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Scegli un'applicazione per aprire i file\n" "di tipo \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Configura applicazioni" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Aggiungi applicazione" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Predefinito di sistema" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nome" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Comando" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Rendi l'applicazione predefinita" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Impossibile trovare l'eseguibile \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Strumenti personalizzati" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "È possibile configurare gli strumenti personalizzati che appariranno\n" "nel menù strumenti e nella barra strumenti o nel menù contestuale." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Modifica gli strumenti personalizzati" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Descrizione" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Icona" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Il comando non modifica i dati" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "L'output deve sostituire la selezione attuale" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Mostra nella barra degli strumenti" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "I seguenti parametri verranno sostituiti\n" "all'esecuzione del comando:\n" "<tt>\n" "<b>%f</b> il file sorgente della pagina come file temporaneo\n" "<b>%d</b> la cartella degli allegati della pagina corrente\n" "<b>%s</b> il file sorgente della pagina (se esiste)\n" "<b>%n</b> il percorso del blocco note (file o cartella)\n" "<b>%D</b> la cartella principale dei documenti (se esiste)\n" "<b>%t</b> il testo selezionato o la parola sotto il cursore\n" "<b>%T</b> il testo selezionato inclusa la formattazione wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Esporta" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Aggiornamento dell'indice in corso" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Esportazione blocco note" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Cartella già esistente: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "La cartella esiste già e non è vuota; esportando in questa cartella i file " "contenuti potrebbero essere sovrascritti. Continuare?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Il file esiste già" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Questo file esiste già.\n" "Sovrascriverlo veramente?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Seleziona pagina da esportare" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Blocco _note completo" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "_Pagina singola" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Pagina" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Includi sottopagine" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Seleziona il formato di esportazione" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Altro..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formato" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Modello" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" "Collega i file alla cartella principale dei documenti indicando il percorso " "completo" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Fai corrispondere la cartella principale dei documenti all'URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Ottieni altri modelli online" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Seleziona il file o la cartella di destinazione" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Esporta ogni pagina in un file separato" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Esporta tutte le pagine in un solo file" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Cartella di destinazione" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Indice" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "File di destinazione" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" "Si sono verificati %(n_error)i errori and %(n_warning)i avvisi; vedi registro" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "Si sono verificati %i errori; vedi log" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "Si sono verificati %i avvertimenti; vedi log" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Esportazione completata" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Visualizza _registro" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_File" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Modifica" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Visualizza" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Inserisci" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Cerca" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mato" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "S_trumenti" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Vai" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "A_iuto" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "B_arra di navigazione" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Barra degli strumenti" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nuova pagina..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nuova s_ottopagina" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Apri un altro blocco note..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Apri in una nuova _finestra" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importa pagina..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Salva" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Salva una _copia..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Esporta..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Invia a..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Sposta pagina..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Rinomina pagina..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Elimina pagina" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Proprie_tà" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Chiudi" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Esci" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Cerca..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Cerca _link entranti..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Modifiche Recenti" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copia _posizione" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Modelli" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Pr_eferenze" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Ricarica" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Apri cartella _allegati" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Apri la cartella del _blocco note" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Apri la cartella principale dei _documenti" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Apri la cartella principale dei _documenti" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Allega _file" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Allega file esterno" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Modifica _sorgente" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Avvia server _Web" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Aggiorna indice" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Strumen_ti personalizzati" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Indietro" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Vai alla pagina precedente" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Avanti" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Vai alla pagina successiva" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Livello superiore" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Vai alla pagina superiore" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Livello inferiore" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Vai alla pagina inferiore" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Voce _precedente nell'indice" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Vai alla pagina precedente" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Voce _successiva dell'indice" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Vai alla pagina successiva" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Pagina iniziale" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Vai alla pagina iniziale" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Vai a..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Contenuti" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "Domande _frequenti" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Scorciatoie da tastiera" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Bug" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Informazioni" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "Tutti i pannelli" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Mostra tutti i pannelli" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Barra di _stato" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "Riquadri _Laterali" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Mostra Riquadri Laterali" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "Schermo _intero" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Blocco note _modificabile" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Rendi modificabile il blocco note" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Nessuno" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "Pagine _recenti" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Pagine modificate recentemente" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Cronologia" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Gerarchia della pagina" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Testo _e icone" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Solo _icone" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Solo _testo" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "Icone _grandi" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Icone _piccole" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Icone _minuscole" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Aggiungi linee tratteggiate ai menù" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Usa <Ctrl><Spazio> per passare al pannello laterale" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Rimuovi collegamenti alla cancellazione delle pagine" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" "Utilizza sempre l'ultima posizione del cursore quando si apre una pagina" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Il file o la cartella specificata non esiste.\n" "Controllare se il percorso è corretto." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Nessun file o cartella: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "La pagina ha modifiche non salvate" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Aggiorna blocco note?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Questo blocco note è stato creato in una versione precedente di Zim.\n" "Aggiornarlo subito all'ultima versione?\n" "\n" "L'aggiornamento richiederà del tempo e potrebbe apportare diverse modifiche\n" "al blocco note. Di solito è una buona idea effettuare una\n" "copia di sicurezza prima di procedere.\n" "\n" "Se si sceglie di non effettuare subito l'aggiornamento, alcune " "caratteristiche\n" "potrebbero non funzionare come previsto." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Aggiornamento blocco note in corso" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "L'aggiornamento dell'indice è ancora in corso. Fino a quando non sarà " "terminato, non è possibile aggiornare correttamente i collegamenti. " "Effettuare adesso tale operazione potrebbe alterare i collegamenti. " "Continuare?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Aggiornamento dei collegamenti in corso" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Rimozione dei collegamenti in corso" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Creare la cartella?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "La cartella \"%s\" non esiste ancora.\n" "Vuoi crearla ora?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Impossibile aprire: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Questa pagina non ha una cartella per gli allegati" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Modifica del file: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Si sta modificando un file con un'applicazione esterna. Al termine si può " "chiudere questa finestra di dialogo." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Un wiki per il desktop" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Alessandro Sarretta https://launchpad.net/~alessandro-sarretta\n" " Calogero Bonasia https://launchpad.net/~0disse0\n" " Davide Truffa https://launchpad.net/~catoblepa\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Jacopo Moronato https://launchpad.net/~jmoronat\n" " Marco Cevoli https://launchpad.net/~marco-cevoli\n" " Mario Calabrese https://launchpad.net/~mario-calabrese\n" " Martino Barbon https://launchpad.net/~martins999\n" " Matteo Ferrabone https://launchpad.net/~desmoteo-gmail\n" " Nicola Gramola https://launchpad.net/~nicola-gramola\n" " Nicola Jelmorini https://launchpad.net/~jelmorini\n" " Nicola Moretto https://launchpad.net/~nicola88\n" " Nicola Piovesan https://launchpad.net/~piovesannicola\n" " igi https://launchpad.net/~igor-cali" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Indice" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Sola lettura" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Cerca" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Cerca Pagine..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _link entranti..." msgstr[1] "%i _link entranti..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Impossibile salvare la pagina: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Per continuare è possibile salvare una copia di questa pagina o scartare\n" "tutte le modifiche. Se se ne salva una copia, le modifiche saranno comunque\n" "scartate, ma sarà possibile ripristinare la copia in seguito." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "Scarta _modifiche" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Salva copia" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Vai a" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Vai alla pagina" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nuova sottopagina" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nuova pagina" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Verrà creata una nuova pagina, perché si sta inserendo\n" "un collegamento a una pagina inesistente." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Nome della pagina" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Modello di pagina" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Pagina già esistente" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Salva copia" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importa pagina" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "File di testo" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Sposta pagina" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Sposta la pagina \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Aggiorna %i collegamento che punta alla pagina corrente" msgstr[1] "Aggiorna %i collegamenti che puntano alla pagina corrente" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Sezione" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Rinomina pagina" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Rinomina la pagina \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Aggiorna il titolo di questa pagina" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Elimina pagina" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Eliminare la pagina \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Verrà eliminata la pagina \"%s\", insieme\n" "a tutti gli allegati e le relative sottopagine." #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Rimuovi i collegamenti da %i pagina che rimandano a questa pagina" msgstr[1] "Rimuovi i collegamenti da %i pagine che rimandano a questa pagina" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "Verrà eliminato %i file" msgstr[1] "Verranno eliminati %i file" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Allega file" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "La pagina \"%s\" non ha una cartella per gli allegati" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Inserisci le immagini come collegamenti" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Blocco note" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Apri blocco note" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Blocco note predefinito" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Aggiungi blocco note" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Selezionare un nome e una cartella per questo blocco note." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Cartella" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "Per creare un nuovo blocco note è necessario selezionare una cartella " "vuota.\n" "Naturalmente è anche possibile selezionare la cartella di un blocco note zim " "esistente.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Non è disponibile alcuna estensione per visualizzare questo oggetto." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "È necessaria l'estensione %s per visualizzare questo oggetto." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Aggiornamento indice in corso..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Annulla" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Ripeti" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Taglia" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copia" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Incolla" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Elimina" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Attiva la casella 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Attiva la casella 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Modifica oggetto o collegamento..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Rimuovi collegamento" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Data e ora..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Immagine..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Elenco pun_tato" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Elenco _numerato" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Elenco con casella di controllo" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Testo da _file..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Collegamento..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Inserisci collegamento" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Elimina formattazione" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Trova..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Trova s_uccessivo" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Trova _precedente" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Sostituisci..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Conteggio parole..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Aumenta ingrandimento" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "_Riduci ingrandimento" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Dimensioni _normali" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nuovo _Allegato" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "_Modelli di file..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Titolo _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Titolo 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Titolo _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Titolo 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Titolo _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Titolo 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Titolo _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Titolo 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Titolo _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Titolo 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Grassetto" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Grassetto" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Corsivo" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Corsivo" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Evidenziato" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Evidenziato" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Barrato" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Barrato" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Pedice" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Apice" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Verbatim" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Verbatim" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Premi il tasto <Invio> per visitare i collegamenti\n" "(se disabilitato puoi comunque usare la combinazione di tasti <Alt><Invio>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Mostra il cursore anche per le pagine non modificabili" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "" "Converti automaticamente le parole composte con le iniziali maiuscole " "(\"CamelCase\") in un collegamento" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Converti automaticamente i percorsi dei file in collegamenti" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" "Seleziona automaticamente la parola corrente quando si applica la " "formattazione" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Premi il tasto <Backspace> per ridurre l'indentazione\n" "(se disabilitato puoi ancora usare la combinazione <Maiusc><Tab>)." #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Facendo clic su una casella di controllo si alternano gli stati della " "casella stessa" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Ridurre l'indentazione di un elemento dell'elenco la riduce anche ad ogni " "sottoelemento" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "" "Contrassegnando una casella di controllo si contrassegnano anche gli " "eventuali sottoelementi" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Riformatta al volo il markup del wiki" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Formato predefinito per la copia di testo negli appunti" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Cartella con i modelli per i file allegati" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Nessun wiki definito: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Copi_a come..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Sposta il testo selezionato..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Modifica Proprietà" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Modifica collegamento" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copia _collegamento" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copia indirizzo e-mail" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Apri cartella" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Apri con..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Apri" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Nessun modello installato" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "La cartella\n" "%s\n" "non esiste.\n" "Crearla adesso?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Inserisci data e ora" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendario" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Collega alla data" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Inserisci immagine" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Prima allega un'immagine" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Tipo di file non supportato: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Modifica immagine" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Percorso" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Collega a" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Larghezza" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Altezza" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Ripristina dimensioni" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Inserisci testo da file" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Modifica collegamento" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Collegamento" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Testo" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Successivo" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Precedente" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Corrispondenza _maiuscole/minuscole" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Intera _parola" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Espressione _regolare" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Evidenzia" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Trova" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opzioni" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Cerca e sostituisci" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Cerca qualcosa" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Sostituisci con" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "S_ostituisci" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Sostituisci _tutto" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Conteggio parole" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Paragrafo" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Selezione" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Parole" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Righe" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Caratteri" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Caratteri senza spazi" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Sposta il testo nell'altra pagina" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Sposta" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Sposta il testo in" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Lascia il collegamento alla nuova pagina" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Apri nuova pagina" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Nuovo file" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interfaccia" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Formattazione" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Preferenze" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Estensioni" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Applicazioni" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Usa carattere personalizzato" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "A_ltro" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigura" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Ottieni altre estensioni online" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dipendenze" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Nessuna dipendenza" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Non riuscito" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Opzionale" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autore" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Attivo" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Estensione" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configura estensione" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opzioni estensione %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Imposta editor di testo predefinito" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Proprietà" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Proprietà blocco note" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Modifiche recenti" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Oggi" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Ieri" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Ultima Modifica" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Si possono eseguire ricerche avanzate con gli operatori\n" "AND, OR e NOT. Consulta la guida in linea (Aiuto) per ulteriori dettagli." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Limita la ricerca alla pagina corrente e alle sue sottopagine" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Occorrenze" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Server Web" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server non avviato" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Permetti accesso pubblico" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Porta" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server avviato" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server arrestato" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Modelli" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Esplora" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Copia Modello" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Seleziona file" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Espandi _tutto" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Collassa tutto" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Cancella" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Seleziona cartella" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Seleziona immagine" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Su>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Pannello laterale sinistro" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Pannello laterale destro" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Pannello inferiore" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Pannello superiore" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "In alto a sinistra" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "In basso a sinistra" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "In alto a destra" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "In basso a destra" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Quando si segnala questo bug, includere\n" "i dati contenuti nella casella di testo sottostante." #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Tutti i file" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Immagini" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "File di registro" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "File già esistente" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Esiste già un file con il nome <b>\"%s\"</b>.\n" "È possibile utilizzare un altro nome o sovrascrivere il file esistente." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nome file" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Sfoglia" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Sovrascrivi" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Impossibile trovare il file o la cartella di questo blocco note." #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Specificare un blocco note" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Impossibile trovare il blocco note: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" "È necessario indicare l'ubicazione dell'output prima dell'esportazione" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "La cartella di output esiste già e non è vuota; specificare \"--overwrite\" " "per eseguire comunque l'esportazione" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Il file di output esiste già; specificare \"--overwrite\" per eseguire " "comunque l'esportazione" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "È necessario un file di output per esportare l'MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "È necessario un file di output per esportare il blocco note completo" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Il nome della pagina indicato non è valido.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nome dalla pagina non valido \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "L'aggiornamento dell'indice è ancora in corso al momento\n" "di realizzare un'operazione che necessita dell'indice.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Impossibile modificare la pagina: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Parola chiave interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Pagina iniziale" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Cartella principale dei documenti" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profilo" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Sconosciuto>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Errore in %(file)s, riga %(line)i vicino a \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetica" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Questo plugin permette di includere espressioni aritmetiche in zim.\n" "Si basa sul modulo aritmetico \n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmetica" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Sconosciuto" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Tipo" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Dimensioni" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Modificato" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Sposta qui" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Copia qui" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Annulla" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Sfoglia allegati" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" "Questa estensione mostra la cartella con gli allegati della pagina corrente " "sotto forma\n" "di icona nel riquadro inferiore.\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Posizione nella finestra" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Allegati" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Mostra Sfoglia allegati" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Allegato" msgstr[1] "%i _Allegati" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Pannello link entranti" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge un nuovo widget che mostra \n" "l'elenco delle pagine collegate a quella corrente.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Link entranti" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Anteprima" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Si è verificato un errore durante la creazione dell'immagine.\n" "Salvare comunque il testo sorgente?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "BookmarksBar" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\tQuesta estensione aggiunge una barra dei segnalibri.\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "Salva segnalibri" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "Aggiungi i nuovi segnalibri all'inizio della barra" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "Aggiungi segnalibro" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "Segnalibri" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "Eliminare tutti i segnalibri?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "Mostra il nome completo della pagina" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "Imposta nuovo nome" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "Ripristina nome originale" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "Rimuovi" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "Rimuovi tutto" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "Apri in una nuova finestra" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "Imposta alla pagina corrente" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Diario" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Questa estensione trasforma una sezione del blocco note in\n" "un diario con una pagina per ogni giorno, settimana o\n" "mese.\n" "Inoltre aggiunge un calendario per accedere a queste pagine.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Giorno" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Settimana" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Mese" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Anno" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "" "Mostra il calendario nel pannello laterale anziché in una finestra di dialogo" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Usa una pagina per ogni" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Espandi pagina del diario nell'indice all'apertura" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Oggi" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Calen_dario" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Mostra calendario" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calendario" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Oggi" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Inserisci diagramma" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione mette a disposizione di Zim un editor di diagrammi basato " "su GraphViz.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gramma..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Inserisci diagramma" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Modifica diagramma" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Redazione senza distrazioni" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Questa estensione aggiunge alcune impostazioni per usare Zim\n" "come un editor senza distrazioni.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Nascondi la barra dei menu in modalità schermo intero" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Nascondi la barra degli strumenti in modalità schermo intero" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Nascondi la barra del percorso in modalità schermo intero" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Nascondi la barra di stato in modalità schermo intero" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Larghezza massima della pagina" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Margine verticale" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Colore di sfondo del testo" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Colore di primo piano del testo" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Colore di sfondo dello schermo" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Inserisci Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione mette a disposizione di Zim un editor di diagrammi basato " "su Ditaa.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Modifica ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Inserisci equazione" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione mette a disposizione di Zim un editor di equazioni basato " "su LaTeX.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "E_quazione" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Modifica equazione" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Inserisci Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Questa estensione mette a disposizione di Zim un editor di grafici plot " "basato su Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Modifica Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Inserisci grafico GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Questa estensione mette a disposizione di Zim un editor di grafici plot " "basato su GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Modifica grafico GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "L'estensione Calcolatrice in linea non è stata in grado\n" "di valutare l'espressione alla posizione del cursore." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Calcolatrice in linea" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione permette di valutare semplici\n" "espressioni matematiche in Zim.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Impossibile analizzare l'espressione" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Valuta espressione _matematica" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Inserisci simbolo" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge la finestra di dialogo 'Inserisci simbolo' e " "permette\n" "la formattazione automatica di caratteri tipografici.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Si_mbolo..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Ordina linee" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Questa estensione ordina alfabeticamente le righe selezionate.\n" "Se l'elenco è già ordinato, l'ordine viene invertito\n" "(da A-Z a Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Ordina linee" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Scegliere più di una riga di testo prima di ordinare il testo." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mappa dei collegamenti" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione mette a disposizione una finestra di dialogo con una\n" "rappresentazione grafica della struttura dei collegamenti del\n" "blocco note. Può essere utilizzata come una specie di \"mappa mentale\"\n" "che mostra le relazioni fra le pagine.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Mostra mappa dei collegamenti" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Stampa su browser" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione fornisce una soluzione alternativa alla mancanza del\n" "supporto alla stampa in Zim. Esporta la pagina corrente\n" "in formato HTML e la apre in un browser. Supponendo che il browser\n" "consenta la funzionalità di stampa, si potrà\n" "stampare la pagina con due clic.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Stampa su browser" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Annotazione veloce" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge una finestra di dialogo per copiare rapidamente " "del testo \n" "o il contenuto degli appunti in una pagina di Zim.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Annotazione veloce..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Sezione pagina" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Crea una nuova pagina per ogni annotazione" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Titolo" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Apri _pagina" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Elimina la nota" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Inserisci Partitura" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione mette a disposizione un editor di partiture per zim basato " "su GNU Lilypond.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Includi intestazione" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Includi piè di pagina" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "S_core" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Modifica partitura" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Inserisci screenshot" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione crea un'istantanea dello schermo e la inserisce\n" "in una pagina di Zim.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Comando per screenshot" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Screenshot..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Cattura l'intero schermo" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Seleziona finestra o regione" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Ritardo" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "secondi" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Si è verificato un errore mentre veniva eseguito \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Inserisci diagramma di sequenza" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Questa estensione aggiunge a Zim un editor di diagrammi di sequenza basato " "su seqdiag.\n" "Consente la modifica facile dei diagrammi di sequenza.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Diagramma di sequenza" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Modifica diagramma di sequenza" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Visualizzazione sorgente" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Questa estensione consente di inserire 'blocchi di codice' nella pagina, " "che\n" "saranno viusalizzati come widget incorporati con evidenziatura della\n" "sintassi, numeri di riga, ecc.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Rientri automatici" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Pulsante home intelligente" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Evidenzia la riga attuale" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Mostra margine destro" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Posizione margine destro" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Larghezza della tabulazione" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Blocco di codice" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Inserisci blocco di codice" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Sintassi" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Mostra numeri di riga" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Controllo ortografico" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge la funzionalità di controllo ortografico mediante " "gtkspell.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Controllo _ortografico" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Impossibile caricare correttore ortografico" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Probabilmente non è stato installato\n" "il dizionario corretto" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "A sinistra" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Centro" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "A destra" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Non specificato" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Editor tabelle" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "Con questa estensione puoi inserire una 'tabella' in una pagina wiki. Le " "tabelle saranno mostrate come widget GTK TreeView.\n" "La funzionalità consente anche l'esportazione in vari formati (ad es. HTML o " "LaTeX).\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "bordi visibili" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "bordi non visibili" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "bordi orizzontali" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "bordi verticali" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Mostra barra strumenti aiuto" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Bordi griglia" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Tabella" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Aggiungi riga" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Elimina riga" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Clona riga" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "Riga sopra" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "Riga sotto" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Cambia colonne" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Apri aiuto" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Elimina riga" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Apri link contenuto cella" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "La tabella deve avere almeno una riga.\n" " Non è stato eliminato nulla." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Scegliere una riga prima di premere il pulsante." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Inserisci tabella" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Modifica tabella" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Gestione colonne tabella" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Colonna 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "A capo\n" "automatico" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Allinea" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Aggiungi colonna" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Elimina colonna" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Sposta colonna a sinistra" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Sposta colonna a destra" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Una tabella deve avere almeno una colonna." #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Sommario" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge un widget che visualizza il sommario\n" "della pagina corrente.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Mostra il sommario come widget mobile anziché nel pannello laterale" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Mostra l'intestazione del titolo della pagina nel ToC" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Sommario" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Diminuisci di livello" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Aumenta di livello" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etichette" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Questa estensione mette a disposizione l'indice delle pagine filtrato " "attraverso la selezione\n" "di una o più etichette da una tag cloud.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Mostra nome completo della pagina" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Ordina pagine per etichette" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "senza etichetta" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Ordina alfabeticamente" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Elenco attività" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge una finestra di dialogo che visualizza tutte le " "attività in sospeso\n" "presenti nel blocco note. Le attività in sospeso possono essere caselle di " "controllo\n" "o elementi marcati con le etichette \"TODO\" (da fare) o \"FIXME\" (da " "risolvere).\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Considera tutte le caselle di controllo come attività" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Converti il nome della pagina in etichette per le attività" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" "Assegna automaticamente la scadenza alle attività nelle pagine del calendario" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Segnala attività in scadenza lunedì o martedì prima del fine settimana." #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Le etichette identificano le attività" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Etichetta per l'attività successiva" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Etichetta per attività non eseguibili" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Sottoalbero da indicizzare" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Sottoalbero da ignorare" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "È necessario indicizzare il blocco note" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "È la prima volta che viene aperta la lista delle attività.\n" "Pertanto l'indice dev'essere ricostruito.\n" "A seconda delle dimensioni del blocco note l'operazione può\n" "richiedere anche diversi minuti. Al prossimo uso della\n" "lista delle attività tale operazione non sarà più necessaria." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtro" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Mostra solo attività eseguibili" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i elemento aperto" msgstr[1] "%i elementi aperti" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Tutte le attività" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Nessuna etichetta" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Attività" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Data" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Icona nell'area di notifica" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge un'icona all'area di notifica per un accesso " "rapido.\n" "\n" "Questa estensione necessita di Gtk+, versione 2.10 o più recente.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Stile classico per l'icona nell'area di notifica;\n" "non utilizzare il nuovo stile per lo stato dell'icona in Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Mostra un'icona separata per ciascun blocco note" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "Annotazione _veloce..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Altro..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Blocchi note" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Controllo versione" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Questa estensione aggiunge il controllo versione ai blocchi note.\n" "\n" "\n" "L'estensione supporta i sistemi di controllo versione Bazaar, Git e " "Mercurial.\n" "\n" "È un'estensione di base distribuita insieme a Zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Salva automaticamente ad intervalli regolari" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Versione salvata in automatico da Zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "S_alva versione..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versioni..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Non sono state apportate modifiche a questo blocco note rispetto all'ultima " "versione salvata." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Nessuna modifica dall'ultima versione" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Abilitare il controllo versione?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Al momento il controllo versione non è abilitato per questo blocco note.\n" "Abilitarlo?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Backend" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Salva versione" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Inserire un commento per questa versione" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versione salvata da Zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versioni" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Pagina" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Visualizza _annotazioni" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Seleziona una versione per visualizzare i cambiamenti tra la versione scelta " "e quella\n" "corrente. Oppure seleziona versioni multiple per visualizzare i cambiamenti " "tra di esse.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Commento" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Ripristina versione" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Mostra _modifiche" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Affiancate" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Sorgente pagina annotato" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Ripristinare la pagina alla versione salvata?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Ripristinare la pagina: %(page)s\n" "alla versione salvata: %(version)s ?\n" "\n" "Verranno perse tutte le modifiche effettuate dall'ultima versione salvata." #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Modifiche" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Registra eventi con Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Invia eventi al demone di Zeitgeist" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Pagina wiki: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Impossibile trovare il modello \"%s\"" #~ msgid "Web browser" #~ msgstr "Browser Web" #~ msgid "Pages" #~ msgstr "Pagine" #~ msgid "Output" #~ msgstr "Risultato" #~ msgid "Match c_ase" #~ msgstr "M_aiuscole" #~ msgid "Prio" #~ msgstr "Priorità" #~ msgid "_Filter" #~ msgstr "_Filtro" #~ msgid "Text Editor" #~ msgstr "Editor di testi" #~ msgid "Slow file system" #~ msgstr "File system remoto" #~ msgid "File browser" #~ msgstr "File manager" #~ msgid "Email client" #~ msgstr "Client di posta elettronica" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/da.po�������������������������������������������������������������������������0000664�0001750�0001750�00000262671�12613750113�015577� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# English (United Kingdom) translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # Morten Juhl-Johansen Zölde-Fejér <mjjzf@syntaktisk.dk>, 2010. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: Morten Juhl-Johansen Zölde-Fejér " "<mjjzf@syntaktisk.dk>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-07-30 23:43+0000\n" "Last-Translator: Jhertel <jhertel@gmail.com>\n" "Language-Team: Danish <mjjzf@syntaktisk.dk>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Kunne ikke køre programmet %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "returnerede en exit-status, der ikke var nul %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Kunne ikke køre: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Standard" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Det ser ud som en fejl i zim!" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Ingen fil med navnet %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Kunne ikke indlæse %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Dette betyder almindeligvis, at filen indeholder ugyldige tegn" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detaljer" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Kunne ikke skrive til fil: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Fil ændret på disk: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Tilpas..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Ingen programmer til rådighed" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Åbn med \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Opsæt et priogram til at åbne \"%s\"-links" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Opsæt et program til at åbne filer\n" "af typen \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Opsæt programmer" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Tilføj program" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Systemstandard" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Navn" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Kommando" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Sæt som standardprogram" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Egne værktøjer" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Du kan definere egne værktjer, som vil vises\n" "i Værktøjer-menuen og værktøjslinien eller kontekstmenuer." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Rediger egne værktøjer" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Beskrivelse" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikon" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Kommando modificerer ikke data" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Vis på værktøjslinie" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "De følgende parametre vil blive erstattet\n" "i kommandoen, når den udføres:\n" "<tt>\n" "<b>%f</b> sidens kilde som midlertidig fil\n" "<b>%d</b> vedhæftningsmappen for aktuelle side\n" "<b>%s</b> den virkelige kildefil til siden (hvis der er en)\n" "<b>%n</b> notesbogens placering (fil eller mappe)\n" "<b>%D</b> dokumentets rod (hvis der er en)\n" "<b>%t</b> markeret tekst eller ord under cursor\n" "<b>%T</b> markeret tekst inklusiv wiki-formattering\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Eksport" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Opdaterer indeks" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Eksporterer notesbog" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Mappen findes: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Mappen findes allerede og er ikke tom; eksporteres der til denne mappe, kan " "det overskrive eksisterende filer. Ønsker du at fortsætte?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Filen findes allerede" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Denne fil filndes allerede.\n" "Ønsker du at overskrive den?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Vælg sider, der skal eksporteres" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Hele _notesbogen" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Enkelt _side" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Side" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Vælg format til eksport" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Andet..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Format" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Skabelon" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Link filer under dokumentets rod med fuld filsti" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Sæt dokumentrod til URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Vælg outputfil eller -mappe" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Mappe til output" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Indeksside" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Outputfil" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Vis _Log" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Fil" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Rediger" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Vis" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Indsæt" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Søg" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mat" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Værktøjer" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Go" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Hjælp" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "S_tilinie" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Værktøjslinie" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Ny side..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Ny _underside..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Åbn anden notesbog..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Åbn i nyt vindue" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importer side..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Gem" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Gem _kopi..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "Eksport..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Send til..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "F_lyt side..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Omdøb side..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Slet side" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Egenskaber" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Luk" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Afslut" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Søg..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Søg til_bagevisende links..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Nylige ændringer..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Kopier _placering" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "S_kabeloner" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Indstillinger" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Genindlæs" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Åbn mappe med vedhæftede _filer" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Åbn mappe med notesbøger" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Åbn dokumentets rod" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Åbn dokumentmappe" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Vedhæft _Fil" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Vedhæft ekstern fil" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Rediger _kildetekst" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Start _webserver" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Opdater indeks" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Egne _værktøjer" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Tilbage" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Gå en side tilbage" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Frem" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Gå en side frem" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Overordnet" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Gå til overordnet side" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Underordnet" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Gå til underordnet side" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Foregående i indeks" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Gå til foregående" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Næste i indeks" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Gå til næste side" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Forside" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Gå til forside" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Spring til..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Indhold" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Tastaturbindinger" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Bugs" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Om" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_All Paneler" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Vis alle paneler" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Statuslinie" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Sidepaneler" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Vis sidepanelder" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Fuld skærm" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Notesbog _redigerbar" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Notesbog redigerbar/ikke-redigerbar" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Ingen" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Seneste sider" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historik" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikoner _og tekst" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Kun _ikoner" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Kun _tekst" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "St_ore ikoner" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "S_må ikoner" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Helt små ikoner" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Tilføj håndtag til at frigøre menuer" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Anvend <Ctrl><Mellemrum> for at skifte til sidepanelet" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Fjern links, når sider slettes" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Brug altid seneste markørplacering ved åbning af side" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Den angivne fil eller mappe eksisterer ikke.\n" "Efterse, at stien er opgivet korrekt." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Filen eller mappen %s findes ikke" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Opgrader notesbog?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Denne notesbog er oprettet med en ældre version af zim.\n" "Ønsker du at opgradere den til nyeste version nu?\n" "\n" "Opgradering vil tage noget tid og kan foretage visse ændringer\n" "i notesbogen. Det er generelt en god ide at lave en backup forinden.\n" "\n" "Hvis du ønsker at opgradere nu, vil nogle funktioner muligvis ikke\n" "fungere som man kunne forvente" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Opgraderer notesbog" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Indekset er i gang med at opdatere. Indtil dette er fuldført, kan links ikke " "opdateres korrekt. At udføre denne funktion nu kunne knække nogle links - " "ønsker du at fortsætte alligevel?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Opdaterer links" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Fjerner links" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Opret mappe?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Mappen \"%s\" eksisterer ikke endnu.\n" "Ønsker du at oprette den nu?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Kunne ikke åbne %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Denne side har ikke en mappe med vedhæftninger" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Redigerer filen %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Du er i gang med at redigere en fil i et eksternt program. Du kan lukke " "denne dialog, når du er færdig" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "En desktop-wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Frederik 'Freso' S. Olesen https://launchpad.net/~freso\n" " Jeppe Toustrup https://launchpad.net/~tenzer\n" " Jhertel https://launchpad.net/~jhertel\n" " fsando https://launchpad.net/~fsando\n" " mjjzf https://launchpad.net/~mjjzf\n" " nanker https://launchpad.net/~nanker" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Indeks" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Skrivebeskyttet" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Søg" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Søg i sider..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Henvisning hertil..." msgstr[1] "%i _Henvisninger hertil..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Kunne ikke gemme siden %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "For at fortsætte kan du gemme en kopi af denne side eller forkaste\n" "ændringer. Gemmer du en kopi vil ændringerne også bortfalde, men\n" "kopien vil kunne genindlæses senere." # Upræcist #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Forkast ændringer" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Gem kopi" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Sping til" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Spring til side" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Ny underside" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Ny side" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Bemærk, at at link til en ikke-eksisterende side\n" "opretter en ny side automatisk." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Navn på side" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Sideskabelon" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Siden findes allerede" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Gem kopi" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importer side" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Tekstfiler" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Flyt side" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Flyt siden \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Opdatér %i side, der henviser til denne side" msgstr[1] "Opdatér %i sider, der henviser til denne side" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Omdøb side" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Omdøb siden \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Opdater sidens overskrift" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Slet side" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Slet siden \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Siden \"%s\" og alle dens\n" "undersider og vedhæftede filer vil blive slettet" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Fjern links fra %i side, der henviser til denne side" msgstr[1] "Fjern links fra %i sider, der henviser til denne side" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i fil vil blive slettet" msgstr[1] "%i filer vil blive slettet" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Vedhæft fil" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Siden \"%s\" har ingen mappe til vedhæftede filer" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Indsæt billeder som link" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Notesbog" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Åbn notesbog" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Standardnotesbog" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Tilføj notesbog" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Vælg navn og mappe til notesbog." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Mappe" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Opdaterer indeks..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Fortryd" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Gendan" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Kl_ip" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "K_opier" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Indsæt" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Slet" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Skift afkrydsning 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Skift afkrydsning 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Rediger link eller objekt..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Slet link" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Dato og tid..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Billede..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "_Punktliste" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Nummereret liste" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Liste med _afkrydsningsbokse" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Tekst fra _fil..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Link..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Indsæt link" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Ryd formattering" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Find..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Find _næste" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Find _foregående" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Erstat..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Ordtælling..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Zoom ind" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Zoom _ud" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normal størrelse" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Ny _vedhæftning" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "_Skabeloner..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Overskrift _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Overskrift 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Overskrift _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Overskrift 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Overskrift _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Overskrift 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Overskrift _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Overskrift 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Overskrift _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Overskrift 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Fed" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Fed" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Kursiv" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Kursiv" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Marker" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Marker" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Overstreg" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Overstreg" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Lav skrift" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Høj skrift" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Maskinskrift" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Maskinskrift" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Brug <enter> til at følge links\n" "(Hvis deaktiveret kan man stadig bruge <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Vis cursoren - også i sider, der ikke kan redigeres" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Konverter automatisk ord med \"CamelCase\" til links" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Konverter automatisk filstier til links" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Vælg automatisk det aktuelle ord, når formattering påføres" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Slet indrykning med <BackSpace>\n" "(Hvis deaktiveret kan <Shift><Tab> fortsat anvendes)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Trykkes der igen på en afkrydsningsboks, vil man gennemgå de forskellige " "markeringstyper for denne." #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Ændring af indrykning på en liste vil også påvirke underliggende punkter" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Kryds i afkrydsningsboks vil også ændre underpunkter" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Konverter wiki-opmærkningm mens der skrives" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Standardformat for kopiering af tekst til udklipsholder" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Mappe med skabeloner til vedhæftede filer" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Der er ikke defineret en sådan wiki: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopier _Som..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Flyt valgt tekst..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Rediger indstillinger" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Rediger link" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Kopier _link" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopier emailadresse" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Åbn mappe" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Åbn med..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Åbn" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Ingen skabeloner installeret" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Mappen\n" "%s\n" "findes ikke.\n" "Ønsker du at oprette den nu?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Indsæt dato og tidspunkt" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalender" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Link til dato" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Indsæt billede" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Vedhæft billede først" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Filtype ikke understøttet: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Rediger billede" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Placering" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Link til" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Bredde" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Højde" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Nulstil størrelse" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Indsæt tekst fra fil" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Rediger link" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Link" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Tekst" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Næste" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Foregående" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Samme _store/små bogstaver" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Helt _ord" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Regulære udtryk" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Fremhæv" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Find" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Valgmuligheder" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Find og erstat" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Søg efter" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Erstat med" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Erstat" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Erstat _alle" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Ordtælling" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Afsnit" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Markering" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Ord" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Linier" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Tegn" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Flyt tekst til anden side" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Flyt" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Flyt tekst til" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Efterlad link til ny side" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Åbn ny side" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Ny fil" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Grænseflade" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Redigering" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Indstillinger" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Plugins" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Anvend egen font" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Mere" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "Konfiguration" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Afhængigheder" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Ingen afhængigheder" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Fejlet" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Valgfri" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Forfatter" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Aktiveret" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Plugin" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Konfigurer plugin" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Valgmuligheder for plugin'et %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Egenskaber" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Egenskaber for notesbog" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Nylige ændringer" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "I dag" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "I går" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Sidst ændret" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "For avanceret søgning kan man bruge operatorer som\n" "AND, OR og NOT. Se hjælpesiden for yderligere detaljer." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Score" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Webserver" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server ikke startet" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Tillad offentlig adgang" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server startet" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server stoppet" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Skabeloner" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Gennemse" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopier skabelon" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Vælg fil" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Udfold _alle" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Sammenfold alle" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Ryd" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Vælg mappe" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Vælg billede" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Venstre sidepanel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Højre sidepanel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Panel i bunden" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Panel i toppen" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Øverst til venstre" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Nederst til venstre" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Øverst til højre" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Nederst til højre" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Ved fejlrapportering bedes\n" "nedenstående oplysninger inkluderet" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Alle filer" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Billeder" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Logfil" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Filen eksisterer" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "En fil med navnet <b>\"%s\"</b> findes allerede." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Filnavn" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Gennemse" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Overskriv" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Kunne ikke finde fil eller mappe for denne notesbog" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Kunne ikke finde notesbogen %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Det opgivne navn er ikke et gyldigt sidenavn.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Ugyldigt sidenavn - \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Indeks er fortsat i gang med en opdatering, mens der\n" "foretages en operation, der kræver indekset.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Kan ikke ændre i siden %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Adgangskode til Interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Forside" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Dokumentets rod" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetik" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Denne plugin tillader dig at inkludere aritmetiske beregninger i zim.\n" "Den er baseret på det aritmetiske modul fra\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmetik" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Ukendt" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Type" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Størrelse" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Ændret" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Flyt hertil" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Kopiér hertil" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Annullér" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Browser til vedhæftede filer" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Placering i vinduet" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Vedhæftede filer" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _vedhæftning" msgstr[1] "%i _vedhæftninger" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Forhåndsvisning" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Der opstod en fejl under billedgenereringen.\n" "Ønsker du at gemme kildeteksten alligevel?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Dag" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Uge" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Måned" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "År" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Vis kalender i sidebjælken istedet for som dialog" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Brug en side til hver" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "I_dag" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Kalender" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d. %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalender" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Idag" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Indsæt diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin tilføjer en GeaphViz-baseret diagram-editor til zim.\n" "\n" "Dette er et core-plugin, der leveres med zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Indsæt diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Skjul menulinje i fuldskærmsvisning" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Skjul værktøjslinje i fuldskærmsvisning" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Skjul stilinje i fuldskærmstilstand" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Skjul statuslinje i fuldskærmstilstand" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Maksimal sidebredde" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Lodret margen" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Baggrundsfarve for tekst" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Forgrundsfarve for tekst" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Baggrundsfarve for skærm" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Indsæt formel" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin indsætter en LaTeX-baseret formeleditor i zim.\n" "\n" "Dette er et core-plugin, der udgives sammen med zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr ":_Rediger formel" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Indsæt Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Dette plugin giver adgang til redigering af plots via Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Rediger Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Indsæt GNU R-plot" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Dette plugin tilføjer en plot-editor baseret på GNU R i zim\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Rediger GNU R-Plot" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Matematik-plugin'et kunne ikke evaluere\n" "udtrykket ved markøren." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "In-line regnemaskine" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin giver mulighed for hurtigt at vurdere simple\n" "matematiske udtryk i zim.\n" "\n" "Dette er et core-plugin, der udgives med zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Kunne ikke fortolke udtrykket" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Evaluer _matematik" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Indsæt symbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin tilføjer \"Indsæt symbol\"-dialogen, som \n" "tilføjer automatisk formattering af typografiske tegn.\n" "\n" "Dette er et core-plugin, der udgives sammen med zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbol..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Liniesortering" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Dette plugin sorterer markerede linier i alfabetisk rækkefølge.\n" "Såfremt listen allerede er sorteret sådan, vil rækkefølgen blive omvendt\n" "(A-Å bliver til Å-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Sorter linier" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Start med at vælge mere end 1 tekstlinie." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Link-kort" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin giver en dialog med en grafisk visning\n" "af notesbogens struktur. Den kan bruges som en slags\n" "\"mind map\", der viser, hvordan siderne relaterer til hinanden.\n" "\n" "Dette er et core-plugin, der leveres med zin.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Vis kort over links" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Udskriv til browser" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin fungerer som en måde at komme udenom\n" "manglende printerunderstøttelse i zim. Det eksporterer den\n" "nuværende side til HTML of åbner den i en browser. Såfremt\n" "browseren er sat op til udskrift, får man sine data til printeren i to " "skridt.\n" "\n" "Dette er et core-plugin, der udgives sammen med zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Udskriv til browser" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Kviknote" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin tilføjer en dialog til hurtigt at indsætte noget tekst eller " "udklipsholderens\n" "Indhold i en zim-side.\n" "\n" "Dette er et core-plugin, der udgives sammen med zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Kviknote..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Opret ny side for hver note" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Titel" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Åbn _Side" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Slet note?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Indsæt skærmbillede" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin lader brugeren tage et skærmbillede og indsætte det direkte\n" "i en zim-side.\n" "\n" "Dette er et core-plugin, der udgives sammen med zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Skærmbillede..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Tag billede af fuld skærm" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Vælg vindue eller område" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Forsinkelse" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekunder" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Der opstod en fejl under kørsel af \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Stavekontrol" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tilføjer stavekontrol med gtkspell.\n" "\n" "Dette er et core-plugin, der udgives med zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Check _stavning" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Dette kan betyder, at du ikke har de rette\n" "ordbøger installeret" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Indholdsfortegnelse" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" "Vis indholdsfortegnelse som en flydende widget i stedet for i sidepanelet" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Indholdsfortegnelse" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Nedryk" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Fremryk" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Tags" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Dette plugin giver et sideindeks filtreret efter tags, der er valgt fra en " "tag-sky.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sort sider efter tags" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "utagget" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Sorter alfabetisk" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Opgaveliste" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin tilføjer en dialog, der viser alle igangværende opgaver fra\n" "denne notesbog. Aktive opgaver kan være åbne afkrydsningsbokse\n" "eller punkter markeret med \"TODO\" eller \"FIXME\".\n" "\n" "Dette er et core-plugin, der leveres med zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Tolk alle afkrydsningsbokse som opgaver" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Gør sidens navn til tag for opgaveliste" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Labels, der angiver opgaver" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Mærkat for næste opgave" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Indeksering af notesbogen er påkrævet" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Dette er den første gang opgavelisten er blevet åbnet.\n" "Derfor skal indekset opbygges.\n" "Afhængigt af notesbogens størrelse kan dette\n" "tage op til flere minutter. Næste gang du bruger\n" "listen vil det ikke være nødvendigt at gentage det." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Vis kun aktive opgaver" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i åben komponent" msgstr[1] "%i åbne komponenter" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Alle opgaver" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Uden mærker" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Opgave" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Dato" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ikon" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette plugin tilføjer et tray icon, så man hurtigt kan komme til zim.\n" "\n" "Dette plugin kræver Gtk+ version 2.10 eller nyere,\n" "\n" "Dette er et core-plugin, der udgives med zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klassisk tray icon,\n" "bruger ikke det nye statusikon i Ubuntu." #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Vis særskilt ikon for hver notesbog" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Kviknote..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Andet..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Notesbøger" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Versionskontrol" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Gem en version automatisk med faste mellemrum" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automatisk gemt version fra zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "_Gem version..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versioner..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Der er ingen ændringer i denne notesbog, siden sidste version blev gemt." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Ingen ændringer siden sidste version" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Aktiver versionskontrol?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Versionkontrol er ikke aktiveret for denne notesbog.\n" "Ønsker du at slå det til?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Gem version" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Indtast en kommentar til denne version" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Gemt version fra zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versioner" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Side" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Vis _annoteret" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Vælg en version for at se ændringerne imellem den version og den nuværende,\n" "eller vælg flere versioner for at se ændringerne imellem de versioner.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Kommentar" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Gendan version" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "_Vis ændringer" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Ved siden af hinanden" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Annoteret kilde for siden" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Gendan side til gemt version?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Ønsker du at etablere siden: %(page)s\n" "til den gemte version version: %(version)s ?\n" "\n" "Alle ændringer siden sidst gemte version vil gå tabt!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Ændringer" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Web browser" #~ msgstr "Webbrowser" #~ msgid "Match c_ase" #~ msgstr "_Versalfølsom" #~ msgid "File browser" #~ msgstr "Filbrowser" #~ msgid "Email client" #~ msgstr "Emailklient" #~ msgid "Text Editor" #~ msgstr "Teksteditor" #~ msgid "_Filter" #~ msgstr "_Filter" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "Pages" #~ msgstr "Pages" #~ msgid "Output" #~ msgstr "Output" #~ msgid "Slow file system" #~ msgstr "Slow file system" �����������������������������������������������������������������������zim-0.65/translations/tr.po�������������������������������������������������������������������������0000664�0001750�0001750�00000266052�12613750113�015635� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Turkish translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-07-30 22:24+0000\n" "Last-Translator: Emre Cıklatekerlio <emrecikla@gmail.com>\n" "Language-Team: Turkish <tr@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Uygulama çalıştırırken hata: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "sıfır-olmayan %(code)i çıkış durumunu döndürdü" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Çalıştırma başarısız oldu: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Varsayılan" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "takvim:hafta_basi:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Öyle görünüyor ki bir hata buldunuz" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Böyle bir dosya yok: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Okunamadı: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Bu genellikle dosyanın geçersiz karakterler içerdiği manasına gelir." #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Ayrıntılar" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Dosya yazdırılabilir değil: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Kayıtlı dosya değiştirildir: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Özelleştir..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Uygulama bulunamadi" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "\"%s\" ile aç" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "%s bağlatılarını açmak için bir uygulama ayarla" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "%s türü dosyaları açmak için bir uygulama ayarla" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Uygulama yapilandir" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Uygulama Ekle" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Sistem Varsayılanı" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Ad" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Komut" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Varsayılan uyhulama yap" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Özel araçlar" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Araç menüsünde ve araç çubuğunda veya içerik \n" "menüsünde gözükecek özel araçları yapılandırabilirsiniz." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Özel Aracı Düzenle" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Açıklama" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Simge" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Komut veriyi değiştirmiyor" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Araç çubuğunda göster" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Şu parametreler, çalıştırıldığı sırada\n" "komutun içinde yerine konacak:\n" "<tt>\n" "<b>%f</b> sayfa kaynağı geçici bir dosya\n" "<b>%d</b> geçerli sayfanın ek (ilişim) dizini\n" "<b>%s</b> gerçek sayfanın kaynak dosyası (varsa)\n" "<b>%n</b> not defterinin yeri (dosya veya dizin)\n" "<b>%D</b> belge kökü (varsa)\n" "<b>%t</b> seçili metin veya imlecin altındaki sözcük\n" "<b>%T</b> viki biçimindeki, dahil edilecek seçili metin\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Dışa Aktar" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "İndeks güncelleniyor" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Defter dışa aktarılıyor" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "%s klasörü mevcut" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Klasör zaten mevcut ve içi boş değil; bu klasöre aktarmak var olan " "dosyaların üzerine yazabilir. Devam etmek ister misiniz?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Dosya mevcut" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Bu dosya zaten var.\n" "Üzerine yazmak istiyor musunuz?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Dışarı aktarılacak sayfaları seçiniz" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Tüm _defter" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Tekil _sayfa" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Sayfa" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Aktarım biçimini seçiniz" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Diğer..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Biçim" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Şablon" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" "Belge kökü altındaki dosyaların bağlantılarında tam dosya yolunu göster" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Belge kökünü şu URL'de haritalandır" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Çıktı dosyasını veya dizinini seçiniz" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Çıktı klasörü" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Index sayfası" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Çıktı dosyası" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "_Kayıtları Göster" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Dosya" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Düzenle" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Görünüm" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Ekle" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Arama" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "Biçi_m" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Araçlar" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Git" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Yardım" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Yol _Çubuğu" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Araç Çubuğu" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Yeni Sayfa" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Yeni A_lt Sayfa" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "Başka bir Defter _Aç" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Yeni _Pencerede Aç" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "Sayfa _İçe Aktar" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Kaydet" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Bir _Kopyasını Kaydet..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Dışa Aktar" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Gönder..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "Sayfayı _Taşı..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Sayfayı _Yeniden Adlandır..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "Sayfayı _Sil" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Özellikler" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Kapat" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Çıkış" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Ara..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "_Geri Bağlantıları Ara..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Son değişiklikler..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Kopyalama _Konumu" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Şablonlar" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Te_rcihler" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Yenile" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Eklentiler _Klasörünü Aç" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "_Defter Klasörünü Aç" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "_Belge Kökünü Aç" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "_Belge Klasörünü Aç" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "_Dosya Ekle" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Dışarıdan dosya ekle" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "_Kaynağı Düzenle" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "_Web Sunucusunu Başlat" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "İndeksi Güncelle" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Özel _Araçlar" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Geri" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Gerideki sayfaya git" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_İleri" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "İlerideki sayfaya git" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Ebeveyn" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Ebeveyn sayfaya git" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Çocuk" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Çocuk sayfaya git" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "İndekste _önceki" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Önceki sayfaya git" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "İndexte _sonraki" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Sonraki sayfaya git" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Anasayfa" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Anasayfaya git" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Atla..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_İçerik" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_SSS" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Tuş kısayolları" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Hatalar" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Hakkında" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Tüm Paneller" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Tüm Panelleri Göster" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Durum Çubuğu" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Yan Panel" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Tüm Panelleri Göster" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Tam Ekran" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "_Düzenlenebilir Defter" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Defteri düzenlemeye açın" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Hiçbiri" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Son kullanılan sayfalar" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Son _Değiştirilen sayfalar" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Geçmiş" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Simgeler _Ve Metin" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Yalnızca _Simgeler" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Yalnızca _Metin" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Büyük Simgeler" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Küçük Simgeler" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Minik Simgeler" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Menülere koparma öğesi ekler" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Yan panele geçmek için <Ctrl><Space> kullan" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Sayfaları silerken bağlantıları da kaldır" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Sayfa açılışında her zaman imlecin son pozisyonunu kullan." #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Belirttiğiniz gibi bir dosya veya klasör mevcut değil.\n" "Lütfen girdiğiniz adresin doğru olup olmadığını kontrol edin." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Böyle bir dosya veya klasör mevcut değil: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Defteri güncellemek ister misiniz?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Bu defter daha eski bir Zim sürümü ile oluşturulmuş.\n" "Son sürüme güncellemek ister misiniz?\n" "\n" "Güncelleme biraz zaman alacaktır ve defterde bazı değişikliklere\n" "sebep olabilir. Genel kural olarak, böyle bir işlemi gerçekleştirmeden\n" "önce yedekleme yapmak iyi olur.\n" "\n" "Eğer şimdi güncellemeyi seçmezseniz, bazı özellikler beklendiği\n" "şekilde çalışmayabilir." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Defter güncelleniyor" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "İndeks hâlâ güncelleniyor. Bağlar bitirilinceye kadar doğru bir güncelleme " "olamaz. İcra ettiğiniz bu eylem, bağları kırabilir; yine de devam etmek " "istiyor musunuz?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Bağlar Güncelleniyor" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Bağlar kaldırılıyor" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Klasör oluşturmak ister misiniz?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "%s isimli klasör şu an yok.\n" "Oluşturmak ister misiniz?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Açılamadı: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Bu sayfanın eklentiler klasörü yok" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Düzenlenen dosya: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Dosyayı harici bir uygulama ile düzenliyorsunuz. Tamamladığınızda bu " "iletişim kutusunu kapatabilirsiniz." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Masaüstü Wikisi" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Bekir DURAK https://launchpad.net/~bekir-durak\n" " Caner GÜRAL https://launchpad.net/~canergural\n" " Emre Ayca https://launchpad.net/~anatolica\n" " Emre Cıklatekerlio https://launchpad.net/~emrecikla\n" " Engin BAHADIR https://launchpad.net/~enginbah\n" " Gökdeniz Karadağ https://launchpad.net/~gokdeniz\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " M. Emin Akşehirli https://launchpad.net/~memedemin\n" " ytasan https://launchpad.net/~yasintasan" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Dizin" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "saltokunur" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Ara" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Arama Sayfaları..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i_Geri bağlantı..." msgstr[1] "%i_Geri bağlantı..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Sayfa kaydedilemedi: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Devam etmek için bu sayfanın bir kopyasını kaydedebilir ya da\n" "değişiklikleri yoksayabilirsiniz. Eğer bir kopya kaydederseniz, " "değişiklikler\n" "yine yoksayılacaktır, ancak daha sonra kopyaya geri döndürebilirsiniz." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Değişikliklerden Vazgeç" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Kopyayı Kaydet" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Sayfaya git" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Sayfaya Git" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Yeni Alt Sayfa" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Yeni Sayfa" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Henüz var olmayan bir sayfaya bağlantı yapmanın\n" "otomatik olarak bu sayfayı oluşturacağını unutmayın." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Sayfa Adı" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Sayfa Şablonu" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Sayfa mevcut" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Kopyayı Kaydet" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Sayfa İçe Aktar" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Metin Dosyaları" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Sayfayı Taşı" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "\"%s\" sayfasını taşı" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Bu saykaya bağlantısı olan %i sayfayı da güncelle" msgstr[1] "Bu saykaya bağlantısı olan %i sayfayı da güncelle" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Sayfayı Yeniden Adlandır" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "\"%s\" sayfasını yeniden adlandır" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Bu sayfanın başlığını güncelle" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Sayfayı Sil" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "\"%s\" sayfası silinsin mi?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "\"%s\" sayfası, onun tüm\n" "alt sayfaları ve ekleri silinecek" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Bu sayfaya yapılan bağlar, %i sayfadan çıkarılsın" msgstr[1] "Bu sayfaya yapılan bağlar, %i sayfadan çıkarılsın" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i dosyası silinecek" msgstr[1] "%i dosyası silinecek" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Dosya Ekle" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "\"%s\" sayfasının ekler için bir klasörü yok" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Resimleri bağlantı olarak ekle" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Not defteri" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Defter Aç" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Öntanımlı not defteri" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Defter Ekle" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Lütfen defter için bir ad ve klasör seçin" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Klasör" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "İndeks güncelleniyor..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Geri Al" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Tekrar Yap" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "K_es" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopyala" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Yapıştır" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Sil" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "'V' İşaret Kutusunu aç/kapa" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "'X' İşaret Kutusunu aç/kapa" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "Bağlantı veya Nesneyi _Düzenle..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Bağlantıyı _Kaldır" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Tarih ve Zaman..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Resim..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Bulle_t Listesi" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Numaralanmış Liste" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "O_nay Kutusu Listesi" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "_Dosyadan Metin Aktar..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Bağlantı..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Bağlantı Ekle" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "Biçimlendirmeyi _Temizle" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Bul..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "So_nrakini Bul" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Önc_ekini Bul" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Değiştir..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Sözcük Sayımı..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Yakınlaştır" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "_Uzaklaştır" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normal Boyut" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Dosya _Şablon..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Başlık _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Başlık 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Başlık _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Başlık 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Başlık _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Başlık 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Başlık _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Başlık 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Başlık _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Başlık 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Kalın" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Kalın" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Eğik" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Eğik" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_İşaret" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "İşaret" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Üstü çizili" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Üstü çizili" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Alt simge" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Üst simge" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Aynen" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Sabit" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Bağlantıları takip etmek için <Enter> tuşunu kullanın.\n" "(Eğer devre dışı ise <Alt><Enter> da kullanabilirsiniz)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "İmleci düzenlemeye kapalı sayfalarda da göster" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "" "\"DeveHörgücü\" (CamelCase) sözcükleri otomatik olarak bağlantıya çevir" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Dosya yollarını otomatik olarak bağlantıya çevir" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" "Biçimlendirme uygularken halihazırdaki sözcüğü de otomatik olarak seç" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "<BackSpace> ile girintiyi kaldır\n" "(Eğer devredışı ise, <Shift><Tab> aynı işi görür)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Bir liste maddesinde girinti eklemek/kaldırmak alt maddeleri de aynen " "değiştirir" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Bir işaret kutusunu işaretlemek alt maddeleri de aynen değiştirir" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Eş zamanlı viki işaretleme (markup) biçimlendirmesi" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Panoya kopyalanan metin için öntanımlı biçim" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Böyle bir wiki bulunamadı: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Farklı_Kopyala..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Seçili Metni Taşı" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "Özellikleri _Düzenle" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "Bağlantıyı _Düzenle" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Bağlantıyı _Kopyala" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "E-posta Adresini Kopyala" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Klasör Aç" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Birlikte Aç..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Aç" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Kurulu şablon yok" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Klasör\n" "%s\n" "Henüz oluşturulmamış.\n" "Şimdi oluşturmak ister misiniz?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Tarih ve Zaman Ekle" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Takvim" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "Tari_he bağla" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Görsel Ekle" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Önce resim ekle" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Dosya türü desteklenmiyor: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Görsel Düzenle" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Konum" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Bağlantı oluştur" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Genişlik" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Yükseklik" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "Boyutu Sıfırla" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Dosyadan Metin Aktar" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Bağlantı Düzenle" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Bağlantı" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Görünecek Metin" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "So_nraki" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Önceki" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Büyük/küçük _harf uyumlu" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Kelimenin _tamamı" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Kurallı ifade" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Vurgula" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Bul" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Tercihler" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Bul ve Değiştir" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Bul..." #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Yerine bunu koy:" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Değiştir" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "_Tümünü Değiştir" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Sözcük Sayımı" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Paragraf" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Seçim" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Sözcük" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Satır" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Karakterler" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Metni diğer sayfaya taşı" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Taşı" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Metni taşı" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Yeni sayfa için bağlantı oluştur" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Yeni sayfa aç" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Yeni Dosya" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Arayüz" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Düzenleme" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Yeğlenenler" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Eklentiler" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Özel font kullan" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Daha Fazla" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "Ya_pılandır" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Bağımlılıklar" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Bağımlılık yok" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Tamam" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Başarısız" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "İsteğe bağlı" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Yazar" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Etkin" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Eklenti" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Eklentiyi Yapılandır" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "%s eklentisi için Seçenekler" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Özellikler" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Defter Özellikleri" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Son Değişiklikler" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Bugün" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Dün" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Son değişiklikler" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "İleri seviye aramalar için AND, OR ve NOT işleçlerini\n" "kullanabilirsiniz. Ayrıntılar için yardım sayfasına bakınız." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Sayı" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Web Sunucusu" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Sunucu başlatılmadı" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Genel ulaşıma izin ver" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Sunucu başlatıldı" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Sunucu durduruldu" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Şablonlar" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Gözat" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopya Şablon" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Dosya Seç" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Hepsini_Genişlet" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "Tümünü _Daralt" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Temizle" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Dizini Seç" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Görüntü Seç" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<En Üst>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Sol Yan Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Sağ Yan Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Alt Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Üst Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Sol Üst" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Sol Alt" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Sağ üst" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Sağ Alt" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Bu hatayı bildirirken lütfen aşağıdaki metin\n" "kutusunda verilen bilgiyi de ekleyin." #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Tüm Dosyalar" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Resimler" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Kayıt dosyası" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Dosya zaten var" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "<b>\"%s\"</b> adında bir dosya zaten mevcut.\n" "Başka bir isim kullanabilir veya mevcut dosyanın üzerine yazabilirsiniz." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Dosya adı" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Gözat" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Üzerine yaz" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Bu defter için klasör veya dosya bulunamadı" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Defter bulunamadı: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Sayfaya verilen isim geçerli değil\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Geçersiz sayfa adı \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Dizine ihtiyacımız olan bir işlem yapmak isterken\n" "dizin hala güncellemekle meşgul.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Sayfa değiştirilemiyor: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Wiki Kaynak Bağlantısı Anahtar Kelimesi" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Başlangıç Sayfası" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Belge Kök Dizini" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetik" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Bu eklenti zim içine aritmetik hesaplamala ekler.\n" "Aşağıdaki aritmetik modeli taban almıştır\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmetik" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Bilinmeyen" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Tür" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Boyut" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Değiştirildi" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Buraya Taşı" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Buraya Kopyala" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "İptal" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Eklenti Tarayıcısı" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Penceredeki pozisyon" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Ekler" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "Ö_nizleme" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Resim oluşturulurken bir hata meydana geldi.\n" "Kaynak metnini yine de kaydetmek ister misiniz?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Günlük" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Gün" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Hafta" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Ay" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Yıl" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Takvimi ileti kutusu yerine yan panelde göster" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Her biri için bir sayfa kullan" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Bu_gün" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Tak_vim" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Takvim" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Bugün" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Diyagram Ekle" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti, GrapViz'li Zim için bir diyagram editörü sağlar.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Diya_gram..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Diyagram ekle" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Tam ekranda menüleri gizle" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Tam ekranda araç çubuğunu gizli" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Tam ekranda yol çubuğunu gizle" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Tam ekranda durum çubuğunu gizle" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Maksimum sayfa genişliği" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Dikey kenar aralığı" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Yazı arkaplanı rengi" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Yazı rengi" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Ekran arkaplan rengi" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Ditaa Ekle" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "Bu eklenti zim için, Ditaa tabanlı bir diagram editörü sağlar.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Ditaa Düzenle" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Denklem Ekle" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "Bu eklenti, Latex'li Zim için bir denklem editörü sağlar.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "Denklemi D_üzenle" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Gnuplot Ekle" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Bu eklenti zim için, Gnuplot tabanlı bir grafik çizim editörü sağlar.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Gnuplot Düznele" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "GNU R Plot'u Ekle" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Bu eklenti, GNU R'li Zim için bir plot editörü sağlar.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "GNU R Plot'u _Düzenle" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Satır içi hesaplayıcı eklentisi, imleç üzerindeki ifadeyi\n" "değerlendirmeye uygun değil." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Satır İçi Hesaplayıcı" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti ile zim içindeki basit matematiksel ifadelerin\n" "hızlı bir şekilde değerlendirilmesi sağlanır. \n" "Bu eklenti zim ile beraber gelen ana eklentilerdendir.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "İfade çözümlenemedi." #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Math _Hesapla" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Sembol Ekle" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti 'Sembol Ekle' diyalogunu ekler ve \n" "oto-biçimlendirilmiş karakterleri sağlar.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Se_mbol" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Satır Sıralayıcısı" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Bu eklenti ile seçili satırlar alfabetik şekilde sıralanır.\n" "Eğer liste daha önceden sıralanmış ise sıralama tersine\n" "çevrilir. (A-Z'den Z-A'ya)\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Satırlari Sırala" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Lütfen önce birden fazla metin satırı seçin." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Bağlantı Haritası" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti, not defteri bağ yapısını haritalayan bir diyalog\n" "penceresi sağlar. Sayfaların ilgisini görüntüleyen bir\n" "\"zihin haritası\" olarak kullanılabilir.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Bağlantı Haritasını Göster" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Tarayıcıya Yazdır" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti Zim'in yazdırma eksikliğine bir çözüm getirmeyi\n" "amaçlar. Kullanımdaki sayfayı html haline getirerek tarayıcıda\n" "açar. Tarayıcının yazdırma desteği olduğu varsayılırsa, bu yöntemle\n" "verilerinizi iki adımda yazıcıya gönderebilirsiniz.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "Tarayıcıya _Yazdır" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Hızlı Not..." #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti, yazıları veya pano içeriğini kolayca \n" "bir Zim sayfasına taşımayı sağlayan bir diyalog ekler.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Hızlı Not..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Her not için yeni bir sayfa oluştur" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Başlık" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Sayfa _Aç" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Not silinsin mi?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Ekran Görüntüsü Ekle" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti ile alınan ekran görüntüsü doğrudan zim sayfasına\n" "eklenebilir. \n" "Bu eklenti zim ile gelen çekirdek eklentilerdendir.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Ekran Görüntüsü..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Tüm ekranın görüntüsünü al" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Pencere veya bölge seç" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Gecikme" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "saniye" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "\"%s\" çalıştırılırken bir hata oluştu" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Yazım Denetleyici" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Gtkspell kullanan yazım denetimi desteğini ekler.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "_Yazım denetle" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Bu hata, sözlüklerinizin doğru yüklenmediği \n" "anlamına gelebilir." #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "İçerik Tablosu" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti mevcut sayfa içeriğini tablolamaya yarayan bir\n" "widget sunar. \n" "Bu eklenti zim ile gelen çekirdek eklentilerdendir.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Yançerçeve yerine, ToCas floating widget göster" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Terfi Ettir" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etiketler" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sayfaları etiketlere göre sırala" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "etiketsiz" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Alfabetik olarak sırala" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Görev Listesi" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti bu defterde buluna tüm açık görevleri gösteren bir iletişim\n" "kutusu ekler. Açık görevler işaretlenmemiş işaret kutuları ya da\n" "\"TODO\" veya \"FIX ME\" etiketleri ile işaretlenmiş maddeler olabilir.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "İşaret kutularını görevler gibi düşünün" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Sayfa ismini görev parçaları için etiketlere çevir" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Görev işaretleme etiketleri" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Yeni görev için etiket" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Alt ağaçları indekste göster" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Not defteri indeksine ihtiyaç var" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Bu, ilk kez açılan görev listesi.\n" "Bu nedenle indeks, yeniden inşa edilmeli.\n" "Bu, not defterinin boyutuna göre birkaç dakika\n" "sürebilir. Bir daha görev listesini kullandığınızda\n" "buna ihtiyaç duymayacaksınız." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Süzgeç" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i açık görev" msgstr[1] "%i açık görev" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Tüm Görevler" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Etiketlenmemiş" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Görev" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Tarih" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Sistem Çubuğu Simgesi" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti çabuk erişim için bir sistem çubuğu simgesi ekler.\n" "\n" "Bu eklenti Gtk+ 2.10 veya daha yeni sürümünü gerektirmektedir.\n" "\n" "Bu eklenti Zim ile beraber sağlanan temel bir eklentidir.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "Klasik tepsi simgesi" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Her not defteri için ayrı simge göster" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Hızlı Not..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Diğer..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Not Defterleri" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Sürüm Kontrolü" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Bu eklenti not defteri için versiyon kontrol yapar.\n" "Bu eklenti Bazaar, Gir ve Mercurial versiyon kontrol sistemleri tarafından " "desteklenmektedir.\n" "Bu zim ile gelen çekirdek bir eklentidir\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Düzenli aralıklarla otomatik olarak sürüm kaydı yap" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Zim tarafından otomatik kaydedilen sürüm" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Sürümü Kay_det..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Sürümler..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Son kaydedilen sürümünden beri bu defterde değişiklik yapılmamış" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Son sürümle aynı" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Pazar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Sürüm Kontrolü etkinleştirilsin mi?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "Bu defter için sürüm kontrolü halihazırda etkin değil." #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Arka uç" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Sürümü Kaydet" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Bu sürüm için bir açıklama girin" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Zim tarafından kaydedilen sürüm" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Sürümler" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Sayfa" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "_Açıklamalı Göster" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Bir sürüm seçerek şu andaki durum ile seçilen sürüm arasındaki farkları " "görebilirsiniz.\n" "Veya birden fazla sürüm seçerek bunlar arasındaki farkları görebilirsiniz.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Açıklama" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "Sürüme _Döndür" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "_Değişiklikleri Göster" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Yanyana" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Açıklamalı Sayfa Kaynağı" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Sayfayı kaydedilmiş sürüme döndürsün mü?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "%(page)s sayfasını kaydedilmiş sürümlerinden\n" "%(version)s sürümüne geri döndürmek ister misiniz?\n" "\n" "Son kaydedilen sürümünden itibaren yapılmış olan tüm değişiklikler " "silinecektir !" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Değişiklikler" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wiki sayfası: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "Metin Düzenleyici" #~ msgid "File browser" #~ msgstr "Dosya Tarayıcı" #~ msgid "Email client" #~ msgstr "E-posta istemcisi" #~ msgid "Web browser" #~ msgstr "Web tarayıcı" #~ msgid "Pages" #~ msgstr "Sayfalar" #~ msgid "Output" #~ msgstr "Çıktı" #~ msgid "Match c_ase" #~ msgstr "BÜYÜK/küçük harf _eşleştir" #~ msgid "Slow file system" #~ msgstr "Yavaş dosya sistemi" #~ msgid "Prio" #~ msgstr "Önc" #~ msgid "_Filter" #~ msgstr "_Süz" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/uk.po�������������������������������������������������������������������������0000664�0001750�0001750�00000274656�12613750113�015640� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Ukrainian translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # Sergiy Gavrylov <sergiovana@bigmir.net>, 2010. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-07-30 22:45+0000\n" "Last-Translator: Luxo <wmd@ukr.net>\n" "Language-Team: Ukrainian <uk@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Типовий" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Схоже, ви знайшли помилку" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Немає такого файла: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Деталі" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Відкрити за допомогою \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Назва" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Команда" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Зовнішні інструменти" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Ви можете налаштувати зовнішні інструменти показані\n" "в меню та на панелі інструментів або в контекстних меню." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Зміна зовнішнього інструмента" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Опис" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Піктограма" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Команда не змінює дані" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Показувати на панелі інструментів" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Експортувати" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Оновлення індексу" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Експорт зошита" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Тека вже існує і містить файли, експортування до цієї теки може перезаписати " "наявні файли. Ви хочете продовжити?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Файл існує" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Цей файл вже існує.\n" "Хочете перезаписати його?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Вибрати сторінки для експорту" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "_Увесь зошит" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Одна _сторінка" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Сторінка" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Вибрати формат експорту" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Інше…" #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Формат" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Шаблон" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" "Створювати посилання на файли в кореневому документі використовуючи повний " "шлях" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Перетворити шлях до кореневого документа в URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Вибрати вихідний файл або теку" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Вихідна тека" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Початкова сторінка" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Вихідний файл" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Переглянути _журнал" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Файл" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Правка" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Вигляд" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "Вст_авити" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "З_найти" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "Фор_мат" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "С_ервіс" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "Пере_йти" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Довідка" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Р_ядок адреси" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "П_анель інструментів" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Створити сторінку..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Створити _під-сторінку..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Відкрити інший зошит..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "В_ідкрити в новому вікні" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Імпортувати сторінку..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "З_берегти" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Зберегти _копію..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Експортувати..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Надіслати _до..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "Перемістити сторінк_у..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Пере_йменувати сторінку..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "В_илучити сторінку" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "В_ластивості" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Закрити" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "Ви_йти" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "З_найти..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Знайти з_воротні посилання..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Параметри" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Перезавантажити" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Відкрити теку п_рикріплень" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Відкрити теку _зошита" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Відкрити кореневий _документ" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Відкрити теку _документів" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Прикріпити _файл" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Прикріпити зовнішній файл" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Редагувати д_жерело" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Запустити _веб сервер" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Зовнішні інс_трументи" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "На_зад" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "На сторінку назад" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "В_перед" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "На сторінку вперед" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Вгору" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "На сторінку вгору" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "В_низ" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "На сторінку вниз" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "П_опередня в індексі" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "На попередню сторінку" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Нас_тупна в індексі" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "На наступну сторінку" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Головна" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "На головну" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Перейти _до..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Зміст" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_Часті питання" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Комбінації клавіш" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "П_омилки" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Про програму" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Рядок стану" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "На _весь екран" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "_Лише читання" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Увімкнути захист від редагування" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Сховати" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Недавні сторінки" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Історія" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Значки т_а текст" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Лише _значки" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Лише _текст" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Великі значки" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Маленькі значки" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Дрібні значки" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Додати смужки „відриву“ до меню" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Зазначений вами файл або тека не існують.\n" "Будь ласка, перевірте коректність шляху." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Немає такого файла або теки: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Оновити зошит?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Цей зошит створений старішою версією Zim.\n" "Хочете оновити його до останньої версії?\n" "\n" "Оновлення займе деякий час і може внести деякі зміни\n" "до записника. Рекомендуємо зробити резервну копію\n" "перед оновленням.\n" "\n" "Якщо ви зараз відмовитесь від оновлення, деякі нові\n" "функції можуть працювати не коректно." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Оновлення зошита" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Індекс все ще відновлюється. До його завершення, посилання можуть оновитись " "неправильно. Виконання цієї дії зараз, може пошкодити посилання. Хочете " "продовжити у будь-якому випадку?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Оновлення посилань" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Вилучення посилань" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Створити теку?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Не вдалось відкрити: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Ця сторінка не має теки для прикріплень" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Редагувальний файл: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Ви редагуєте файл в зовнішній програмі. Коли зробите, можете закрити цей " "діалог" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Вікі для робочого стола" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Luxo https://launchpad.net/~wmd-o\n" " Sergiy Gavrylov https://launchpad.net/~gavro\n" " atany https://launchpad.net/~ye-gorshkov" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "тільки для читання" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Знайти" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Зворотнє посилання..." msgstr[1] "%i _Зворотні посилання..." msgstr[2] "%i _Зворотніх посилань..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Неможливо зберегти сторінку: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Щоб продовжити, ви можете зберегти копію цієї сторінки\n" "або відкинути зміни. Якщо ви збережете копію, зміни також\n" "не будуть внесені, але ви зможете відновити їх пізніше." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Відкинути зміни" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "Зберегти _копію" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Перейти до" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Перейти до сторінки" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Створити під-сторінку" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Створити сторінку" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Зауважте, що посилання на неіснуючу сторінку\n" "також автоматично створює нову сторінку." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Назва сторінки" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Сторінка вже існує" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Зберегти копію" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Імпортувати сторінку" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Текстові файли" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Перемістити сторінку" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Перемістити сторінку \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Оновити %i сторінку, що посилається на цю сторінку" msgstr[1] "Оновити %i сторінки, що посилаються на цю сторінку" msgstr[2] "Оновити %i сторінок, що посилаються на цю сторінку" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Перейменувати сторінку" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Перейменувати сторінку \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Оновити заголовок цієї сторінки" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Вилучити сторінку" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Вилучити сторінку \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Сторінка \"%s\" та всі її\n" "під-сторінки та долучення будуть вилучені" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Вилучити посилання, яке вказує на цю сторінку з %i сторінки" msgstr[1] "Вилучити посилання, яке вказує на цю сторінку з %i сторінок" msgstr[2] "Вилучити посилання, яке вказує на цю сторінку з %i сторінок" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "" msgstr[1] "" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Прикріпити файл" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Сторінка \"%s\" не має теки для прикріплень" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Вставити зображення як посилання" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Зошит" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Відкрити зошит" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Типовий зошит" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Додати зошит" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Вкажіть назву і теку для цього зошита." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Тека" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Оновлення індексу..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "Пов_ернути" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "Пов_торити" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Вирізати" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Копіювати" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "Вст_авити" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "В_илучити" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Встановити прапорець" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Зняти прапорець" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "Редагувати посилання або _об’єкт..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "В_илучити посилання" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Дату й час..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Зображення..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Текст із _файла..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Посилання..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Вставити посилання" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "Скинути _форматування" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "З_найти..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Зна_йти далі" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Знайти _попередній" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Замінити..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Кількість слів..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Заголовок _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Заголовок 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Заголовок _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Заголовок 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Заголовок _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Заголовок 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Заголовок _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Заголовок 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Заголовок _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Заголовок 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Жирний" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Жирний" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Курсив" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Курсив" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Підкреслений" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Підкреслений" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Викреслений" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Викреслений" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Нижній індекс" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Верхній індекс" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Стенографічний" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Дослівний режим" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Натискайте <Enter> для переходу за посиланнями\n" "(якщо зайнято, використовуйте <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Показувати курсор на сторінках тільки для читання" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Автоматично перетворювати „CamelCase“ слова в посилання" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Автоматично перетворювати адреси файлів в посилання" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Автоматично виділяти поточне слово при застосуванні форматування" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Клавіша <BackSpace> зменшує відступи за табуляцією\n" "(якщо вимкнено, використовуйте <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Зміна відступу елемента списку змінює відступи піделементів" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Встановлення прапорця змінює стан прапорців для всіх нащадків" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Форматування вікі-розмітки «на льоту»" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Редагувати посилання" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "_Копіювати посилання" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Копіювати адресу електронної пошти" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Відкрити теку" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Відкрити у програмі..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Відкрити" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Вставити дату й час" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "Посилання _на дату" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Вставити зображення" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Спочатку прикріпити зображення" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Редагувати зображення" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Адреса" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Посилання на" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Ширина" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Висота" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "С_кинути розмір" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Вставити текст із файлу" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Редагувати посилання" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Посилання" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Текст" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "Нас_тупний" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "П_опередій" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "В_раховувати регістр" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Збігається _ціле слово" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Регулярний вираз" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Виділення" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Знайти" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Параметри" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Знайти та замінити" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Знайти що" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Замінити на" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "За_мінити" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Замінити _все" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Статистика" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Абзац" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Виділення" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Слів" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Рядків" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Символи" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Інтерфейс" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Редагування" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Параметри" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Модулі" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Використовувати власний шрифт" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Більше" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Налаштувати" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Залежності" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Немає залежностей" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Гаразд" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Збій" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Автор" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Увімкнено" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Модуль" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Налаштувати модуль" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Параметри модуля %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Властивості" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Властивості зошита" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Для розширеного пошуку використовуйте знаки операції\n" "AND, OR або NOT. Детальніше на довідковій сторінці." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Кількість" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Сервер не запущено" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Порт" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Сервер запущено" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Сервер зупинено" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Вибрати файл" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Вибрати теку" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Всі файли" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Зображення" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Журнал" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Не можу знайти файл або теку для цього зошита" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Не можу знайти зошит: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Задана назва сторінки неправильна.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Неправильна назва сторінки „%s“" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Неможливо змінити сторінку: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Головна сторінка" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Коренева тека документа" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Attachment Browser" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Попередній перегляд" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Під час генерування зображення виникла помилка.\n" "Зберегти джерельний текст незважаючи на помилку?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Показати календар в бічній панелі замість діалогу" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "С_ьогодні" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Календар" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Календар" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Сьогодні" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Вставка діаграми" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль надає редактор діаграм для zim базований на GraphViz.\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Діа_граму..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Вставити діаграму" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Вставка формул" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль надає редактор рівнянь для zim базований на latex.\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "Редагувати _формулу" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Insert GNU R Plot" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Цей модуль надає графічний редактор для ZIM, базований на GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Редагувати GNU R Plot" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Модуль вбудованого калькулятора не\n" "в змозі обчислити вираз під курсором." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Вбудований калькулятор" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль дає змогу швидко обчислити прості\n" "математичні вирази в zim.\n" "\n" "Цей модуль є базовим і поставляється із zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Не вдалось проаналізувати вираз" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Обчислення _мат. виразів" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Вставка символу" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль додає діалог «Вставка символу» і дає змогу\n" "авто-форматувати типографські символи.\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Си_мвол..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Схема посилань" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль показує діалог з графічним\n" "поданням структури посилань зошита.\n" "Його можна використовувати як «розумну»\n" "схему, яка показує зв’язок посилань.\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Показувати схему посилань" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Друкувати до веб-переглядача" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль реалізує обхідний спосіб друку, зважаючи\n" "на відсутність підтримки друку в zim, шляхом експорту\n" "поточної сторінки до HTML файлу і відкриває його у\n" "веб-переглядачі. Припускаючи, що в веб-переглядачі\n" "реалізована функція друку, ви подаєте ваші данні\n" "до принтера в два кроки.\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Друкувати до веб-переглядача" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Швидка нотатка" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Модуль додає діалог для вставки тексту або вмісту буферу \n" "обміну на сторінку zim.\n" "\n" "Цей модуль основний, і поставляється разом з zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Швидка нотатка..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Створювати нову сторінку для кожної нотатки" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Назва" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Вставка знімків екрана" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль дає змогу робити знімок екрана і вставляти\n" "його прямо на сторінку zim.\n" "\n" "Цей модуль є базовим і поставляється із zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Знімок екрана..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Зробити знімок всього екрана" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Вибрати вікно або область екрана" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Затримка" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "секунд(и)" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Виникли деякі помилки під час роботи \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Перевірка орфографії" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Додає перевірку орфографії через gtkspell.\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Перевірка _орфографії" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Позначки" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Список завдань" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль додає діалог зі списком всіх відкритих\n" "завдань в окремому зошиті. Відкриті завдання позначені\n" "або галками або позначками «TODO» чи «FIXME».\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Вважати всі поля з відміткою завданнями" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Ярлики маркування завдань" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Потрібно індексувати зошит" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Список завдань відкритий вперше.\n" "А отже індекс необхідно перебудувати.\n" "Залежно від розміру зошита це може\n" "тривати кілька хвилин. Під час наступного\n" "відкривання це вже не знадобиться." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Фільтр" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i відкрите завдання" msgstr[1] "%i відкритих завдання" msgstr[2] "%i відкритих завдань" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Завдання" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Дата" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Значок в лотку" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Цей модуль додає значок в системний лоток.\n" "\n" "Залежить від Gtk+ версії 2.10 або новішої.\n" "\n" "Це базовий модуль, що поставляється в складі zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Класичний значок в лотку,\n" "не використовувати новий значок стану в Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Показувати окремий значок для кожного зошита" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Швидка нотатка..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Інше..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Зошити" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Контроль версій" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Регулярне автозбереження версій" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Автоматично збережена в zim версія" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Зберегти вер_сію..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Версії..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Від часу збереження останньої версії зошита змін не було." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Немає змін з останньої версії" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Увімкнути контроль версій?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Контроль версій для цього зошита вимкнений.\n" "Хочете його увімкнути?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Зберегти версію" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Додайте коментар для цієї версії" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Збережена в Zim версія" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Версії" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Сторінка" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Переглянути _зауваження" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Виберіть версію, щоб побачити зміни між цією версією та чинним\n" "станом, або виберіть кілька версій, щоб побачити зміни між ними.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Коментар" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Відновити версію" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Показати_зміни" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Поруч" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Прокоментоване джерело сторінки" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Відновити сторінку в збережену версію?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Хочете відновити сторінку: %(page)s\n" "в збережену версію: %(version)s ?\n" "\n" "Всі зміни в останній збереженій версії будуть втрачені!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Зміни" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Версія" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Pages" #~ msgstr "Сторінки" #~ msgid "Match c_ase" #~ msgstr "Збігається _регістр" #~ msgid "File browser" #~ msgstr "Переглядач файлів" #~ msgid "Web browser" #~ msgstr "Веб-переглядач" #~ msgid "Slow file system" #~ msgstr "Повільна файлова система" #~ msgid "Text Editor" #~ msgstr "Текстовий редактор" #~ msgid "Prio" #~ msgstr "Пріоритет" #~ msgid "Email client" #~ msgstr "Клієнт електронної пошти" #~ msgid "Output" #~ msgstr "Вихідний файл" #~ msgid "_Filter" #~ msgstr "_Фільтр" ����������������������������������������������������������������������������������zim-0.65/translations/pt_BR.po����������������������������������������������������������������������0000664�0001750�0001750�00000301331�12613750256�016214� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Brazilian Portuguese translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-24 21:31+0000\n" "Last-Translator: Marcio Tibirica <marcio.tibirica@gmx.com>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Erro ao executar o programa: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "retornou status de saída não-zero %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Falha ao executar: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Padrão" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:0" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Parece que você encontrou um erro" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Arquivo não existe: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Não foi possível ler: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Isso normalmente significa que o arquivo contém caracteres inválidos" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detalhes" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Não é possível escrever no arquivo: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Arquivo foi alterado externamente: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Personalizar..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Nenhum Aplicativo Encontrado" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Abrir com \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Configure um aplicativo para abrir links \"%s\"" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Configure um aplicativo para abrir arquivos\n" "do tipo \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Configurar Aplicativos" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Adicionar Aplicativo" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Padrão do Sistema" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nome" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Comando" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Tornar aplicativo padrão" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "O executável \"%s\" não foi encontrado" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Ferramentas Personalizadas" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Você pode configurar ferramentas personalizadas que irão aparecer\n" "no menu de ferramentas e na barra de ferramentas ou nos menus de contexto." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Editar Ferramenta Personalizada" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Descrição" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ícone" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Comando não modifica dados" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Saída deve substituir a seleção atual" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Mostrar na barra de ferramentas" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Os parâmetros seguintes serão substituídos \n" "quando o comando for executado: \n" "<tt>\n" "<b>%f</b> a página de origem como arquivo temporário \n" "<b>%d</b> o diretório de anexos da página atual\n" "<b>%s</b> o arquivo real da fonte da página (se houver)\n" "<b>%n</b> o local do caderno de anotações (arquivo ou pasta)\n" "<b>%D</b> o documento raiz (se houver)\n" "<b>%t</b> o texto ou palavra selecionada com o cursor\n" "<b>%T</b> o texto selecionado incluindo o formato wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportar" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Atualizando índice" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Exportando caderno" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Diretório existe: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "A pasta já existe e possui conteúdo, exportar para esta pasta pode " "sobrescrever arquivos existentes. Você deseja continuar?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "O arquivo existe" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Este arquivo já existe.\n" "Deseja sobrescrevê-lo?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Selecione as páginas para exportar" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Todo o _Caderno" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Página única" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Página" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Incluir sub-páginas" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Selecione o formato de exportação" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Outro..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formato" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Modelo" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" "Vincular arquivos do documento raiz com o caminho completo do arquivo" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Mapear documento raiz para URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Obtenha mais modelos on-line" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Selecione o arquivo ou pasta de saída" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Exportar cada página para um arquivo separado" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Exportar todas as páginas para um único arquivo" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Diretório de destino" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Página do índice" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Arquivo de saída" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "%(n_error)i erros e %(n_warning)i avisos ocorreram, consulte o log" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i erros ocorreram, consulte o log" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i avisos ocorreram, consulte o log" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "exportação concluída" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Visualizar _Registro" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Arquivo" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Editar" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Visualizar" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Inserir" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Pesquisar" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_matar" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Ferramentas" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Ir" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Ajuda" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "B_arra de Caminhos" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Barra de _Ferramentas" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nova Página..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nova S_ub Página..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Abrir Outro Caderno..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Abrir em nova _janela" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importar Página..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Salvar" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Salvar _Cópia..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xportar..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Enviar _Para..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Mover Página..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Renomear Página..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Excluir Página" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "P_ropriedades" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Fechar" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Sair" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "Pe_squisar..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Buscar _Ligações de Retorno..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Mudanças recentes..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copiar _localização" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Modelos" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Preferências" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Recarregar" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Abrir pasta dos _anexos" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Abrir pasta do _Caderno" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Abrir _documento raiz" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Abrir pasta do _Documento" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Anexar _arquivo" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Anexar arquivo externo" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Editar código fonte" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Iniciar _Servidor Web" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Atualizar índice" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Ferramentas _personalizadas" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Voltar" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Voltar uma página" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Avançar" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Avançar uma página" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Pai" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Ir para a página superior" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Filho" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Ir para página filha" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Anterior no índice" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Ir para a página anterior" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Próximo no índice" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Ir para a próxima página" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Início" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Ir para o início" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Ir para..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Conteúdo" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Atalhos do teclado" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Bugs" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Sobre" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Todos os Painéis" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Mostrar Todos os Painéis" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Barra de _Status" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "Painéis _Laterais" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Mostrar Painéis Laterais" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "Tela _Cheia" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Caderno _Editável" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Tornar o caderno editável" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Nenhum" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Páginas recentes" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Páginas _alteradas recentemente" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Histórico" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Hierarquia de Página" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ícones _e Texto" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Somente _Ícones" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Somente _Texto" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "Ícones _Grandes" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Ícones _Pequenos" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Ícones _Minúsculos" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Adicionar tiras removíveis para os menus" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Use <Ctrl><Espaço> para mudar para o painel lateral" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Remover links ao excluir páginas" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Sempre use a última posição do cursor ao abrir uma página" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "O arquivo ou pasta que você especificou não existe.\n" "Por favor, verifique se o caminho está correto." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Nenhum arquivo ou pasta: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "A página apresenta mudanças não salvas" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Atualizar Caderno?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Esse caderno foi criado numa versão mais antiga do Zim.\n" "Você gostaria de atualizá-lo à última versão agora?\n" "\n" "A atualização tomará um tempo e poderá efetuar diversas mudanças\n" "ao caderno. É recomendado fazer uma cópia de segurança\n" "antes de atualizar.\n" "\n" "Se você escolher não atualizar agora, algumas partes\n" "do programa podem não funcionar como esperado." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Atualizando o caderno" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "O índice ainda está ocupado com a atualização. Enquanto ela não for " "concluída, links podem não ser atualizados corretamente. Continuar pode " "desvincular links, deseja continuar mesmo assim?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Atualizando links" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Removendo links" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Criar pasta?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "O diretório \"%s\" ainda não existe.\n" "Deseja criá-lo agora?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Não foi possível abrir %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Esta página não possui uma pasta de anexos." #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Editando arquivo: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Você está editando um arquivo em um aplicativo externo. Você não pode fechar " "esta mensagem até que isto seja concluído." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Uma wiki para o desktop" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Alexandre Magno https://launchpad.net/~alexandre-mbm\n" " André Gondim https://launchpad.net/~andregondim\n" " Clodoaldo https://launchpad.net/~clodoaldo-carv\n" " Frederico Gonçalves Guimarães https://launchpad.net/~fgguimaraes\n" " Frederico Lopes https://launchpad.net/~frelopes\n" " Giovanni Abner de Brito Júnior https://launchpad.net/~giovannijunior\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Lewis https://launchpad.net/~akai-hen\n" " Marcio Tibirica https://launchpad.net/~marcio-tibirica\n" " Marco https://launchpad.net/~marcodefreitas\n" " Matheus https://launchpad.net/~matheus-rwahl\n" " NeLaS https://launchpad.net/~organelas\n" " Otto Robba https://launchpad.net/~otto-ottorobba\n" " Paulo J. S. Silva https://launchpad.net/~pjssilva\n" " Thaynã Moretti https://launchpad.net/~izn\n" " ThiagoSerra https://launchpad.net/~thiagoserra\n" " Wanderson Santiago dos Reis https://launchpad.net/~wasare" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Índice" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "somente leitura" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Procurar" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Buscar Páginas" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Ligação de Retorno..." msgstr[1] "%i _Ligações de Retorno..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Não foi possível salvar a página %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Para continuar você pode salvar uma cópia desta página\n" "ou descartar as mudanças realizadas. Se você salvar uma cópia\n" "as mudanças serão perdidas mas será possível restaurá-la depois." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Descartar alterações" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "S_alvar Cópia" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Pular para" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Pular para Página" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nova sub-página" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nova página" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Lembre se que criar um link para uma página não existente\n" "também cria essa página automaticamente." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Nome da página" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Modelo de Página" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "A página já existe" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Salvar Cópia" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importar Página" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Arquivos de texto" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Mover página" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Mover página \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Atualizar %i página vinculada à esta página" msgstr[1] "Atualizar %i páginas vinculadas à esta página" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Seção" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Renomear página" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Renomear página \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Atualizar o cabeçalho desta página" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Excluir página" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Excluir página \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Página \"%s\" e todas as suas\n" "sub-páginas e anexos serão deletados" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Remover ligações de %i página vinculada à esta página" msgstr[1] "Remover ligações de %i páginas vinculadas à esta página" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i arquivo será deletado" msgstr[1] "%i arquivos serão deletados" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Anexar Arquivo" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Página \"%s\" não tem uma pasta para anexos" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Inserir imagem como link" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Caderno" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Abrir Caderno" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Caderno padrão" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Adicionar Caderno" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Selecionar um nome e uma pasta para o caderno de anotações." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Pasta" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "Para criar um novo notebook que você precisa selecionar uma pasta vazia.\n" "Claro que você também pode selecionar uma pasta de notebook Zim existente.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Nenhum plugin está disponível para exibir este objeto." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Plugin %s é necessário para exibir este objeto." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Atualizando índice..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Desfazer" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Refazer" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Recortar" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copiar" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Colar" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Remover" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Alternar Caixa de Seleção 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Alternar Caixa de Seleção 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Editar Ligação ou Objeto" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Remover link" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Data e Hora" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Imagem..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Lis_ta Não Numerada" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Lista Numerada" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Lista de Cai_xa de Seleção" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Texto de _Arquivo..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Link..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Inserir Link" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Limpar Formatação" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Procurar..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Procurar Pró_ximo" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Procurar An_terior" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Substituir..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Contagem de Palavras..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Ampliar" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "_Diminuir" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Tamanho _Normal" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Novo _Anexo" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Modelos de _Arquivo" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Cabeçalho _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Cabeçalho 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Cabeçalho _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Cabeçalho 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Cabeçalho _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Cabeçalho 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Cabeçalho _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Cabeçalho 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Cabeçalho _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Cabeçalho 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Negrito" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Negrito" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Ênfase" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Ênfase" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Marcar" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Marcar" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Riscar" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Sobrescrito" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Subescrito" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Sobrescrito" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Verbatim" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Sem formatação" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Usar a tecla <Enter> para seguir ligações\n" "(Se desativado você pode usar <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Mostrar o cursor também em páginas que não podem ser editadas" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Automaticamente tornar palavras \"CamelCase\" em ligações" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Automaticamente tornar caminhos de arquivo em ligações" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Automaticamente selecionar a palavra atual quando aplicar formatação" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Remover recuo ao usar a tecla <BackSpace>\n" "(Se desativado você pode usar <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Clicar repetidamente numa caixa de seleção rotaciona entre os possíveis " "estados de seleção" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Remover o recuo de um item da lista também altera todos os subitens" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Marcar uma caixa de seleção altera todos seus sub-items" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Reformatar a marcação wiki em tempo real" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Formate padrão para cópia de texto da área de transferência" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Pasta com modelos para anexos" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Nenhuma wiki desse tipo definida: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Copiar _como..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Mover Texto Selecionado..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Propriedades" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Editar Link" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copiar _Link" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copiar endereço de e-mail" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Abrir pasta" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Abrir Com..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Abrir" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Nenhum modelo instalado" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "A pasta\n" "%s\n" "não existe.\n" "Deseja criá-la agora?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Inserir Data e Hora" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendário" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Link para data" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Inserir Imagem" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Anexar imagem primeiro" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Tipo de arquivo não suportado: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Editar Imagem" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Localização" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Ligar à" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Largura" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Alturar" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Restaurar Tamanho" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Inserir Texto à Partir de um Arquivo" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Editar Ligação" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Link" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Texto" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Próximo" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Anterior" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Diferenciar maiúsculas e _minúsculas" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Toda a _palavra" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Expressão _regular" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Destacar" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Procurar" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opções" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Encontrar e Substituir" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Localizar" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Substituir por" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Substituir" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Substituir _Tudo" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Contar Palavras" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Parágrafo" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Seleção" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Palavras" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Linhas" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Caracteres" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Caracteres excluindo os espaços" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Mover Texto à Outra Página" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Mover" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Mover texto para" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Manter ligação para nova página" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Abrir nova página" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Novo Arquivo" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interface" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Editando" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Preferências" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Plugins" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Aplicativos" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Usar fonte personalizada" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Mais" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigurar" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Obtenha mais plugins on-line" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dependências" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Sem dependências" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Falhou" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Opcional" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor(a)" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Habilitar" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Plugin" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configurar Plugin" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opções para o plug-in %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Definir editor de texto padrão" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Propriedades" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Propriedades do caderno" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Mudanças recentes" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Hoje" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Ontem" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Última Modificação" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Para buscas avançadas você pode usar operadores como\n" "AND, OR e NOT. Veja a página de ajuda para mais detalhes." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Limitar pesquisa à página atual e sub-páginas" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Ocorrência(s)" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Servidor Web" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Servidor não iniciado" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Permitir acesso público" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Porta" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Servidor iniciado" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Servidor parou" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Modelos" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Procurar" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Copiar Modelo" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Selecione o Arquivo" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Expandir _Tudo" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Contrair Tudo" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Limpar" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Selecione a Pasta" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Selecionar Imagem" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Painel Lateral Esquerdo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Painel Lateral Direito" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Painel Inferior" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Painel Superior" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Superior Esquerdo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Inferior Esquerdo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Superior Direito" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Inferior Direito" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Ao reportar um erro, por favor,\n" "inclua a informação na caixa de texto abaixo." #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Todos os Arquivos" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Imagens" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Arquivo de log" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Arquivo Já Existe" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "O arquivo com o nome <b>\"%s\"</b> já existe.\n" "Você pode usar outro nome ou sobrescrever o arquivo existente." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nome do arquivo" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Navegar" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Sobrescrever" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Não foi possível encontrar o arquivo ou pasta para este caderno" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Por favor especifique um caderno" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Não foi possível encontrar o caderno: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Local de saída necessário para a exportação" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Pasta de saída existe e não está vazio, especifique \"--sobrescrever\" para " "forçar a exportação" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Arquivo de saída existe , especifique \"--sobrescrever\" para forçar a " "exportação" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Necessário arquivo de saída para exportar MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Necessário pasta de saída para exportar o caderno completo" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "O nome dado à página não é válido.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nome de página \"%s\" inválido" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Índice encontra-se ocupado atualizando enquanto\n" "foi realizada uma operação que o necessita.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Não foi possível modificar a página: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Palavra Chave Interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Página Inicial" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Documento raiz" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Perfil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Desconhecido>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Erro em %(file)s na linha %(line)i próximo \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmética" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Este plugin possibilita que você embuta fórmulas matemáticas.\n" "É baseado no módulo arithmetic do Python, encontrado em\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmética" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Desconhecido(a)" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Tipo" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Tamanho" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Modificado Em" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Mover Aqui" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Copiar aqui" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Cancelar" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Navegador de Anexos" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" "Este plugin mostra a pasta de anexos da página atual como\n" "ícones no painel inferior.\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Posição na janela" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Anexos" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Mostrar o Navegador de Anexos" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Anexo" msgstr[1] "%i _Anexos" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Painel do BackLinks" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este plugin adiciona um widget extra mostrando uma lista de páginas\n" "que contêm links para a página atual.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Backlinks" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Visualização" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Um erro ocorreu durante o geração da image. \n" "Você deseja salvar a fonte do texto mesmo assim?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "Barra de favoritos" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\tEste plug-in fornece uma barra para os marcadores.\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "Salvar marcadores" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "Adicione novos marcadores no início da barra" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "Adicionar marcador" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "Marcadores" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "Você quer apagar todos os marcadores?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "Mostrar o nome completo da página" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "Definir Novo Nome" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "Voltar para Nome Original" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "Remover" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "Remover Todos" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "Abrir em uma nova janela" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "Definir como Página Atual" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Diário" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Este plugin transforma uma seção do caderno em um diário\n" "com uma página por dia, semana ou mês.\n" "Também acrescenta um widget de calendário para acessar essas páginas.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Dia" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Semana" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Mês" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Ano" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Mostrar calendário no painel lateral e não como uma caixa diálogo" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Use uma página para cada" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Expandir página do diário no índice quando aberto" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Ho_je" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Calen_dário" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Exibir Calendário" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d de %B de %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calendário" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Hoje" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Inserir Diagrama" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin fornece um editor de diagramas para o zim baseado no GraphViz.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_grama" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Inserir diagrama" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Editar diagrama" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Edição Livre de Distrações" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Este plugin adiciona configurações que ajuda a fazer\n" "uso do zim livre de distrações.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Esconder menu no modo tela cheia" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Esconder ferramentas no modo tela cheia" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Esconder a barra de endereços no modo tela cheia" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Esconder a barra de status no modo tela cheia" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Largura máxima da página" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Margem vertical" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Cor do texto de fundo" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Cor do texto da frente" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Cor do plano de fundo" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Inserir Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin fornece um editor de diagramas para o zim baseado no Ditaa.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Editar Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Inserir Equação" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin fornece um editor de equações para o zim baseado no latex.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "E_quation" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "Edit_ar Equação" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Inserir Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Esse plugin fornece um editor de plotagem para o zim baseado no Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Editar Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Inserir Plot do GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Esse plugin fornece um editor de plotagem para o zim baseado no GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Editar Plot do GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "O plugin de calculadora integrada não conseguiu\n" "avaliar a expressão no cursor." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Calculadora Integrada" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin permite avaliar rapidamente simples\n" "equações matemáticas no zim.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Não foi possível analisar a expressão" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Avaliar _Matemática" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Inserir Símbolo" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin adiciona o diálogo \"Inserir Símbolo\" e permite\n" "a auto-formatação de caractéres tipográficos.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sí_mbolo" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Ordenador de Linhas" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Esse plugin ordena alfabeticamente as linhas selecionadas.\n" "Se a lista já estiver ordenada, a ordem será invertida (de A-Z para Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Ordenar linhas" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Por favor, primeiramente, selecione mais the uma linha de texto." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mapa de Ligações" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin apresenta um diálogo gráfico\n" "da estrutura dos vínculos do caderno.\n" "Pode ser usado como um \"mind map\"\n" "do relacionamento das páginas.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Mostrar Mapa de Ligações" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Print to Browser" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin fornece um método para lidar com a falta\n" "de suporte de impressão no zim. Ele exporte a página atual\n" "em html e abre-a no navegador. Assumindo um navegador\n" "com suporte à impressão isso fará sua informação\n" "ser impressa em dois passos.\n" "\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "Visualizar no navegador Web" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Anotação Rápida" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin adiciona uma caixa de diálogo para colocar rapidamente\n" "texto ou conteúdo da área de transferência numa página do zim.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Anotação Rápida..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "seção da página" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Cirar uma página nova para cada anotação" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Título" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Abrir _Página" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Descartar nota?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Inserir Pontuação" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin proporciona um editor de pontuação para o zim baseado no GNU " "Lilypond.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Inclusão de cabeçalho partilhável" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Inclusão de rodapé partilhável" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "S_core" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Editar Pontuação" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Inserir Captura de Tela" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este plugin permite fazer uma captura da tela e\n" "inseri-lá diretamente numa página do zim.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Comando de captura de tela" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Captura de Tela..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Capturar toda a tela" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Selecionar janela ou área" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Atraso" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "segundos" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Algum error occoreu ao rodar \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Inserir Diagrama de Sequência" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Este plugin fornece um editor de diagrama de sequência para o Zim baseado no " "seqdiag. Ele permite a fácil edição de diagramas de sequência.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Diagrama de Sequência" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Editar Diagrama de Sequência" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Source View" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Este plugin permite inserir 'Code Blocks' na página. Estes serão \n" "mostrados como widgets com realce de sintaxe, números de linha etc.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Indentação automática" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Smart Home key" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Realçar a linha atual" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Exibir margem direita" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Posição da margem direita" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Largura da aba" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Bloco de código" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Inserir Bloco de Código" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Sintaxe" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Mostrar número das linhas" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Verificador Ortográfico" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este plugin adiciona verificação ortográfica através do gtkspell.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Verficar _ortografia" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Não foi possível carregar a verificação ortográfica" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Isso pode significar que você não tem\n" "os dicionários corretos instalados." #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "Esquerdo" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Centro" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "Direito" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Não especificado" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Editor de Tabelas" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "Com este plugin você pode inserir uma 'tabela' em uma página wiki. As " "tabelas serão mostradas como widgets GTK TreeView. Exportá-los para vários " "formatos (ou seja, HTML / LaTeX) completa o conjunto de recursos.\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "com linhas" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "sem linhas de grade" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "linhas horizontais" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "linhas verticais" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Mostrar barra de ferramentas auxiliar" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Linhas de grade" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Tabela" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Adicionar linha" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Remover a linha" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Clonar linha" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "Linha para cima" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "Linha para baixo" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Gerenciar colunas" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Abrir ajuda" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Apagar linha" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Abrir link contido na célula" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "A tabela deve ser constituída por pelo menos uma linha!\n" " Apagamento não executado." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Por favor selecione uma linha antes de apertar o botão." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Inserir Tabela" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Editar Tabela" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Gerenciar colunas de tabelas" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Coluna 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "Quebra de\n" "linha automática" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Alinhamento" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Adicionar coluna" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Remover a coluna" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Mover coluna à frente" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Mover coluna para trás" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Uma tabela deve ter ao menos uma coluna" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Tabela de Conteúdos" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este plugin adiciona uma aba extra mostrando uma\n" "tabela dos conteúdos da página atual.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Mostrar TdC como um widget flutuante e não no painel lateral" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Mostra o título da página na TdC" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "TdC" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Rebaixar" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Promover" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etiquetas" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Esse plugin fornece um índice de páginas filtrado através da seleção de " "etiquetas em uma nuvem.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Exibir o nome completo da página" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Organizar páginas por etiquetas" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "não etiquetado" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Organizar alfabeticamente" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Lista de Tarefas" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin apresenta um diálogo mostrando todas as tarefas\n" "em aberto no caderno. Tarefas em aberto podem ser caixas\n" "abertas ou items com etiquetas como \"TODO\" ou \"FIXME\".\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Considerar todas as caixas de seleção como tarefas" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Transformar o nome de páginas em etiquetas para tarefas" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Data final implícita para as tarefas nas páginas do calendário" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Sinalizar antes do final de semana as tarefas com prazo final na segunda-" "feira ou terça-feira" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Rótulos marcando tarefas" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Rótulo para a próxima tarefa" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Etiquetas para tarefas não-acionáveis" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Sub-árvore (s) a indexar" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Sub-árvore (s) a ignorar" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "É preciso indexar o caderno" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Esta é a primeira vez que a lista de tarefas é aberta.\n" "O índice precisa ser reconstruído.\n" "Dependendo do tamanho do caderno isso pode\n" "demorar vários minutos. Na próxima vez que você usar\n" "a lista de tarefas, isso não será mais necessário." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtrar" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Mostrar Apenas Tarefas Acionáveis" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i item aberto" msgstr[1] "%i itens abertos" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Todas as Tarefas" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Sem marcadores" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Tarefa" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Data" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ícone na Área de Notificação" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin adiciona um ícone na área de notificação para acesso rápido.\n" "\n" "Esse plugin depende do Gtk+, versão 2.10 ou superior.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Ícone na área de notificação clássico,\n" "não usar o novo estilo de ícone de status do Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Mostrar um ícone separado para cada caderno" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Anotação Rápida..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Outro(s)..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Cadernos" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Controle de Versão" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Esse plugin adiciona controle de versão aos cadernos.\n" "\n" "Esse plugin suporta os sistemas de controle de versão: Bazaar, Git e " "Mercurial.\n" "\n" "Este é um plugin interno que acompanha o zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Salvar automaticar em intervalos regulares" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Versão automaticamente salva do zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Salvar versão..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versões" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Não há mudanças neste caderno de anotações desde a última versão salva" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Nenhuma mudança desde a última versão" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Ativar Controle de Versão?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Controle de versão encontra-se desativado para este caderno.\n" "Deseja ativá-lo?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Backend" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Salvar Versão" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Por favor digite um comentário para esta versão" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versão salva do zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versões" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Páginas" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Ver _Anotação" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Seleciona uma versão para ver as diferenças entre aquela versão e a atual.\n" "Ou selecione múltiplas versão para ver as mudanças entre elas.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Comentário" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Restaurar Versão" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Mostrar _Modificações" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Lado à Lado" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Fonte Anotada da Página" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Restaurar página à última versão salva?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Você quer restaurar a página: %(page)s\n" "à versão salva: %(version)s?\n" "\n" "Todas as modificações desde a última versão salva serão perdidas!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Modificações" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Recordar eventos com o Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Passa os eventos ao serviço Zeitgeist" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Página Wiki: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Não foi possível encontrar o modelo \"%s\"" #~ msgid "Text Editor" #~ msgstr "Editor de texto" #~ msgid "File browser" #~ msgstr "Navegador de Arquivos" #~ msgid "Email client" #~ msgstr "Cliente de Email" #~ msgid "Web browser" #~ msgstr "Navegador Web" #~ msgid "Pages" #~ msgstr "Páginas" #~ msgid "Output" #~ msgstr "Saída" #~ msgid "Match c_ase" #~ msgstr "_Coincidir maiúsculas e minúsculas" #~ msgid "Slow file system" #~ msgstr "Sistema de arquivo lento" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "_Filter" #~ msgstr "_Filtrar" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/sr.po�������������������������������������������������������������������������0000664�0001750�0001750�00000256623�12613750113�015637� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Serbian translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2012-10-06 21:09+0000\n" "Last-Translator: Иван Старчевић <ivanstar61@gmail.com>\n" "Language-Team: Serbian <sr@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Покретање програма није успело: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "враћено је излазно стање%(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Подразумевано" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Нема такве датотеке: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Није могуће прочитати: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "То обично значи да датотека садржи неважеће знаке" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Детаљи" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Отвори са „%s“" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Назив:" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Наредба" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Прилагођене алатке" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Можете да подесите жељене алате које ће се појавити\n" " на траци са алаткама или падајућем изборнику." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Уреди прилагођене алатке" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Опис" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Икона" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Команда не мења податке" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Прикажи у алатној траци" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Извези" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Ажурирање индекса" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Извожење бележнице" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Постоји фасцикла: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Фасцикла већ постоји и има садржај, извоз у ову фасциклу могу заменити " "постојеће датотеке. Да ли желите да наставите?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Датотека постоји" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Ова датотека већ постоји.\n" "Желите да је замените?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Изаберите странице за извоз" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Целокупна _бележница" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Појединачна _страница" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Страна" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Изаберите формат за извоз" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Остало..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Формат" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Шаблон" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Повежи датотеке под главним документом са пуном путањом датотеке" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Пресликај главни документ у УРЛ адресу" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Изаберите излазну датотеку или фасциклу" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Излазна фасцикла" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Показатељ стране" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Излазна датотека" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Приказ _евиденције" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Датотека" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Уреди" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Приказ" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Уметни" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Претражи" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "Фор_мат" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Алатке" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Иди" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Помоћ" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Трака _путање" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Алатна трака" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Нова страница..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Нова под_страница..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Отворите другу бележницу..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Отвори у новом _прозору" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Увези страницу..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Сачувај" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Сачувај _копију..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "И_звези..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Пошаљи у..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Премести страницу..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Преименуј страницу..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Избриши страницу" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Својс_тва" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Затвори" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Изађи" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Тражи..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Претрага _повратне везе..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "По_ставке" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Поново учитај" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Отвори фасциклу _прилога" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Отвори _фасциклу бележнице" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Отвори _главни документ" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Отвори _фасциклу докумената" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Приложи _датотеку" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Приложи спољну датотеку" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Уреди _извор" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Покрени _веб послужитеља" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Ажурирај индекс" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Прилагођене _алатке" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Назад" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Иди страницу назад" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Проследи" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Иди на страницу напред" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Надређени" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Иди на надређену страну" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Подређено" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Иди на подређену страну" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Предходна у индексу" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Иди на претходну страну" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Следећа у индексу" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Иди на следећу страну" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Почетна" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Иди на почетну" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Пређи на..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Садржај" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_ЧПП" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Тастатурне пречице" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Грешке" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_О програму" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Статусна трака" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Цео екран" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Уређивање _бележнице" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Укључи уређивање бележнице" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Ништа" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Недавне странице" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Историјат" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Иконе _и текст" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "_Само иконе" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "_Само текст" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Велике иконе" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Мале иконе" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Сићушне иконе" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Додај 'tearoff' траке за изборнике" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Користи <Ctrl><Размак> за пребацивање у бочно окно" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Уклоните везе приликом брисања странице" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Увек користи последњу позицију показивача приликом отварања странице" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Нема такве датотеке или фасцикле: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Желите надоградити бележницу?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Надоградња бележнице" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Ажурирање везе" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Уклањање везе" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Желите направити фасциклу?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Није могуће отворити: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Ова страница нема фасциклу прилога" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Уређивање датотеке: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Ви уређујете датотеку у спољашњој апликацији. Затворите овај дијалог након " "измене" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Википедија - радна површина" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Vladimir Lazic https://launchpad.net/~vlazic\n" " Иван Старчевић https://launchpad.net/~ivanstar61" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Индекс" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "само за читање" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Претрага" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Повратна веза..." msgstr[1] "%i _Повратне везе..." msgstr[2] "%i _Повратних веза..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Није могуће сачувати страницу: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Одбаци измене" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Сачувај копију" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Скочи на" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Скочи на страницу" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Нова подстрана" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Нова страница" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Име стране" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Шаблон стране" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Страна постоји" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Сачувај копију" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Увези страну" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Текстуалне датотеке" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Премести страницу" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Премести страницу \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Ажурирај %i страницу која је повезана на ту страницу" msgstr[1] "Ажурирај %i странице које су повезане на ту страницу" msgstr[2] "Ажурирај %i страница које су повезане на ту страницу" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Преименуј страну" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Преименуј страну \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Ажурирајте заглавље ове странице" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Обриши страну" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Избриши страницу \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Уклони везе са %i страницe које су повезане на ову страницу" msgstr[1] "Уклони везе са %i страницe које су повезане на ову страницу" msgstr[2] "Уклони везе са %i страницa које су повезане на ову страницу" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i датотека ће бити обрисана" msgstr[1] "%i датотеке ће бити обрисане" msgstr[2] "%i датотека ће бити обрисано" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Приложи датотеку" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Страница \"%s\" нема фасциклу за прилоге" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Уметни слике као везе" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Бележница" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Отвори бележницу" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Подразумевана бележница" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Додај бележницу" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Изаберите име и фасциклу за бележницу." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "фасцикла" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Ажурирање индекса..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Опозови" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Понови" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "И_сеци" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Умножи" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Налепи" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Обриши" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Пребаци поље за избор 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Пребаци поље за избор 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Уреди везу или објекат..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Уклони везу" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Датум и време..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Слика..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Нумерисани списак" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Текст из_ датотеке..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Веза..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Убаци везу" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "Очисти форматирање" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Нађи..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Пронађи сле_деће" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Пронађи пре_тходно" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Замени..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Бројање речи..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Увећај" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "У_мањи" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Уобичајена величина" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Заглавље _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Заглавље 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Заглавље _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Заглавље 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Заглавље _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Заглавље 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Заглавље _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Заглавље 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Заглавље _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Заглавље 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Јако" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Јако" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Наглашавање" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Наглашавање" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Означи" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Означи" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Прецртај" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Прецртај" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Под-пис" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Над-пис" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Verbatim" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Verbatim" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Прикажи курсор на страници која се не може изменити" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Аутоматски претвори путање датотека у везе" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Потврда поља за избор ће такође променити под-ставке" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Преобликуј Вики ознаке у лету" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Подразумевани формат за копирање текста у остави" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Умножи _као..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Премести изабрани текст..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Уреди својства" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Уреди везу" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Умножи _везу" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Умножи е-адресу" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Отвори фасциклу" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Отвори помоћу..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Отвори" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Уметни датум и време" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Календар" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Повежи на датум" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Уметни слику" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Прво приложи слику" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Тип датотеке није подржан: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Уреди слику" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Место" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Веза до" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Ширина" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Висина" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Поново постави величину" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Уметни текст из датотеке" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Уреди везу" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Веза" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Текст" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Следеће" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Претходно" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Цела _реч" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Правилан израз" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Означено" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Пронађи" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Могућности" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Нађи и замени" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Текст за претрагу" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Замени са" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Замени" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Замени _све" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Број речи" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Пасус" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Избор" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Речи" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Редови" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Знакови" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Премести текст на другу страницу" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Премести" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Премести текст у" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Оставите везу ка новој страници" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Отвори нову страницу" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Сучеље" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Уређивање" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Поставке" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Додаци" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Користи жељени словолик" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Још" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "П_одеси" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Зависности" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Нема зависности" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "У реду" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Није успело" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "По избору" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Аутор" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Укључено" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Додатак" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Подеси додатак" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Могућности додатка %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Својства" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Својства бележнице" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Резултат" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Послужитељ није покренут" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Прикључак" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Послужитељ је покренут" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Послужитељ је заустављен" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Изаберите датотеку" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Прошири _све" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Скупи све" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Очисти" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Изабери фасциклу" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Изаберите слику" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Врх>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Све датотеке" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Слике" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Датотека евиденције" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Датотека постоји" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Назив датотеке" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Преглед" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Замени" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Није могуће наћи датотеку или фасциклу за ову бележницу" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Није могуће пронаћи бележницу: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Датој страници не важи име\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Неважеће име странице \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Није могуће изменити страницу: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Почетна страница" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Главни документ" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Профил" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Аритметика" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Аритметика" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Непознато" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Величина" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Измењено" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Премести овде" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Умножи овде" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Откажи" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Прегледач прилога" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Прилози" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Преглед" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Грешкa приликом стварања слике.\n" "Да ли желите да сачувате ипак изворни текст?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Дан" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Седмица" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Месец" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Година" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Прикажи календар у бочном окну уместо као дијалог" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Користи за сваку страну" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Да_нас" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Кале_ндар" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Календар" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Данас" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Уметни дијаграм" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Диа_грам" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Уметни дијаграм" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Уметни Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Уреди Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Уметни једначину" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Уреди једначину" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Уметни Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Уреди Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Није могуће анализирати израз" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Убаци симбол" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Си_мбол..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Разврстач линија" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Разврстај линије" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Print to Browser" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Брза белешка" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Брза белешка ..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Направи нову страну за сваку белешку" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Наслов" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Отвори _страницу" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Уметни снимак екрана" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Снимак екрана..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Снимак целог екрана" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Изабери прозор или област" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Кашњење" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "секунде" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Провера правописа" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Садржај" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Снизи" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Унапреди" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Ознаке" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Поређај странице по ознакама" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "необележено" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Поређај по алфабету" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Списак задатака" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Филтер" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Прикажи само одговарајуће задатке" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i отворена ставка" msgstr[1] "%i отворене ставке" msgstr[2] "%i отворених ставки" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Сви задаци" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Задатак" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Датум" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Икона у палети" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Брза белешка..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Остало..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Бележнице" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Издање за проверу" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "с_ачувај ово издање..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Издања..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Нема промена од последњег издања" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Тржница" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Сачувај ово издање" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Унесете коментар за ово издање" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Издања" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Страна" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Коментар" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Врати издање" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Прикажи _промене" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Страна по страна" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Промене" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "Уређивач текста" #~ msgid "Pages" #~ msgstr "Странице" #~ msgid "Web browser" #~ msgstr "Интернет прегледач" #~ msgid "File browser" #~ msgstr "Прегледач датотека" #~ msgid "Email client" #~ msgstr "Корисник е-поште" �������������������������������������������������������������������������������������������������������������zim-0.65/translations/fr.po�������������������������������������������������������������������������0000664�0001750�0001750�00000304656�12613750113�015622� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# French translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-24 05:43+0000\n" "Last-Translator: Jean-Marc <Unknown>\n" "Language-Team: French <fr@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Échec du lancement de l'application : %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "a retourné un code d'erreur : %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Échec dans l'exécution de %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Par défaut" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Il semble que vous ayez trouvé un bogue" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Fichier inexistant : %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Impossible de lire : %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" "Ceci signifie généralement que le fichier contient des caractères invalides" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Détails" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Le fichier est protégé en écriture : %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Le fichier a été modifié sur le disque : %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Personnaliser..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Aucune application trouvée" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Ouvrir avec « %s »" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Configurez une application pour ouvrir les liens « %s »" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "Configurer une application pour ouvrir des fichiers de type « %s »" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Configurer les applications" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Ajouter une application" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Valeur par défaut du système" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nom" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Commande" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Application par défaut" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Impossible de trouver l'exécutable | %s »" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Outils personnalisés" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Vous pouvez configurer des outils personnalisés qui \n" "apparaîtront dans le menu « Outils » et dans la barre d'outils \n" "ou les menus contextuels." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Éditer un outil personnalisé" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Description" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Icône" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "La commande ne modifie pas les données" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "La sortie remplace la sélection actuelle" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Afficher dans la barre d'outils" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Les paramètres suivants seront substitués \n" "dans la commande lors de son exécution :\n" "<tt>\n" "<b>%f</b> la page source comme fichier temporaire\n" "<b>%d</b> le dossier des pièces attachées de la page courante\n" "<b>%s</b> le fichier réel de la page source (s'il existe)\n" "<b>%n</b> l'emplacement du bloc-notes (fichier ou dossier)\n" "<b>%D</b> la racine du document (s'il existe)\n" "<b>%t</b> le texte sélectionné ou le mot sous le curseur\n" "<b>%T</b> le texte sélectionné avec le formatage wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exporter" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Mise à jour de l'index" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Export du bloc-notes" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Le dossier existe : %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Le dossier existe déjà et possède des fichiers ; exporter dans ce dossier " "pourrait remplacer des fichiers existants. Voulez-vous continuer ?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Le fichier existe." #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Le fichier existe déjà.\n" "Voulez-vous l'écraser ?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Sélectionner les pages à exporter" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "_Bloc-notes complet" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "_Page unique" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Page" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Inclure les sous-pages" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Sélectionner le format d'exportation" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Autre..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Format" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Modèle" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" "Lier les fichiers présents dans l'arborescence des documents avec des " "chemins complets" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Lien du document parent vers l'URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Obtenir plus de modèles en ligne" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Sélectionner le fichier ou le dossier de destination" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Exporter chaque page dans un fichier séparé" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Exporter toutes les pages dans un unique fichier" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Dossier de destination" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Page d'index" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Fichier de sortie" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" "Il y a %(n_error)i erreurs et %(n_warning)i messages, regardez le fichier log" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i erreurs se sont produites, voir le log" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i avertissements ont été émis, voir le log" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Export terminé" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Consulter le _journal" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Fichier" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Édition" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Affichage" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Insérer" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Rechercher" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mat" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Outils" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "A_ller à" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Aide" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "_Barre d'adresse" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Barre d'outils" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nouvelle page..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nouvelle so_us-page..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Ouvrir un autre bloc-notes" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Ouvrir dans une nouvelle _fenêtre" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importer la page..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Enregistrer" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Enregistrer une _copie..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xporter..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Envoyer à..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Déplacer la page..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Renommer la page..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Supprimer la page" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Proprié_tés" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Fermer" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Quitter" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Rechercher..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Rechercher les _rétroliens" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Changements récents..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copier _l'emplacement" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Modèles" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Préférences" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Actualiser" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Ouvrir le _dossier des pièces attachées" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Ouvrir le _dossier du bloc-notes" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Ouvrir le _document racine" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Ouvrir le _dossier du document" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Joindre un _fichier" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Joindre une fichier externe" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Modifier les sources" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Démarrer le serveur _web" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Mettre à jour l'index" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Outils _personnalisés" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Précédent" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Revenir à la page précédente" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Suivant" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Aller à la page suivante" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Parent" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Aller à la page parent" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Enfant" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Aller à la page fille" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Page _précédente dans l'index" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Aller à la page précédente" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Page _suivante dans l'index" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Aller à la page suivante" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Accueil" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Aller à l'accueil" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "A_ller à..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Contenus" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Raccourcis clavier" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Bugs" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_À propos" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Tous les panneaux" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Afficher tous les panneaux" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Barre d'état" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "Panneaux _latéraux" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Affichez les panneaux latéraux" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Plein écran" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Bloc-notes é_ditable" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Changer le mode éditable du bloc-notes" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Aucun" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Pages récentes" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Pages _récemment modifiées" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historique" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "Hiérarchie de la _page" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Icônes et texte" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "_Icônes seules" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "_Texte seul" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Grosses icônes" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Petite_s icônes" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Icônes minuscules" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Ajouter des pointillés aux menus pour les détacher" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Utiliser <Ctrl><Espace> pour passer sur le panneau latéral" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Supprimer les liens quand les pages sont supprimées" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" "Toujours utiliser la dernière position du curseur lors de l'ouverture de la " "page" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "Le fichier ou le dossier que vous avez spécifié n'existe pas." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Pas de fichier ou de dossier : %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "La page a des modifications non sauvegardées" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Mettre à niveau le bloc-notes ?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Ce bloc-notes a été créé avec une ancienne version de zim.\n" "Voulez-vous le mettre à niveau maintenant ?\n" "\n" "La mise à niveau peut prendre du temps et provoquer diverses\n" "modifications dans le bloc-notes. Il est préférable d'effectuer\n" "une sauvegarde avant.\n" "\n" "Si vous n'effectuez pas la mise à niveau maintenant,\n" "certaines fonctionnalités risquent de ne pas\n" "fonctionner correctement." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Mise à niveau du bloc-notes" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "La mise à jour de l'index est en cours. Tant qu'elle n'est pas finie, les " "liens ne peuvent pas être mis à jour correctement. Effectuer cette opération " "maintenant pourrait détruire des liens, souhaitez-vous vraiment continuer ?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Mise à jour des liens" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Supprimer les liens" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Créer le répertoire ?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Le dossier \"%s\" n'existe pas.\n" "Voulez-vous le créer ?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Ne peut pas ouvrir : %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Cette page n'a pas de dossier pour pièces jointes" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Modification de fichier: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Vous êtes en train de modifier un fichier avec un éditeur externe. Vous " "pouvez fermer cette fenêtre de dialogue lorsque vous aurez terminé." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Un wiki pour le bureau" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Jean Demartini\n" "Launchpad Contributions:\n" " BobMauchin https://launchpad.net/~zebob.m\n" " Calinou https://launchpad.net/~calinou\n" " Daniel Stoyanov https://launchpad.net/~dankh\n" " Etienne LB https://launchpad.net/~etiennelb-deactivatedaccount\n" " François Boulogne https://launchpad.net/~sciunto.org\n" " Herve Robin https://launchpad.net/~robin-herve\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Jean DEMARTINI https://launchpad.net/~jean-demartini-dem-tech\n" " Jean-Marc https://launchpad.net/~m-balthazar\n" " Jean-Philippe Rutault https://launchpad.net/~rutault-jp\n" " Jibec https://launchpad.net/~jbhoc\n" " Jigho https://launchpad.net/~jigho\n" " Joseph Martinot-Lagarde https://launchpad.net/~contrebasse\n" " Jérôme Guelfucci https://launchpad.net/~jerome-guelfucci-" "deactivatedaccount\n" " Kernel https://launchpad.net/~larrieuandy\n" " LEROY Jean-Christophe https://launchpad.net/~celtic2-deactivatedaccount\n" " LM https://launchpad.net/~lomr\n" " Le Bouquetin https://launchpad.net/~damien-accorsi\n" " Makidoko https://launchpad.net/~makidoko\n" " Pascollin https://launchpad.net/~pascollin\n" " Quentin THEURET @TeMPO Consulting https://launchpad.net/~qt-tempo-" "consulting\n" " Raphaël Hertzog https://launchpad.net/~hertzog\n" " Rui Nibau https://launchpad.net/~ruinibau\n" " Steve Grosbois https://launchpad.net/~steve.grosbois\n" " Stéphane Aulery https://launchpad.net/~lkppo\n" " Thomas LAROCHE https://launchpad.net/~mikaye\n" " andré https://launchpad.net/~andr55\n" " oswald_volant https://launchpad.net/~obordas\n" " pitchum https://launchpad.net/~pitchum\n" " samuel poette https://launchpad.net/~fracte" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Index" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Lecture seule" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Rechercher" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Chercher des pages..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _rétro-lien" msgstr[1] "%i _rétro-liens" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Impossible de sauvegarder la page : %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Pour continuer, vous pouvez enregistrer une copie de la page ou abandonner \n" "les modifications. Si vous enregistrez une copie, les modifications seront " "aussi\n" "abandonnées mais vous pourrez récupérer la copie plus tard." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Annuler les modifications" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Enregistrer la copie" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Aller à" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Aller à la page" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nouvelle sous-page" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nouvelle page" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Remarquez que lier une page non-existante\n" "aura pour effet de créer une nouvelle page automatiquement." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Nom de la page" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Modèle de page" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "La page existe" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Enregistrer une copie" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importer la page" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Fichiers texte" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Déplacer la page" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Déplacer la page « %s »" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Mettre à jour %i page pointant sur cette page" msgstr[1] "Mettre à jour %i pages pointant sur cette page" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Section" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Renommer la page" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Renommer la page « %s »" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Mettre à jour l'en-tête de cette page" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Supprimer la page" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Supprimer la page « %s » ?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "La page \"%s\" et \n" "toutes ses sous-pages et leurs pièces attachées seront supprimées." #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Supprimer les liens de %i page pointant sur cette page" msgstr[1] "Supprimer les liens des %i pages pointant sur cette page" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "le fichier %i va être supprimé" msgstr[1] "les fichiers %i vont être supprimés" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Joindre un fichier" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "La page « %s » n'a pas de dossier pour les pièces jointes" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Insérer l'image en tant que lien" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Bloc-notes" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Ouvrir le bloc-notes" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Carnet par défaut" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Ajouter un bloc-note" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Veuillez choisir un nom et un dossier pour le bloc-notes" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Dossier" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "Pour créer un nouveau bloc-notes, vous devez sélectionner un dossier.\n" "Vous pouvez évidemment sélectionner le dossier d'un bloc-notes existant.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Aucun greffon disponible pour afficher cet objet" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Le plugin \"%s\" est requit pour afficher cet objet" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Mise à jour de l'index..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "Ann_uler" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Rétablir" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Co_uper" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copier" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "C_oller" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Supprimer" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "(Dé)Cocher la case 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "(Dé)Cocher la case 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "É_diter lien ou objet..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Retirer le lien" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Date et Heure..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Image..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Lis_te à puces" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Liste _numérotée" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Ca_se à cocher" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Texte à partir d'un _fichier..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Lien..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Insérer un lien" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Effacer les styles" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Rechercher..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Rechercher le _suivant" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Rechercher _précédent" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Remplacer..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Nombre de mots..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Zoomer" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "_Dézoomer" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Taille _normale" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nouvelle _pièce jointe" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "_Modèles de fichier..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Titre _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Titre 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Titre _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Titre 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Titre _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Titre 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Titre _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Titre 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Titre _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Titre 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Gras" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Gras" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Italique" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Italique" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Marquer" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Marquer" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Barré" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Barré" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Indice" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "E_xposant" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Verbatim" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Verbatim" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Utiliser la touche <Entrée> pour suivre les liens\n" "(si désactivé vous pouvez encore employer <Alt><Entrée>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Afficher le curseur en lecture seule" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Transformer automatiquement les mots \"CamelCase\" en liens" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "" "Transformer automatiquement les chemins vers le système de fichiers en liens" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Sélectionner le mot courant en appliquant un style" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Désindenter avec la touche <Retour Arrière>\n" "(si désactiver, vous pouvez toujours utiliser <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Une succession de clics boucle à travers les états de case à cocher" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Désindenter un élément de liste affecte également les éventuels sous-éléments" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Cocher les cases de manière récursive" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Reformater les balises wiki à la volée" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Format par défaut du texte copié dans le presse-papier" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Dossier avec templates pour les pièces jointes" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Pas de lien wiki défini: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Copier _au format..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Déplacer le texte sélectionné..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Editer les propriétés" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "Mo_difier le lien" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copier le _lien" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copier l'adresse électronique" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Ouvrir le dossier" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Ouvrir avec..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Ouvrir" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Pas de modèles installés" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Le dossier\n" "%s\n" "n'existe pas.\n" "Voulez-vous le créer ?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Insérer la date et l'heure" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendrier" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Lier à une date" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Insérer une image" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Copier l'image dans le bloc-notes" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Type de fichier non supporté: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Modifier l'image" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Emplacement" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Lien vers" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Largeur" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Hauteur" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Supprimer la taille" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Insérer du texte depuis un fichier" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Modifier le lien" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Lien" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Texte" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Suivant" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Précédent" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Respecter la casse" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Mot _entier" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Expression _régulière" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "S_urligner" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Rechercher" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Options" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Chercher et remplacer" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Rechercher" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Remplacer par" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "Re_mplacer" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Remplacer _tout" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Statistiques" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Paragraphe" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Sélection" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Mots" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Lignes" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Caractères" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Caractères sans les espaces" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Déplacer le texte sur une autre page" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Déplacer" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Déplacer le texte vers..." #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Ajouter un lien vers la nouvelle page" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Ouvrir une nouvelle page" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Nouveau fichier" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interface" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Modification" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Préférences" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Greffons" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Applications" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Utiliser une police personnalisée" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Plus" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigurer" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Obtenir plus de greffons en ligne" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dépendances" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Pas de dépendances" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Échec" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Facultatif" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Auteur" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Actif" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Greffon" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configurer le greffon" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Options du greffon %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Définir l'éditeur de texte par défaut" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Propriétés" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Propriétés du bloc-note" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Changements récents" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Aujourd'hui" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Hier" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Dernière modification" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Pour une recherche avancée, vous pouvez utiliser des opérateurs\n" "comme AND, OR et NOT. Voir l'aide pour plus de détails." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Limiter la recherche à la page courante et les sous-pages" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Résultat" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Serveur web" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Serveur non-démarré" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Autoriser l'accès public" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Serveur démarré" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Serveur arrêté" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Modèles" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Parcourir" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Copier le modèle" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Sélectionner un fichier" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Tout _déplier" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "Tout _replier" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Effacer" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Sélectionner un dossier" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Sélectionner une image" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Haut>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Panneau latéral gauche" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Panneau latéral droit" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Panneau inférieur" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Panneau supérieur" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "En haut à gauche" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "En bas à gauche" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "En haut à droite" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "En bas à droite" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Lors du rapport sur ce bogue, veuillez inclure\n" "l'information de la boîte de texte ci-dessous" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Tous les fichiers" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Images" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Fichier de log" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Le fichier existe" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Un fichier portant le nom <b>\"%s\"</b> existe déjà.\n" "Vous pouvez utiliser un autre nom ou écraser le fichier existant." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nom du fichier" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Parcourir" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Écraser" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Impossible de trouver le fichier ou le dossier de ce bloc-notes" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Merci de sélectionner un bloc-notes" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Impossible de trouver le bloc-note : %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Une destination est nécessaire pour l'export" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Le dossier d'export existe et n'est pas vide, utiliser \"--overwrite\" pour " "forcer l'export" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Le fichier d'export existe, utiliser \"--overwrite\" pour forcer l'export" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Un fichier de destination est nécessaire pour l'export MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" "Un dossier de destination est nécessaire pour exporter tout le bloc-notes" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Le nom de page indiqué n'est pas valide\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nom de page invalide « %s »" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "La mise à jour de l'index est encore en cours pour\n" "l'exécution d'une opération qui nécessite l'index.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Ne peut pas modifier la page: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Mot clé interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Page d'accueil" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Racine du document" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Inconnu>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Erreur dans %(file)s à la ligne %(line)i près de \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Arithmétique" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Ce greffon permet d'intégrer des calculs arithmétiques dans Zim.\n" "Il est basé sur le module arithmétique suivant:\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Arithmétique" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Inconnu" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Type" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Taille" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Modifié" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Déplacer ici" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Copier ici" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Annuler" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Navigateur de fichiers liés" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" "Ce greffon affiche le dossier des pièces attachées sous\n" "forme d'une icône au bas du panneau.\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Position dans la fenêtre" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Fichiers liés" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Afficher la navigateur de pièces attachées" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Pièce jointe" msgstr[1] "%i _Pièces jointes" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Panneau de rétroliens" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon ajoute une icône supplémentaire affichant une liste\n" "des pages liées à la page courante.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Rétroliens" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Aperçu" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Une erreur est survenue lors de la génération de l'image.\n" "Voulez-vous tout de même sauvegarder le texte source ?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "Barre de marque-pages" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\tCe greffon fournit une barre de marque-pages.\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "Enregitsrer les marque-pages" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "Ajouter un nouveau marque-page en début de barre" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "Ajouter un marque-page" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "Marque-pages" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "Voulez-vous supprimer tous les marque-pages ?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "Montrer le nom de la page en entier" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "Nouveau nom" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "Revenir au nom original" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "Supprimer" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "Tout supprimer" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "Ouvrir dans une nouvelle fenêtre" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "Associer à la page actuelle" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Journal" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Ce greffon transforme une section d'un bloc-note en journal\n" "avec une page par jour, semaine ou mois.\n" "Il ajoute aussi un calendrier permettant d'accéder à ces pages.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Jour" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Semaine" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Mois" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Année" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "" "Afficher le calendrier dans un panneau latéral au lieu d'une boîte de " "dialogue" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Utiliser une page pour chacun" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Déplier la page du journal lorsque l'index est affiché" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Aujour_d'hui" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Calen_drier" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Afficher le calendrier" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Agenda" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "Au_jourd'hui" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Insérer un diagramme" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon fournit un éditeur de diagrammes basé sur GraphViz.\n" "\n" "C'est un greffon de base livré avec Zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gramme" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Insérer un diagramme" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Editer le diagramme" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Edition sans distraction" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Ce plugin permet de transformer Zim en\n" "\"éditeur sans distraction\".\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Masquer la barre de menus en mode plein écran" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Masquer la barre d'outils en mode plein écran" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Masquer la barre de chemin en mode plein écran" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Masquer la barre d'état en mode plein écran" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Largeur maximale de page" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Marges verticales" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Couleur de fond du texte" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Couleur du texte" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Couleur de fond de l'écran" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Insérer Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon fournit un éditeur de diagrammes pour zim, basé sur Ditaa.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Editer Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Insérer une équation" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon fournit un éditeur d'équations basé sur latex.\n" "\n" "C'est un greffon de base livré avec Zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "E_quation" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Modifier l'équation" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Insérer un graphe Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Ce greffon fournit un éditeur de graphe pour zim basé sur Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Editer le graphe Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Insérer un graphe GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Ce greffon fournit un éditeur de graphes pour Zim basé sur GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Editer le graphe GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "La calculatrice en ligne n'a pas pu\n" "évaluer l'expression au curseur." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Calculatrice en ligne" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon vous permet d'évaluer rapidement les\n" "expressions mathématiques simple dans zim.\n" "C'est un greffon de base livré avec zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Ne peut pas analyser l'expression" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Évalue expression _mathématique" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Insérer un symbole" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon ajoute la boîte de dialogue « Insérer un symbole »\n" "et permet une mise en forme automatique des caractères\n" "typographiques.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbole..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Tri de ligne" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Ce greffon trie les lignes sélectionnées par ordre alphabétique.\n" "Si la liste est déjà triée, elle le sera de nouveau en sens inverse\n" "(A-Z vers Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Trier les lignes" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Veuillez sélectionner d'abord plus qu'une ligne." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Carte des liens" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon fournit une représentation graphique\n" "des liens entre les pages du bloc-notes.\n" "C'est une sorte de « carte des idées » (ou \"mind map\").\n" "\n" "C'est un greffon de base livré avec Zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Afficher la carte des liens" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Imprimer vers le navigateur" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon permet de contourner l'absence de fonctionnalités\n" "d'impression dans zim. Il exporte la page courante en HTML\n" "et ouvre un navigateur web. Si celui-ci a la possibilité\n" "d'imprimer, il enverra vos données à l'imprimante en\n" "deux étapes.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Imprimer vers le navigateur" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Note rapide" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon fournit une boîte de dialogue pour ajouter rapidement\n" "du texte ou le contenu du presse-papier dans une page zim.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Note rapide..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Section de la page" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Créer une nouvelle page pour chaque note" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Titre" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Ouvrir la _Page" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Abandonner la note ?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Insérer une partition" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon fournit un éditeur de partition musicale basé sur GNU Lilypond.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "En-tête d'inclusion commun" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Pied de page d'inclusion commun" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "S_core" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Editer la partition" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Insérer une capture d'écran" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon permet de prendre une capture d'écran et de\n" "l'insérer directement dans une page zim.\n" "\n" "C'est un greffon de base livré avec zim\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Commande de capture d'écran" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Capture d'écran..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Capturer tout l'écran" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Sélectionner une fenêtre ou une zone" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Délai" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "secondes" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Une erreur est survenue lors de l'exécution de \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Insérer un diagramme de séquence" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Ce greffon fournit un éditeur de diagramme de séquence basé sur seqdiag.\n" "Il facilite l'édition de diagrammes de séquences.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Diagramme de séquences" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Editer le diagramme de séquence" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Visualiseur de source" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Ce greffon permet d'insérer des 'blocs de code' dans la page. Ces blocs\n" "seront portés par un widget avec coloration syntaxique, numéro de ligne " "etc.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Indentation automatique" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Touche Accueil" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Mettre en surbrillance la ligne actuelle" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Afficher la marge de droite" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Position de la marge de droite" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Largeur des tabulations" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Bloc de code" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Insérer un bloc de code" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Syntaxe" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Afficher les numéros de ligne" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Correcteur d'orthographe" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ajoute le soutien de vérification d'orthographe basée sur gtkspell.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Vérifier l'_orthographe" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Impossible de charger le correcteur orthographique" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Cela peut signifier que vous n'avez pas le bon\n" "dictionnaire installé." #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "Gauche" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Centré" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "Droite" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Non spécifiée" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Éditeur de tableaux" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "Avec ce greffon, vous pouvez insérer un tableau dans une page wiki. Les " "tableaus seront représentés par \n" "un composant GTK TreeView. Ils pourront être exporté en différents formats " "(HYML/LaTex par exemple).\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "Avec des lignes" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "Pas de grille" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "Lignes horizontales" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "Lignes verticales" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Afficher la barre d'outils d'aide" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Grille" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Tableau" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Ajouter une ligne" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Supprimer la ligne" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Cloner la ligne" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "Ligne vers le haut" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "Ligne vers le bas" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Modifier les colonnes" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Afficher l'aide" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Supprimer la ligne" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Ouvrir le lien de la cellule" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "Le tableau doit contenir au moins une ligne.\n" "Suppression annulée." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Sélectionner une ligne avant d'appuyer sur le bouton." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Insère un tableau" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Modifier le tableau" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Gérer les colonnes du tableau" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Colonne 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "Retour à la ligne\n" "Automatique" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Alignement" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Ajouter une colonne" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Supprimer la colonne" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Déplacer la colonne vers la droite" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Déplacer la colonne vers la gauche" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Un tableau doit avoir au moins une colonne" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Table des Matières" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon ajoute un objet supplémentaire affichant une\n" "table des matières de la page courante.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" "Afficher la table des matières sous forme d'objet flottant au lieu d'un " "panneau latéral" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Afficher le titre de la page dans la table des matières" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Contenu" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Minimiser" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Promouvoir" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Étiquettes" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Ce greffon fournit un index de pages filtré par les étiquettes " "sélectionnées\n" "dans une liste.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Afficher l'intégralité du nom de la page" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Trier les pages par étiquette" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "sans étiquette" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Trier alphabétiquement" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Liste des tâches" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon ajoute une boite de dialogue listant toutes \n" "les taĉhes en cours dans le bloc-notes. Ces tâches peuvent\n" "être soit des cases à cocher, soit des lignes marquées par un\n" "mot-clé comme « TODO » ou « FIXME ».\n" "\n" "C'est un greffon de base livré avec zim\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Considérer les cases à cocher comme des tâches" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Transformer le nom de la page en tags pour les items de tache" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" "Date due implicite pour les items de tâches dans les pages calendrier" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "Marquer avant le fin de semaine les tâches dû le lundi ou mardi" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Labels marquant les tâches" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Label pour la tâche suivante" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Etiquettes pour les tâches non-déclenchables" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Sous-page(s) à indexer" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Sous-pages à ignorer" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Le bloc-notes doit être indexé" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Il faut construire l'index, car c'est la première\n" "fois que la liste des tâches est ouverte.\n" "Cela peut durer plusieurs minutes, selon la\n" "taille du bloc-notes. Il ne sera plus\n" "nécessaire la prochaine fois." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtrer" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Afficher uniquement les tâches de type \"case à cocher\"" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i tâche en cours" msgstr[1] "%i tâches en cours" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Toutes les tâches" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Non étiquetté" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Tâche" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Date" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Icône de notification" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon ajoute une icône de notification pour un accès rapide.\n" "\n" "Il dépend de Gtk+, version 2.10 ou supérieure.\n" "\n" "C'est un greffon de base livré avec zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Icône de notification classique,\n" "ne pas utiliser le nouveau type d'icône sous Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Afficher une icône pour chaque bloc-notes" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Note rapide..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Autre..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Bloc-notes" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim, le Wiki de bureau" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Gestion de version" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ce greffon permet de gérer des versions de notebooks.\n" "\n" "Ce greffon soutien les systèmes de gestion de versions Bazaar, Git et " "Mercurial. \n" "\n" "C'est un greffon de base livré avec zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Enregistrer automatiquement des versions à intervalles réguliers" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Version enregistrée automatiquement depuis Zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Enregi_strer la version..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versions..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Il n'y a aucune modification de ce bloc-notes depuis la dernière version " "sauvegardée" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Pas de modifications depuis la dernière version" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Activer la gestion de version ?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "La gestion de versions n'est pas activée pour ce bloc-notes.\n" "Souhaitez-vous l'activer ?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Backend" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Enregistrer la version" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Saisissez un commentaire pour cette version" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Version enregistrée depuis zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versions" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Page" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Voir les _annotations" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Sélectionner une version pour voir les différences entre celle-ci et l'état " "actuel.\n" "Ou sélectionner plusieurs versions pour voir les différences entre elles.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Commentaire" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Restaurer la version" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Afficher les _Changements" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Côte à côte" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Source de la page annotée" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Revenir à la version enregistrée ?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Voulez-vous revenir à la version %(version)s\n" "de la page %(page)s ?\n" "Toutes les modifications effectuées depuis seront perdues !" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Changements" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Journaliser les évènements avec Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Passer les évènements au démon Zeitgeist" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Page Wiki : %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Impossible de trouver le modèle \"%s\"" #~ msgid "Text Editor" #~ msgstr "Éditeur de texte" #~ msgid "Web browser" #~ msgstr "Navigateur web" #~ msgid "Match c_ase" #~ msgstr "Respecter la c_asse" #~ msgid "Output" #~ msgstr "Sortie" #~ msgid "File browser" #~ msgstr "Navigateur de fichiers" #~ msgid "Pages" #~ msgstr "Pages" #~ msgid "Slow file system" #~ msgstr "Système de fichiers lent" #~ msgid "_Filter" #~ msgstr "_Filtrer" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "Email client" #~ msgstr "Client de messagerie" ����������������������������������������������������������������������������������zim-0.65/translations/ca.po�������������������������������������������������������������������������0000664�0001750�0001750�00000254335�12613750113�015574� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Catalan translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-07-30 22:36+0000\n" "Last-Translator: Jaap Karssenberg <jaap.karssenberg@gmail.com>\n" "Language-Team: Catalan <ca@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Per omissió" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "No hi ha cap fitxer %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "No s'ha pogut llegir: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detalls" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Personalitza..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "No s'han trobat aplicacions" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Obre amb «%s»" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nom" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Ordre" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Eines personalitzades" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Podeu configurar eines personalitzades que apareixeran\n" "al menú d'eines i a la barra d'eines o al menús contextuals." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Edita una eina personalitzada" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Descripció" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Icona" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "L'ordre no modifica dades" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Enganxa a la barra d'eines" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exporta" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Actualitzant l'índex" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Exportant el quadern." #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "La carpeta ja existeix i conté informació; si exporteu a aquesta carpeta us " "arrisqueu a sobreescriure alguns fitxers. Voleu continuar?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "El fitxer existeix" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "Aquest fitxer ja existeix./nEl voleu sobreescriure?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Seleccioneu les pàgines a exportar." #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Quader_n complet" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "_Pàgina única" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Pàgina" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Seleccioneu el format d'exportació" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Un altre..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formata" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Plantilla" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Enllaceu els documents des del directori arrel amb la ruta completa" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Enllaç de la pàgina mare envers l'URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Seleccioneu el fitxer de sortida o la carpeta" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Carpeta de sortida" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Pàgina índex" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Fitxer de sortida" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Visua_litza el registre" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Fitxer" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Edita" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Visualitza" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Insereix" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Cerca" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mat" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Eines" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Vés" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "A_juda" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "B_arra d'adreces" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Barra d'eines" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nova pàgina..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "S_ubpàgina nova" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Obre un altre quadern" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Obre una _finestra nova" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importa una pàgina" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Desa" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "_Desa'n una còpia" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xporta" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "En_via a..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Desplaça la pàgina" #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Reanomena la pàgina" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Suprimeix la pàgina" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Propie_tats" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Tanca" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Surt" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Cerca..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "_Cerca els retroenllaços" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copia la _ubicació" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "Pl&antillas" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Preferències" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Refresca" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Obre la _carpeta d'adjunts" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Obre la carpeta de _quaderns" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Obre l'_arrel del document" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Obre la _carpeta del document" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Adjunta un _fitxer" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Adjunta un fitxer extern" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Edita el _codi" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Engega el servidor _web" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Actualitza l'índex" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "_Eines personalitzades" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Precedent" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Tornar a la pàgina anterior" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Següent" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Avençar a la pàgina següent" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Mare" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Vés a la pàgina mare" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Filla" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Vés a la pàgina filla" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Pàgina _precedent a l'índex" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Vés a la pàgina precedent" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Pàgina _següent a l'índex" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Vés a la pàgina següent" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Inici" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Vés a l'inici" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Vés a..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Contingut" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_PMF (FAQ)" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Dreceres de teclat" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Errors" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Quant a" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Barra d'e_stat" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Pantalla completa" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "El quadern es pot _modificar" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Marca el quadern com a modificable" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Cap ni u" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "Pàgines _recents" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historial" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Icones _i text" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Només _icones" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Només _text" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "Icones _grans" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Icones _petites" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Icones _més petites" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Afegeix als menús una línia de tall per arrabassar-los" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "El fitxer (o la carpeta) especificat no existeix.\n" "Comproveu que la ubicació sigui correcta." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "No existeix el fitxer o la carpeta %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Voleu actualitzar el quadern?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Aquest quadern ha estat creat amb una versió més antiga de Zim.\n" "El voleu actualitzar a la versió actual?.\n" "\n" "L'actualització requerirà una mica de temps i pot realitzar alguns canvis\n" "en el quadern. En general és una bona idea fer-ne, abans,\n" "una còpia de seguretat.\n" "\n" "Si no realitzeu l'actualització, algunes funcionalitats\n" "potser no funcionaran correctament." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Actualitzant el quadern" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "S'està actualitzant l'índex. Fins que això acabi, no es pot actualitzar els " "enllaços correctament. Realitzant aquesta acció, podeu trencar enllaços; " "voleu continuar igualment?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Actualitzant els enllaços" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Eliminant els enllaços" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Voleu crear una carpeta?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Aquesta pàgina no té una carpeta per als fitxers adjunts" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Editant fitxer: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Una wiki d'escriptori" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " David Planella https://launchpad.net/~dpm\n" " Giorgio Grappa https://launchpad.net/~j-monteagudo\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Siegfried Gevatter https://launchpad.net/~rainct\n" " animarval https://launchpad.net/~animarval\n" " pataquets https://launchpad.net/~pataquets" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Índex" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "només lectura" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Cerca" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _retroenllaç..." msgstr[1] "%i _retroenllaços..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "No ha estat possible desar la pàgina: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Per continuar, podeu desar una còpia d'aquesta pàgina o descartar\n" "els canvis. Si deseu una còpia, els canvis també seran descartats,\n" "però podreu restaurar la còpia més endavant." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Descarta els canvis" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Desa'n una còpia" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Vés a" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Vés a la pàgina" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nova subpàgina" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Pàgina nova" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Enllaçant un pàgina que no existeix\n" "la creeu automàticament." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Nom de la pàgina" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Plantilla de pàgina" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Aquesta pàgina ja existeix" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Desa'n una còpia" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importa la pàgina" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Fitxers de text" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Desplaça la pàgina" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Desplaça la pàgina \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Actualitza %i pàgina que enllaça aquesta" msgstr[1] "Actualitza %i pàgines que enllacen aquesta" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Reanomena la pàgina" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Reanomena la pàgina \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Actualitza l'encapçalament de la pàgina" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Elimina la pàgina" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Voleu eliminar la pàgina \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "La pàgina \"%s\" i totes les seves\n" "subpàgines seran eliminades." #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Elimina els enllaços de %i pàgina que apunta a aquesta" msgstr[1] "Elimina els enllaços de %i pàgines que apunten a aquesta" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "" msgstr[1] "" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Adjunta un fitxer" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "La pàgina \"%s\" no té cap carpeta per als adjunts" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Insereix imatges com a enllaços" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Quadern" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Obre un quadern" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Quadern per omissió" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Crea un quadern" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Trieu un nom i una carpeta per al quadern" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Carpeta" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Actualitzant l'índex..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Desfés" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Refés" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Talla" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copia" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "Engan_xa" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Elimina" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Canvia la marca 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Canvia la marca 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Edita un enllaç o un objecte..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Elimina un enllaç" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Data i hora..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Imatge..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Llista _numerada" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Text des d'un _fitxer..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Enllaç..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Insereix un enllaç" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Elimina el format" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Troba..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Troba el _següent" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Troba el _precedent" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Substitueix..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Compta els mots..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Mida _normal" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Encapçalat _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Encapçalat 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Encapçalat _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Encapçalat 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Encapçalat _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Encapçalat 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Encapçalat _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Encapçalat 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Encapçalat _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Encapçalat 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Destacat" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Destacat" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Emfasitzat" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Emfasitzat" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Marcat" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Marcat" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Tatxat" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Tatxat" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Subíndex" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "Su_períndex" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "Text _pur" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Text pur" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Empra la tecla <Entra> per seguir els enllaços.\n" "(Si està deshabilitada, podeu emprar <Alt><Entra>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Mostra el cursor fins i tot per a pàgines no editables" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Converteix automàticament en enllaços els mots tipus \"CamelCase\"" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Converteix automàticament en enllaços les rutes a fitxers" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Selecciona automàticament el mot actual en aplicar formats" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Elimina el sagnat amb <Retrocés>\n" "(Si està deshabilitat, pot emprar <Maj><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Canviar el sagnat d'un ítem en una llista també\n" "en modifica els subítems" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Marcar un requadre també en modifica els subítems" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Reformata el marcat de la wiky al vol" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Moure text seleccionat..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Edita propietats" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Edita l'enllaç" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copia l'_enllaç" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copia l'adreça de correu" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Obre la carpeta" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Obre amb..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Obre" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "No hi ha cap plantilla instal·lada" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Insereix la data i l'hora" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendari" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Enllaça la data" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Insereix una imatge" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Adjunta una imatge" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Edita la imatge" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Ubicació" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Enllaça amb" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Ample" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Alçada" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Restaura la mida" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Insereix text des d'un fitxer" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Edita l'enllaç" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Enllaç" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Text" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Següent" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Anterior" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Distingeix majúscules i minúscules" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Paraula completa" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Expressió _regular" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Ressaltat" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Troba" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opcions" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Cerca i reemplaça" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Troba" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Reemplaça per" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Reemplaça" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Substitueix-ho tot" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Comptador de mots" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Paràgraf" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Selecció" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Mots" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Línies" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Caràcters" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Moure text a una altra pàgina" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Mou" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Moure text a" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Preferències" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Extensions" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Empra un tipus de lletra personalitzat" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Més" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigura" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dependències" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Sense dependències" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "D'acord" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Fallada" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Habilitat" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Extensió" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configura l'extensió" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opcions de l'extensió %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Propietats" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Propietats del quadern" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Per fer cerques elaborades, podeu emprar operadors com\n" "AND, OR i NOT. Vegeu la pàgina d'ajuda si voleu més informació." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Puntuació" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "El servidor no s'ha engegat" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Servidor engegat" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Servidor aturat" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Seleccioneu un fitxer" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Seleccioneu una carpeta" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Tots els fitxers" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Imatges" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Fitxer de registre" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nom de fitxer" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "No s'ha trobat el fitxer o la carpeta d'aquest quadern" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "No s'ha trobat el quadern: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "El nom de pàgina introduït no és vàlid.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nom de pàgina invàlid \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "No es pot modificar la pàgina: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Pàgina d'inici" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Document arrel" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Previsualització" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "S'ha produït un error mentre es generava la imatge.\n" "Voleu desar el text font igualment?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Mostra el calendari en el panell lateral, no pas com un diàleg" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Avui" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Calen_dari" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calendari" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Avui" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Insereix un diagrama" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió proporciona un editor de diagrames per a Zim basat en " "GraphViz.\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_grama..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Insereix un diagrama" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Insereix una equació" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió proporciona un editor d'equacions per a Zim basat en " "Latex.\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Edita l'equació" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Insereix un gràfic de GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Aquesta extensió proporciona un editor de gràfics basat en GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Edita gràfic de GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Insereix símbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió afegeix el diàleg 'Insereix un símbol' i permet\n" "el formatat automàtic de caràcters tipogràfics.\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sí_mbol" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mapa d'enllaços" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió afegeix un diàleg amb una representació\n" "gràfica de l'estructura d'enllaços del quadern. Es pot emprar\n" "com una mena de mapa mental que mostra com les pàgines\n" "es relacionen entre elles.\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Mostra el mapa d'enllaços" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Imprimeix al navegador" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió ofereix una solució alternativa la manca\n" "de suport d'impressió en Zim. S'exporta la pàgina actual\n" "a HTML i s'obre en el navegador. Suposant que aquest disposi\n" "de suport d'impressió, això us permetra d'imprimir les\n" "vostres pàgines en dos passos.\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "Im_primeix al navegador" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Anotació ràpida" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió afegeix un diàleg per inserir ràpidament\n" "text (o el contingut del portapapers a una pàgina.\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Anotació ràpida..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Crea una nova pàgina per cada anotació" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Títol" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Insereix captura de pantalla" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Captura de pantalla" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Captura la pantalla completa" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Selecciona una finestra o una regió" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Retard" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "segons" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Corrector ortogràfic" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Afegeix suport de corrector ortogràfic emprant gtkspell\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Verificar l'ortografia" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etiquetes" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Llista de feines" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió afegeix un diàleg que mostra totes les feines\n" "pendents del quadern, sigui caixes sense marcar, sigui llistes\n" "marcades amb les etiquetes \"TODO\" o \"FIXME\".\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Considera totes les caixes com a feines" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Etiquetes que marquen feines" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Cal indexar el quadern" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "És la primera vegada que s'obre la llista de feines;\n" "cal, per tant, reconstruir-ne l'índex. En funció de la\n" "grandària del quadern, això pot trigar alguns minuts.\n" "La pròxima que empreu la llista de feines, això ja\n" "no caldrà." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtre" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i ítem obert" msgstr[1] "%i ítems oberts" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Feina" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Data" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Icona de la safata del sistema" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aquesta extensió afegeix una icona a la safata del sistema\n" "que permet l'accés ràpid.\n" "\n" "Depèn de Gtk+, versió 2.10 o superior\n" "\n" "Aquesta és una extensió bàsica que se subministra amb Zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Icona de notificació clàssica,\n" "no empreu el nou tipus d'icona amb Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Mostra una icona per cada quadern" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "Nota _ràpida..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "Un _altre..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Quaderns" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim, wiki d'escriptori" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Control de versions" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Desa automàticament la versió a intervals regulars" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Versió desada automàticament des de Zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "_Desa la versió..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versions..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "No hi ha canvis en aquest quadern des de la darrera versió desada" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Sense canvis des de la darrera versió" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Voleu activar el control de versions?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "El control de versions no es troba habilitat per a aquest quadern.\n" "Voleu habilitar-lo?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Desa la versió" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Escriviu un comentari per a aquesta versió" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versió desada des de Zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versions" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Pàgina" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Mostra les _anotacions" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Seleccioneu una versió veure els canvis entre aquella i l'actual.\n" "O seleccioneu diverses versions per veure els canvis entre elles.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Comentari" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Restaura la versió" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Mostra els _canvis" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Un a costat de l'altre" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Font de la pàgina anotada" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Voleu restaurar la pàgina a la versió desada?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Voleu tornar a la versió %(version)s\n" "de la pàgina %(page)s ?\n" "\n" "Tots els canvis efectuats des que la vau desar es perdran!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Canvis" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev." #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Email client" #~ msgstr "Client de correu" #~ msgid "Web browser" #~ msgstr "Navegador web" #~ msgid "Text Editor" #~ msgstr "Editor de text" #~ msgid "Pages" #~ msgstr "Pàgines" #~ msgid "File browser" #~ msgstr "Navegador de fitxers" #~ msgid "Slow file system" #~ msgstr "Sistema de fitxers lent" #~ msgid "_Filter" #~ msgstr "_Filtre" #~ msgid "Prio" #~ msgstr "Prioritat" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/gl.po�������������������������������������������������������������������������0000664�0001750�0001750�00000263725�12613750113�015616� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Galician translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-10-01 07:43+0000\n" "Last-Translator: Jaap Karssenberg <jaap.karssenberg@gmail.com>\n" "Language-Team: Galician <gl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Houbo un erro ó executar a aplicación: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "O comando:\n" "%(cmd)s\n" "devolveu un código de saída distinto de cero: %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Erro executandose: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Predeterminado" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Seica atopou un fallo" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Non tal ficheiro: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Non foi posible ler: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" "Esto habitualmente significa que o ficheiro contén caracteres inválidos" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detalles" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "No se pode escribir o arquivo: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "%s arquivos cambiados" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Personalizar…" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Non se atoparon aplicacións" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Abrir con \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Seleccione un aplicativo para abrir as ligazóns \"%s\"" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Seleccione unha aplicación para abrir os arquivos\n" "do tipo \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Configurar aplicacións" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Engadir aplicación" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Predeterminado do sistema" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nome" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Orde" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Facer aplicación por defecto" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Ferramentas personalizadas" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Pode engadir ferramentas personalizadas que aparecerán\n" "no menú e barra de ferramentas, ou no menú de contexto." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Editar a ferramenta personalizada" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Descripción" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Icona" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "O comando non modifica os datos" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Amosar na barra de ferramentas" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Os parámetros seguintes serán sustituídos\n" "no comando cando se execute:\n" "<tt>\n" "<b>%f</b> Un ficheiro temporal cos contidos da páxina\n" "<b>%d</b> O directorio de adxuntos da páxina actual\n" "<b>%s</b> Os contidos da propia páxina (se existe)\n" "<b>%n</b> A ubicación do caderno (ficheiro ou cartafol)\n" "<b>%D</b> O raíz de documentos (se existe)\n" "<b>%t</b> O texto seleccionado ou a palabra baixo o cursor\n" "<b>%T</b> O texto seleccionado incluindo o formato wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportar" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Actualizando índice" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Exportando caderno" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "O cartafol xa existe: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "O cartafol xa existe e non está baleiro: exportar a este cartafol pode " "sobreescribir os ficheiros existentes. ¿Quere continuar?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "O ficheiro xa existe" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Este ficheiro xa existe.\n" "¿Desexa escribir por enriba?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Seleccione as páxinas a exportar" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Caderno _completo" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Só unha _páxina" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Páxina" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Seleccione o formato de exportación" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Outro..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formato" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Modelo" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Enlazar ficheiros baixo o raíz de documentos coa ruta completa" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Mapear o raíz de documentos cunha URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Seleccione o ficheiro ou cartafol de saída" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Cartafol de saída" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Páxina de índice" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Ficheiro de saída" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Ver _rexistro" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Ficheiro" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Editar" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Ver" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Inserir" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Buscar" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mato" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Ferramentas" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Ir" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Axuda" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Barra de _rutas" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Barra de ferramen_tas" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nova páxina" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nova _subpáxina" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "Abrir outro _caderno" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Abrir nunha _xanela nova" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importar páxina" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Gardar" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Gardar unha _copia" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xportar…" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Enviar a…" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Mover páxina" #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Renomear páxina" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Borrar páxina" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Propie_dades" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Pechar" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Saír" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Buscar" #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Buscar nos enlaces _inversos" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Cambios recentes..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copiar _localización" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Modelos" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Pr_eferencias" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "A_ctualizar" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Abrir o cartafol de adx_untos" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Abrir o cartafol do ca_derno" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Abrir o raí_z de documentos" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Abrir o cartafol de docu_mentos" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Ad_xuntar ficheiro" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Adxuntar un ficheiro ex_terno" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Editar f_onte" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Lanzar _servidor web" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Actualizar índice" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Ferramentas _personalizadas" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Atrás" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Ir á páxina anterior" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Adiante" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Ir á seguinte páxina" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Pai" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Ir á páxina superior" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Inferior" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Ir á páxina inferior" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Anterior no índice" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Ir á páxina anterior" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Seguinte no índice" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Ir á páxina seguinte" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Inicio" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Ir ó inicio" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Sal_tar a ..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Contidos" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_Preguntas máis frecuentes" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "Atallos de _teclado" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "Fallos" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Acerca de" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "Todos os p_aneis" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Amosar todos os paneis" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Barra de e_stado" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "Paneis laterais" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Amosar paneis laterais" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Pantalla Completa" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "O cartafol é _editable" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Modificar o estado de \"editable\" do caderno" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Ningún" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "Páxinas _recentes" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Páxinas _cambiadas recentemente" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historial" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Iconas e _texto" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Só _iconas" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "_Só texto" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "Iconas _grandes" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Iconas _pequenas" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Iconas _diminutas" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Engadir barras para desprender os menús" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Use <Ctrl><Espacio> para cambiar ó panel lateral" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Eliminar enlaces cando se elimien as páxinas" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Lembrar a última posición do cursor cando se abra unha páxina" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "O ficheiro ou cartafol que indicou non existe.\n" "Por favor, comprobe se a ruta é correcta." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Non existe o ficheiro ou cartafol: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "¿Actualizar o caderno?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Este caderno foi creado cunha versión vella de zim.\n" "¿Quere actualizalo á derradeira versión?\n" "\n" "A actualización levará un tempo e pode facer varios cambios\n" "ó caderno. En xeral recoméndase facer unha copia de seguridade\n" "antes de facer isto.\n" "\n" "Se escolle non actualizar agora, pode que algunhas características\n" "non funcionen como deben." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Actualizando o caderno" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "O índice todavía está actualizándose. Ata que esto remate, as ligazóns non " "poden actualizarse correctamente. Continuar pode romper as ligazóns: " "¿confirma que quere seguir?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Actualizando ligazóns" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Eliminando ligazóns" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "¿Crear o cartafol?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "O cartafol \"%s\" aínda non existe.\n" "Quere creala?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Non foi posible lanzar a aplicación: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Esta páxina non ten un cartafol de adxuntos" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Editando ficheiro: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Está editando un ficheiro cunha aplicación externa. Pode pechar esta xanela " "cando remate." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Un wiki de escritorio" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Manuel Xosé Lemos https://launchpad.net/~mxlemos\n" " Miguel Anxo Bouzada https://launchpad.net/~mbouzada\n" " Roberto Suarez https://launchpad.net/~robe-allenta\n" " Xurxo Fresco https://launchpad.net/~xurxof\n" " marisma https://launchpad.net/~mariamarcp" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Índice" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Só lectura" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Buscar" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Procurar páxinas" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i Ligazón _inversa" msgstr[1] "%i Ligazóns _inversas" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Non foi posible gardar a páxina: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Para continuar pode gardar unha copia desta páxina ou\n" "rexeitar as modificacións. Se garda unha copia, \n" "as modificacións tamén serán rexeitadas, pero pode restaurala máis tarde." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Rexeitar as modificacións" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Gardar unha copia" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Ir a" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Ir a Páxina" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Subpáxina nova" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Páxina nova" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Por favor, lembre que ligar a unha páxina que non existe\n" "creará a páxina automáticamente." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Nome da páxina" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Modelo da páxina" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "A páxina xa existe" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Gardar unha copia" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importar páxina" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Ficheiros de texto" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Mover páxina" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Mover a páxina \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Actualizar %i páxina que enlaza a esta páxina" msgstr[1] "Actualizar %i páxinas que enlazan a esta páxina" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Renomear páxina" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Renomear páxina \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Actualizar o título do texto da páxina" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Eliminar a páxina" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "¿Eliminar a páxina \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "A páxina \"%s\" e todas as súas\n" "subpáxinas e adxuntos serán eliminados." #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "¿Eliminar ligazóns desde %i páxina que enlaza a esta?" msgstr[1] "¿Eliminar ligazóns desde %i páxinas que enlazan a esta?" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i ficheiro será eliminado" msgstr[1] "%i ficheiros serán eliminados" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Adxuntar ficheiro" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "A páxina \"%s\" non ten unha carpeta de adxuntos" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Insertar imaxes como ligazóns" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Caderno de Notas" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Abrir caderno" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Caderno de notas predeterminado" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Engadir caderno" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Por favor, escolla un nome e un cartafol para o caderno." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Cartafol" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Actualizando índice ..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Desfacer" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Refacer" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Cor_tar" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copiar" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Pegar" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Eliminar" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Editar ligazón ou obxecto" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Eliminar a Ligazón" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Data e hora" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Imaxe" #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Lista de _puntos" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Lista _Numerada" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Lista de _caixas de verificación" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Texto desde _ficheiro" #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Ligazón…" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Inserir unha ligazón" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Limpar formatos" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Buscar…" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Buscar _seguinte" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Buscar _anterior" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Substituír…" #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Contar palabras" #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Ampliar" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Reduc_ir" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Tamaño _normal" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Novo _Adxunto" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Cabeceira _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Cabeceira 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Cabeceira _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Cabeceira 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Cabeceira _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Cabeceira 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Cabeceira _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Cabeceira 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Cabeceira _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Cabeceira 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Negrita" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Negrita" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Énfase" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Énfase" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Marcar" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Marcar" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Tachar" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Tachado" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Subíndice" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "Su_períndice" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "Texto _sen formato" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Literal" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Use a tecla <Enter> para seguir ligazóns\n" "(se está deshabilitado, sempre pode usar <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Amosar o cursor tamén nas páxinas que non poden ser editadas" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Convertir automáticamente as palabras \"CamelCase\" en ligazóns" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Convertir automáticamente as rutas a ficheiros en ligazóns" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" "Seleccionar automáticamente a palabra actual cando se aplique un formato" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Eliminar indentación con <Backspace>\n" "(se está deshabilitado, sempre pode usar <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Eliminar ou aplicar indentación ó elemento dunha lista tamén cambia os " "elementos inferiores" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Aplicar o formato wiki a medida que se escribe" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Formato por defecto para o texto copiado ó portapapeis" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Carpeta con modelos para ficheiros adxuntos" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Non está definido tal wiki: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Copiar _Como..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Mover Texto Seleccionado" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Editar propiedades" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Editar ligazón" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copiar a _ligazón" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copiar o enderezo de correo-e" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Abrir cartafol" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Abrir con..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Abrir" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Non hai ningún modelo instalado" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "A carpeta\n" "%s\n" "non existe aínda.\n" "Desexa creala agora?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "_Insertar data e hora" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendario" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Ligar á data" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Inserir unha imaxe" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Adxuntar a imaxe primeiro" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Tipo de ficheiro non soportado: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Editar imaxe" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Ubicación" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Enlazar a" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Anchura" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Altura" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Restaurar tamaño" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Insertar texto desde un ficheiro" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Editar a ligazón" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Ligazón" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Texto" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Seguinte" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Anterior" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "_Distinguir maiúsculas/minúsculas" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Palabras _enteiras" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Expresión _regular" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "Resaltado" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Buscar" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opcións" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Buscar e substituír" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Palabras a atopar" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Substituír por" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Substituír" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Substituír _todo" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Contador de palabras" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Parágrafo" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Selección" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Palabras" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Liñas" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Caracteres" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Mover o Texto a Outra Páxina" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Mover" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Mover o texto a" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Deixar ligazón á nova páxina" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Abir unha nova páxina" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Ficheiro novo" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interface" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Editando" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Preferencias" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Engadidos" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Usar un tipo de letra personalizado" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Máis" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigurar" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dependencias" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Sen dependencias" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Aceptar" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Produciuse un erro" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Opcional" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Activado" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Complemento" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configurar o complemento" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opcións para o complemento %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Propiedades" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Propiedades do caderno de notas" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Cambios recentes" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Hoxe" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Onte" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Modificado por última vez" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Para a búsqueda avanzada pode usar operadores como\n" "AND, OR e NOT. Mire a páxina de axuda para saber máis." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Puntuación" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Servidor web" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "O servidor non está activo" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Porto" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "O servidor está activo" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "O servidor está parado" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Modelos" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Examinar" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Copiar modelo" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Escoller un ficheiro" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Contraer todo" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Limpar" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Escoller un cartafol" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Seleccionar unha imaxe" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Tope>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Panel lateral esquerdo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Panel lateral dereito" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Panel inferior" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "PAnel superior" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Arriba á esquerda" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Abaixo á esquerda" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Arriba á dereita" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Abaixo á dereita" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Cando informe dun fallo por favor inclúa\n" "a información da caixa de texto a continuación" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Todos os ficheiros" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Imaxes" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Ficheiro de rexistro" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "O ficheiro xa existe" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Xa existe un un ficheiro co nome <b>\"%s\"</b>.\n" "Pode usar outro nome ou sobreescribir o ficheiro existente." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nome de ficheiro" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Explorar" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Sobrescribir" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Non se atopou o ficheiro ou cartafol para este caderno" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Non se atopou o caderno: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "O nome dado para a páxina non é correcto.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nome de páxina incorrecto \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "O índice está aínda ocupado coa actualización mentras\n" "tentamos facer unha operación que necesita o índice.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Non se pode modificar a páxina: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Palabra clave de Interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Páxina de inicio" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Documento pai" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Perfil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmética" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmética" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Tamaño" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Modificado" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Navegador de Adxuntos" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Posición da ventá" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Adxuntos" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Amosa o navegador adxunto" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "Vista _previa" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Produciuse un erro ó xerar a imaxe.\n" "¿Quere gardar o fonte do texto de todos modos?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Día" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Semana" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Mes" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Ano" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Amosar calendario no panel lateral en lugar de como xanela" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Usar unha páxina para cada un" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Hoxe" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Calendario" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d de %B de %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calendario" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Hoxe" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Insertar diagrama" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento proporciona un editor de diagramas baseado en GraphViz.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_grama" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Insertar diagrama" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Insertar ecuación" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento proporciona un editor de ecuaciones para zim basado en " "LaTeX.\n" "\n" "É un complemento básico distribuído con zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Editar ecuación" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Insertar gráfico de Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Este complemento proporciona un editor de gráficos para zim baseado en " "Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Editar Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Insertar un gráfico GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Este complemento proporciona un editor de gráficos para zim baseado en GNU " "R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Editar gráfico de GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "O complemento de calculadora integrada de zim non\n" "puido evaluar a expresión ó pé do cursor." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Calculadora integrada" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento permite evaluar expresións\n" "matemáticas sinxelas en zim.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Non foi posible analizar a expresión" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Evaluar _matemáticas" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Insertar símbolo" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento engade á xanela de 'Insertar símbolo', e\n" "permite dar formato ós caracteres tipográficos.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sí_mbolo" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Ordeador de liñas" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Este plugin ordea as liñas seleccionadas en orden alfabético.\n" "Se a lista xa está ordeada, a orde será revertida (A-Z pasa a Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Ordear liñas" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Por favor, seleccione primeiro máis dunha liña de texto." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mapa de ligazóns" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento proporciona unha xanela cunha representación\n" "gráfica da estructura de ligazóns do caderno. Pode ser usada de xeito\n" "parecido a un \"mapa mental\", amosando cómo se relacionan as páxinas.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Amosar mapa de ligazóns" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Imprimir ó navegador" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento proporciona un amaño para a falta\n" "de soporte de impresión en zim. Exporta a páxina actual\n" "a html é lanza un navegador. Asumindo que o navegador\n" "ten soporte de impresión, isto enviará os seus datos á\n" "impresora en dous pasos.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Imprimir ó navegador" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Nota rápida" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento engade unha xanela para escribir rápidamente\n" "unha nota ou soltar o contido do portapapeis nunha páxina de zim.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Nota rápida" #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Crear unha nova páxina para cada nota" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Título" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Abrir _páxina" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Insertar captura de pantalla" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este complemento permite sacar unha captura de pantalla e insertala\n" "nunha páxina de zim.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Captura de pantalla..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Capturar a pantalla completa" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Seleccionar xanela ou rexión" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Retraso" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "segundos" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Produciuse un erro ó executar \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Corrector ortográfico" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Engade soporte de comprobación de ortografía usando gtkspell.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Comprobar _ortografía" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Isto podería significar que non ten os diccionarios\n" "apropiados instalados no sistema." #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etiquetas" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Este complemento proporciona un índice filtrado mediante a selección de " "etiquetas nunha nube.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Ordear páxinas por etiquetas" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "Sen etiquetar" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Lista de tarefas" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Trocar os nomes de páxina en etiquetas para os elementos de tarefas" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Cómpre indexar o caderno" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Esta é a primeira vez a lista de tarefas é aberta.\n" "Polo tanto, cómpre reconstruir o índice.\n" "Dependendo do tamaño do caderno, esto pode levar\n" "ata varios minutos. A próxima vez que use a lista de tarefas\n" "esto non fará falta." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtrar" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i elemento aberto" msgstr[1] "%i elementos abertos" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Todas as tarefas" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Tarefa" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Data" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Icona na bandexa do sistema" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Este elemento engade unha icona na bandexa do sistema para acceder " "rápidamente.\n" "\n" "Este complemento require a versión de Gtk+ 2.10 ou superior.\n" "\n" "Este é un complemento básico distribuído con zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Icona clásica,\n" "non usar o novo estilo de iconas de estado de Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Amosar unha icona distinta para cada caderno" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "Nota _rápida" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Outro..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Cadernos de notas" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Wiki persoal Zim" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Control de versións" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Gardar automáticamente unha versión a intervalos regulares" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Versión gardada automáticamente desde zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "_Gardar versión" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "Versións" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Non hai cambios neste caderno desde que a última versión foi gardada" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Non hai cambios desde a última versión" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "¿Activar o sistema de control de versións?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "O sistema de control de versións non está activado para este caderno.\n" "¿Desexa activalo?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Gardar versión" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Por favor, introduza un comentario para esta versión" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versión gardada desde zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versións" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Páxina" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Ver" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Seleccione unha versión para ver os cambios entre esa versión e o estado\n" "actual. Ou seleccione varias versións para ver os cambios entre elas.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Comentario" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Restaurar versión" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "_Amosar cambios" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Lado a lado" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Páxina de código fonte con anotacións" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "¿Restaurar a páxina á versión gardada?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "¿Desexa restaurar a páxina: %(page)s\n" "á versión gardada: %(version)s?\n" "\n" "¡Perderanse tódolos cambios desde a última versión gardada!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Cambios" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Revisión" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "File browser" #~ msgstr "Navegador de ficheiros" #~ msgid "Web browser" #~ msgstr "Navegador web" #~ msgid "Pages" #~ msgstr "Páxinas" #~ msgid "Output" #~ msgstr "Saída" #~ msgid "Match c_ase" #~ msgstr "_Distinguir maiúsculas e minúsculas" #~ msgid "Prio" #~ msgstr "Prioridade" #~ msgid "_Filter" #~ msgstr "_Filtrar" #~ msgid "Slow file system" #~ msgstr "Sistema de ficheiros lento" #~ msgid "Text Editor" #~ msgstr "Editor de texto" #~ msgid "Email client" #~ msgstr "Programa de correo-e" �������������������������������������������zim-0.65/translations/hu.po�������������������������������������������������������������������������0000664�0001750�0001750�00000302054�12613750113�015615� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: Zim 0.48\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-11 15:39+0000\n" "Last-Translator: krisztianmukli <krisztianmukli@mukli.hu>\n" "Language-Team: Zim <msv@titok.info>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" "Language: hu\n" "X-Poedit-Bookmarks: 566,-1,-1,-1,-1,-1,-1,-1,-1,-1\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Nem sikerült elindítani a(z) \"%s\" alkalmazást" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "kilépéskor hibakódot adott vissza: %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Indítás sikertelen: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Alapértelmezett" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "naptár:hét_eleje:0" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Úgy tűnik találtál egy hibát" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Nincs ilyen fájl: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Nem sikerült beolvasni: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" "Ennek oka általában az, hogy a fájl nem megengedett karaktereket tartalmaz" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Részletek" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Fájl nem írható: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Az alábbi fájl megváltozott időközben: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Testreszabás..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Nem találtam alkalmazásokat" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Megnyitás ezzel: \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Alkalmazás beállítása \"%s\" hivatkozás megnyitásához" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Olyan alkalmazások beállítása, amik képesek megnyitni\n" "egy \"%s'\" típusú hivatkozást" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Alkalmazások beállítása" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Alkalmazás hozzáadása" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Alapértelmezett" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Név" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Parancs" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Legyen alapértelmezett alkalmazás" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Nem található a \"%s\" futtatható állomány" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Egyedi eszközök" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Szerkesztheted az eszközöket, amik megjelenhetnek\n" "az Eszközök menü alatt, és az eszköztáron, vagy a helyi menüben." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Egyéni eszközök szerkesztése" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Megjegyzés" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikon" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "A parancs nem módosítja az adatokat" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Az aktuális kiválasztás cseréje a kimenetre" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Látsszon az eszköztáron" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Az alábbi paraméterek helyettesíthetőek be\n" "a parancs futtatásakor:\n" "<tt>\n" "<b>%f</b> egy ideiglenes fájl az aktuális oldal forrásszövegével\n" "<b>%d</b> az aktuális oldalhoz tartozó csatolmánymappa\n" "<b>%s</b> az aktuális oldal forrásfájlja (ha van)\n" "<b>%n</b> a munkafüzet helye (fálj vagy mappa)\n" "<b>%D</b> a dokumentum gyökere (ha van)\n" "<b>%t</b> a kijelölt szöveg, vagy a kurzor alatti szó\n" "<b>%T</b> a kijelölt szöveg wiki formázással\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportálás" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Index frissítése" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Jegyzetek exportálása" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Létező mappa: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "A mappa már létezik, és nem üres. Az exportálás visszavonhatatlanul " "felülírhat fájlokat! Mégis folytatod?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Fájl létezik" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Ez a fájl már létezik!\n" "Szeretnéd felülírni?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Válaszd ki az exportálandó fájlokat" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Adatkiegészítés" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Önálló _oldal" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Oldal" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Aloldalakkal együtt" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Válassz exportálási formátumot" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Más…" #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formátum" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Minta" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Fájl hivatkozások tartalmazzák a teljes elérési utat" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "A dokumentum gyökerének hozzáadása az URL-hoz" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "További sablonok letöltése" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Válaszd ki a kimeneti fájlt vagy mappát" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Olalanként külön fájlba exportálás" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Összes oldal exportálása egy fájlba" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Kimeneti mappa" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Index lap" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Kimeneti fájl" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" "%(n_error)i hibát és %(n_warning)i figyelmeztetést észleltünk, lásd a " "logokban" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i hiba történt, lásd a logokban" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i figyelmeztetés történt, lásd a logokban" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Az exportálás kész" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "_Logok megtekintése" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Fájl" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "S_zerkesztés" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Nézet" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Beszúrás" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Keresés" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_Formátum" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Eszközök" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Ugrás" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Súgó" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "_Helyek" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Eszköztár" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "Új _oldal..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Új aloldal..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "Jegyzetfüzet _váltás..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Megnyitás új _ablakban" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "Lap _importálása..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Mentés" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Más_olat mentés" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Exportálás..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Küldés le_vélben..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "Lap át_helyezése..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Lap át_nevezése..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "Lap tö_rlése" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Tulajdonságok" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "Jegyzetfüzet _bezárása" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Kilépés" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "Általáno_s keresés..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "_Előzmény keresés..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Legfrissebb változások..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "He_ly másolása" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Sablonok" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Beállítások" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Frissítés" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "_Lap mappája" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Jegyzetfüzet mappája" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "_Dokumentum gyökere" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "_Dokumentum mappája" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Fájl _csatolása" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Külső fájlok csatolása" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "_Forrás szerkeszése" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "_Web szerver indítása" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Index frissítése" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Egyéni eszközök" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "Ugrás _vissza" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Ugrás egy lapot vissza" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "Ugrás _előre" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Ugrás egy lapot előre" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "Egy _szintet vissza" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Ugrás a felette lévő lapra" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "Egy szintet _lejjebb" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Ugrás az alatta lévő lapra" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Előző inde_xre" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Ugrás az előző lapra" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Következő in_dexre" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Ugrás a következő lapra" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Kezdőlapra" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Ugrás a kezdőlapra" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Ugrás lapra..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Tartalom" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_GYIK" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Billentyűhozzárendelések" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Hibák" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Készítő" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Minden panel" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Minden panel megmutatása" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Státuszsor" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Oldalpanel" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Oldalpanelek megmutatása" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "Teljes képernyő" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Szerkeszthető lapok" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Tedd a jegyzetet szerkeszthetővé" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Nincs" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Utoljára megnyitott" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Legutóbb _módosított oldalak" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Előzmények" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Oldal hierarchia" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "_Ikon és szöveg" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "_Csak ikon" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Csak _szöveg" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Nagy ikonok" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Kis ikonok" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Mini ikonok" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Letéphető menük" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "<Ctrl><Szóköz> visz át az oldalpanelre" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Linkek eltávolítása oldalak törlése esetén" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" "A kurzor visszaállítása a legutóbbi helyzetébe egy oldal megnyitásakor" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "A megadott fájl vagy mappa nem létezik.\n" "Ellenőrizd az elérési út helyességét!" #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Nincs ilyen fájl vagy mappa: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Az oldalon nem mentett változások találhatóak" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Frissíted az jegyzetfüzetet?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Ez az jegyzetfüzet a Zim egy korábbi verziójával készült.\n" "Szeretnéd felfrissíteni a jelenlegi verzióra?\n" "\n" "A frissítés eltarthat egy darabig, és változásokat hajthat végre\n" "az adatbázisban. Célszerű egy mentést készíteni az adatbázisról\n" "a művelet megkezdése előtt.\n" "\n" "Ha nem frissíted fel az adatbázist, akkor néhány funkció\n" "esetleg nem fog megfelelően működni." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Jegyzet felfrissítése" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Az indexek frissítése még folyamatban van. Amíg nem fejeződik be, a " "hivatkozás nem tud megfelelően frissülni. Ha folytatod az hibás " "hivatkozásokat okozhat. Ennek ellenére folytatod?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Hivatkozás frissítése" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Hivatkozások törlése" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Létrehozzam a mappát?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "A \"%s\" mappa nem létezik.\n" "Létrehozzam most?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "%s nem nyitható meg" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Ennek a lapnak nincs könyvtára a csatolmányokhoz" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "%s szerkesztése" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Egy fájlt szerkesztesz egy külső alkalmazással. Ezt az ablakot akkor zárd " "be, amikor kész vagy." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Egy asztali wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "fordító-hitelesség\n" "\n" "Launchpad Contributions:\n" " István Papp https://launchpad.net/~istpapp\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Marton S. Viktor https://launchpad.net/~msv-titok\n" " Robert Roth https://launchpad.net/~evfool\n" " SanskritFritz https://launchpad.net/~sanskritfritz+launchpad\n" " bruce https://launchpad.net/~mano155\n" " krisztianmukli https://launchpad.net/~krisztianmukli\n" " sipizoli https://launchpad.net/~zoltan-siposs" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Tárgymutató" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "csak olvasható" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Keresés" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Keresés az oldalakban..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _visszacsatolás..." msgstr[1] "%i _visszacsatolás..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Lap nem menthető: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Ahhoz, hogy folytasd a munkát, vagy elmented a fájlt egy másolatba,\n" "vagy eldobod a változásokat. Ha a másolat készítést választod,\n" "a változások akkor is elvesznek, de a másolatből később visszaállíthatod." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "Változások _eldobása" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Másolat mentése" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Ugrás" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Ugrás lapra" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Új alábontás" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Új lap" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "A hivatkozások által mutatott nem létező lapok\n" "jöjjenek létre automatikusan." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Lap neve" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Oldalsablon" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Lap már létezik" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Másolat mentése" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Lap importálása" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Szöveg fájlok" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Lap áthelyezése" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "\"%s\" lap áthelyezése" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "%i db erre a lapra mutató hivatkozást frissítettem" msgstr[1] "%i db erre a lapra mutató hivatkozást frissítettem" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Szekció" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Lap átnevezése" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "\"%s\" lap átnevezése" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Frissítsd az aktuális lap fejlécét" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Lap törlése" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "\"%s\" lap törölhető?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "A \"%s\", minden alatta lévő lap,és ezek csatolásai törölve lesznek" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "%i db erre a lapra mutató hivatkozást töröltem" msgstr[1] "%i db erre a lapra mutató hivatkozást töröltem" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i fáljt fogok törölni" msgstr[1] "%i fáljt fogok törölni" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Fájl csatolása" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "A \"%s\" lapnak nincs mappája a csatolásokhoz." #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Kép csatolása hivatkozásként" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Jegyzetfüzet" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Jegyzetfüzet megnyitása" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Alapértelmezett jegyzetfüzet" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Jegyzetfüzet hozzáadása" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Válassz nevet és mappát a jegyzetfüzethez" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Mappa" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "Új jegyzetfüzet létrehozásához válassz egy üres mappát.\n" "Természetesen egy már létező jegyzetfüzet-mappát is választhatsz.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Nem található kiegészítő az objektum megjelenítéséhez." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "A %s kiegészítő szükséges az objektumnak a megjelenítéséhez" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Index aktualizálása..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "Mégs_e" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "Még_is" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Kivágás" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Másolás" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "Bei_llesztés" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Törlés" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Ki_pipálás" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Beiks_zelés" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Hivatkozás/objektum" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Hivatkozás tö_rlése" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Dátum/idő" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Kép..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "_Felsorolás" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Számozott lista" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "_Jelölőgombos lista" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Szöveg _fájlból..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Hivatkozás..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Hivatkozás beillesztése" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "Formátum _törlése" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Keresés a lapon" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Következő _találat" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Elő_ző találat" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Csere..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Szavak száma..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Nagyítás" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "_Kicsinyítés" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normál méret" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Új _csatolmány" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "_Fájl sablonok" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Címsor _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Címsor 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Címsor _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Címsor 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Címsor _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Címsor 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Címsor _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Címsor 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Címsor _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Címsor 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Félkövér" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Félkövér" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Dőlt" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Dőlt" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Megjelölt" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Megjelölt" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "Át_húzott" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Áthúzott" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Alsó index" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Felső index" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Kód" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Kód" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Használd az <Enter>-t a hivatkozások követéséhez\n" "(Ha letiltod az <Alt><Enter> marad használatban)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "A kurzor akkor is látszódjon, ha a lap nem szerkeszthető" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "A \"CamelCase\" szavak automatikusan hivatkozások lesznek" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Automatikusan kerüljenek a fájl-elérési utak a hivatkozásokba" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Formázáskor kerüljön kijelölésre az egész szó" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Behúzás csökkentése <BackSpace>-szel\n" "(Ellenkező esetben marad a <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Ismételt kattintással lehet a jelölőnégyzet kijelzéseit változtatni" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Behúzás megváltoztatásakor változzanak az alá besoroltak is" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Jelölőnégyzet megváltoztatásakor változzanak az alá besoroltak is" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Menet közben formázza újra a wiki tag-eket" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Vágólapra másoláskor alapértelmezett formátum" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Csatolt fájlokat tartalmazó sablonok könyvtára" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Ilyen wiki nincs definiálva: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Másolás _mint..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Kijelölt szöveg mozgatása..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Tulajdonságok szerkesztése" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "Hivatkozás _szerkesztése" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "_Hivatkozás másolása" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Levélcím másolása" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Könyvtár megnyitása" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Megnyitás mással..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Megnyitás" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Nincsenek telepített sablonok." #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "A(z) %s\n" "könyvtár még nem létezik.\n" "Létrehozzuk most?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Dátum és idő beillesztése" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Naptár" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Csatolás a dátumhoz" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Kép beillesztése" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Előbb csatold a képet" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Nem támogatott fálj típus: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Kép szerkesztése" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Pozíció" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Hivatkozás" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Szélesség" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Magasság" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "Méret _visszaállítása" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Szöveg beillesztése fájlból" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Hivatkozás szerkesztése" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Hivatkozás" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Szöveg" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Következő" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Előző" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Kis- és nagy_betű megkülönböztetése" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "_Egész szó" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Reguláris kifejezés" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Kiemelés" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Keresés" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opciók" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Keresés és csere" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Mit keres" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Mire cserél" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Csere" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Ö_sszes cseréje" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Szavak száma" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Bekezdés" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Kijelölés" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Szavak" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Sorok" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "karakter" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Karaketerek szóközök nélkül" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Szöveg átmozgatása másik oldalra" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "M_ozgatás" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Szöveg áthelyezése" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Hagyja meg az új oldalra hivatkozást" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Új oldal létrehozása" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Új fájl" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Felhasználói felület" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Szerkesztés" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Tulajdonságok" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Kiegészítők" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Alkalmazások" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Használj egyéni betűkészletet" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Tovább" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Beállítás" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "További kiegészítők letöltése" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Függőségek" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Nincsenek függőségek" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Rendben" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Hibás" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Opcionális" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Szerző" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Engedélyezve" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Kiegészítő" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Kiegészítők beállítása" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "%s kiegészítő beállítása" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Alapértelmezett szövegszerkesztő beállítása" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Tulajdonságok" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Jegyzetfüzet tulajdonságok" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Legfrissebb változások" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Ma" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Tegnap" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Módosítva" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "A kibővitett keresésben használhatók legyenek ilyen operátorok:\n" "AND, OR és NOT. Nézd meg a súgót a részletekért!" #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Keresés csak a jelenlegi oldalon és aloldalain" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Találat" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Web kiszolgáló" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Szerver nem fut" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Publikus elérés engedélyezése" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Szerver elindítva" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Szerver leállítva" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Sablonok" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Tallózás" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Sablon másolása" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Válassz fájlt" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Mindent _kinyit" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "Mindent _becsuk" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Törlés" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Válassz mappát" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Kép kiválasztása" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Teteje>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Baloldali panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Jobboldali panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Alsó panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Felső panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Bal felső" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Bal alsó" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Jobb felső" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Jobb alsó" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "A hibajelentéshez kérjük csatold hozzá az alábbiakat" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Minden fájl" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Képek" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Log fájl" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "A fájl már létezik" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Ilyen névvel már van fájl: <b>\"%s\"</b>\n" "Használj más nevet, vagy felülírhatod a létező fájlt." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Fájlnév" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Tallózás" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Felülírás" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Nem található az jegyzetfüzet fájlja vagy mappája" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Adj meg egy jegyzetfüzetet" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Nem található jegyzetfüzet: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Kimeneti hely megadása szükséges az exportáláshoz" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "A kimeneti mappa már létezik és nem üres, az erőltetett exportáláshoz add " "meg az \"--overwrite\" kapcsolót" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "A kimeneti fájl már létezik, az erőltetett exportáláshoz add meg az \"--" "overwrite\" kapcsolót" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Kimeneti fájl megadása szükséges az MHTML-be történő exportáláshoz" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" "Kimeneti mappa megadása szükséges a teljes jegyzetfüzet exportálásához" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Az adott lapnév nem megfelelő!\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "\"%s\" nem megengedett lapnév" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "A tárgymutató elkészítése még folyamatban van, ehhez a parancshoz pedig " "szükség lenne rá.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "\"%s\" nem módosítható lap" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Interwiki kulcsszó" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Kezdőlap" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Dokumentumgyökér" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Ismeretlen>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Hiba a %(file)s -ban, a %(line)i sorban, \"%(snippet)s\" közelében" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetika" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Ezzel a beépülő modullal aritmetikai számításokat végezhetsz a Zim-ben.\n" "Az alábbi helyen található aritmetikai modulra épül:\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmetika" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Ismeretlen" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Típus" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Méret" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Módosítva" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Áthelyezés ide" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Másolás ide" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Mégsem" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Csatolmányböngésző" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" "Ez a kiegészítő a mellékletek mappát ikonként mutatja az\n" "az alsó panelon.\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Ablakon belüli pozíció" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Mellékletek" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Csatolmányböngésző megnyitása" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i csatolmány" msgstr[1] "%i csatolmány" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Visszacsatolások panelja" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő megjelenít egy külön panelt\n" "ami azokat az oldalakat sorolja fel, ahol hivatkozás található\n" "az aktuális oldalra.\n" "\n" "Ez egy alapvető bővítmény, a Zim-mel együtt települt.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Visszacsatolások" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Előnézet" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Hiba történt a kép készítése közben.\n" "Így is el akarod menteni a forrásszöveget?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "Könyvjelző eszköztár" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\tEz a kiegészítő megjeleníti a könyvjelzők eszköztárát.\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "Könyvjelzők mentése" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "Új könyvjelző hozzáadása az eszköztár elejéhez." #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "Könyvjelző hozzáadása" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "Könyvjelzők" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "Biztos, hogy minden könyvjelzőt törölni akarsz?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "Oldal teljes nevének megjelenítése" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "Új név beállítása" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "Vissza az eredeti névre" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "Eltávolítás" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "Mind eltávolítása" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "Megnyitás új ablakban" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "Aktuális lap beállítása" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Naptár" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Ez a kiegészítő a jegyzetfüzet egy részét átalakítja naplóvá,\n" "oldalakkal a napokhoz, hetekhez vagy hónapokhoz.\n" "Valamint naptár panelt is ad az oldalakhoz.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Nap" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Hét" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Hónap" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Év" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "A naptár mutatása az oldalpanelon külön ablak helyett" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Darabonként egy oldal" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Naptár lap kibontása a főloldalon megnyitáskor" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Mai dátumra" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Naptár" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Naptár megjelenítése" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Naptár" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Ma" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Diagram beillesztése" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő a GraphViz segítségével diagramokat ad a kódhoz.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Diagram beillesztése" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Diagram szerkesztése" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Szerkesztés a figyelem elvonása nélkül" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Ez a beépülő modul átváltoztatja a Zim-et\n" "olyan szerkesztővé, ami nem vonja el a figyelmet.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Menü elrejtése teljes képernyős módban" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Eszköztár elrejtése teljes képernyős módban" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Morzsa menü elrejtése teljes képernyős módban" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Státuszsor elrejtése teljes képernyős módban" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Legnagyobb oldalszélesség" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Vízszintes margó" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Szöveg háttérszín" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Szöveg színe" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Képernyő háttérszín" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Ditaa beillesztése" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a bővítmény egy diagram szerkesztő, mely a Ditaa-n alapul.\n" "\n" "Ez egy alapvető bővítmény, a Zimmel együtt került telepítésre.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "Ditaa sz_erkesztése" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Egyenlet beillesztése" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő a latex segítségével egyenleteket ad a kódhoz.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "_Egyenlet" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Egyenletszerkesztő" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Gnuplot beillesztése" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Ez a beépülőmodul grafikonokat jelenít meg a Gnuplot segítségével.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "Gnuplot _szerkesztése" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "GNU R Plot beillesztése" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Ez a kiegészítő a GNU R segítségével rajzokat ad a kódhoz.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "GNU R Plot _szerkesztése" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "A beépített kalkulátor nem volt képes \n" "kiértékelni a kifejezést a kurzornál." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Beépített kalkulátor" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ezzel a beépülőmodullal gyorsan ki lehet értékelni\n" "egyszerű matematikai kifejezéseket a Zim-ben.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Nem tudtam elemezni a kifejezést" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "_Math kiértékelése" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Szimbólum beillesztése" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő szimbólumok kódba való beszúrását,\n" "és a tipográfiai jelek automatikus formázását teszi lehetővé.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "_Szimbólumok..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Sorrendező" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Ez a beépülőmodul sorbarendezi a kijelölt sorokat.\n" "Már rendezett sorokon fordított sorrendben teszi ugyanezt (A-Z, majd Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Sorok rendezése" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Jelölj ki több sort." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Hivatkozás-térkép" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő a linkek szerkezeti struktúrájának\n" "grafikus megjelenítését teszi lehetővé.\n" "Használható egyfajta \"elmetérképként\",\n" "megjelenítve a bejegyzések közötti kapcsolatokat.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Hivatkozás-térkép" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Megjelenítés a böngészőben" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő egy megkerülése a Zim-ből hiányzó\n" "nyomtatási lehetőségnek. Ki tudja exportálni az\n" "aktuális lapot egy böngészőbe, ahonnan annak\n" "nyomtatási lehetőségét használva nyomtatható\n" "az anyag. Így a nyomtatás két lépésből megoldható.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "Nyomtatás bön_gészővel" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Gyors jegyzet" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő egy párbeszédablakot ad egy szöveg\n" "vagy a vágólap tartalmának gyors beszúrásához.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Gyors jegyzet..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Oldal szekció" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Új lap létrehozása minden jegyzethez" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Cím" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "_Oldal megnyitása" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Jegyzet eldobása?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Kotta beillesztése" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a bővítmény egy kottaszerkesztő, ami a GNU Lilypond-on alapul.\n" "\n" "Ez egy alapvető bővítmény, a Zimmel együtt került telepítésre.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Általános fejléc" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Általános lábléc" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "_Kotta" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "Kotta sz_erkesztése" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Képernyőkép beillesztése" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a beépülőmodul lehetővé teszi, hogy közvetlenül\n" "beillesszünk egy képernyőképet egy Zim oldalba.\n" "Ez egy alapvető bővítmény, a Zimmel együtt került telepítésre.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Képernyőfotó parancsa" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Képernyőkép..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Az egész képernyő mentése" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Ablak vagy terület kijelölés" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Várakozás" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "másodperc" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Hibák voltak, a \"%s\" futtatásakor" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Szekvenciadiagram beillesztése" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Ez a kiegészítő egy, a seqdiagon-on alapuló szekvenciadiagram-szerkesztőt ad " "hozzá a zim-hez.\n" "Szekvenciadiagramok egyszerű szerkesztését teszi lehetővé.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Szekvenciadiagram" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Szekvenciadiagram szerkesztése" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Forrás nézet" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Ez a kiegészítő kódblokkok beillesztését teszi lehetővé az oldalakba, " "beágyazott panel\n" "formájában. Lehetőség van kódszinezésre, sorszámok megjelenítésére, stb.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Automata behúzás" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Okos kezdőlap gomb" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Aktuális sor kiemelése" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Jobb oldali margó megjelenítése" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Jobb margó pozíció" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "TAB-széleség" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Kódblokk" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Kódblokk beillesztése" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Szintaxis" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Sorok számának megjelenítése" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Helyesírás ellenőrző" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő helyesírás ellenőrzést tesz lehetővé a gtkspell " "segítségével.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "_Helyesírás ellenőrzés" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Nem lehet betölteni a helyesírás-ellenőrzőt" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "Talán a megfelelő szótárak nincsenek telepítve" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "Balra zárt" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Középre zárt" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "Jobbra zárt" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Meghatározatlan" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Táblázatszerkesztő" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "Ez a kiegészítő táblázatok beszúrását teszi lehetővé a wiki oldalakba. A " "táblázatok GTK TreeView widgetként fognak megjelenni.\n" "A különböző formátumokba (pl. HTML/LaTeX) exportálhatóság egészíti ki a " "funkciókat.\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "vonalakkal" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "vonalak nélkül" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "vízszintes vonalak" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "függőleges vonalak" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Eszköztár megjelenítése" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Vonalak" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Táblázat" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Sor hozzáadása" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Sor törlése" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Sor másolása" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "Mozgatás fel" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "Mozgatás le" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Oszlopok módosítása" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Súgó megnyitása" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Sor törlése" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Cella tartalmának megnyitása" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "A táblázatnak legalább egy sort tartalmaznia kell!\n" " Nem történt törlés." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Válassz ki egy sort, mielőtt megnyomod a gombot." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Táblázat beszúrása" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Táblázat szerkesztése" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Táblázatoszlopok kezelése" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Oszlop 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "Automatikus\n" "sortörés" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Igazítás" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Oszlop hozzáadása" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Oszlop eltávolítása" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Oszlop mozgatása előre" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Oszlop mozgatása hátra" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "A táblázatnak legalább egy oszlopot tartalmaznia kell." #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Tartalom" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a bővítmény egy extra funkciót biztosít,\n" "ami az aktuális oldal tartalomjegyzékét mutatja.\n" "\n" "Ez egy alapvető bővítmény, a Zimmel együtt került telepítésre.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" "A tartalomjegyzéket nem oldalpanelként, hanem lebegő ablakként mutatja." #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Oldal címének megjelenítése a tartalomjegyzékben" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Tartalom" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Lejjebb sorol" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Feljebb sorol" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Címkék" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Ez a beépülőmodul lehetővé teszi az oldalak szűrését egy címkefelhő " "segítségével.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Teljes oldalnév megjelenítése" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sorbarendezés címkék szerint" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "Címke nélkül" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Rendezés abc sorrendben" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Feladatlista" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő az adatbázisba felvett nyitott feladatolat jeleníti\n" "meg egy dialógus ablakban. A nyitott feladatokat az üres\n" "jelölőnégyzetek és a \"TODO\", \"FIXME\" kezdetű sorok jelentik.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Minden jelölőnégyzet feladatnak tekintése" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Az oldal neve legyen címke a feladatlista számára" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Megadja a naptárban található feladatok időtartamát." #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "A hétvége előtt megjelöli a hétfőn vagy kedden esedékes feladatokat." #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "A megjelölt feladatok címkéi" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "A következő feladat címkéje." #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Nem indítható feladatok címkéi" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Fa-alstruktúra amit indexelni kell" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Fa-alstruktúra amit ki kell hagyni" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Szükséges indexelni az adatbázist" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Első alkalommal nyitottad meg a feladat listát.\n" "Ezért újra kell indexelni az adatbázist.\n" "Ez az adatbázis méretétől függően akár\n" "néhány percet is igénybe vehet.\n" "A következő indításkor erre már nem lesz szükség." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Szűrő" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Csak a végrehajtható feladatokat mutatja." #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i db nyitott tétel" msgstr[1] "%i db nyitott tétel" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Minden feladat" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Nincs címke" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Feladat" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Dátum" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Tálca ikon" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a kiegészítő egy ikont hoz létre az értesítési területen a gyors " "eléréshez.\n" "\n" "Működéséhez legalább 2.10-es GTK+ szükséges.\n" "\n" "Ez a kiegészítő szerves része a Zim-nek.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klasszikus értesítési ikon.\n" "Ne használj új típusú ikont Ubuntu alatt!" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Különböző ikonok használata minden adatbázishoz" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Gyors jegyzet" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Egyéb..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Jegyzetfüzetek" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim asztali wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Verziókezelés" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ez a bővítmény verziókezelést biztosít a jegyzetfüzetekhez.\n" "\n" "Támogatja a Bazaar, a Git, a Mercurial verziókövető rendszereket.\n" "\n" "Ez egy alapvető bővítmény, a Zimmel együtt került telepítésre.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Automatikus verziómentés" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automatikusan mentve" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Verzió _mentése" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Verziók..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Nincsenek változások az jegyzetfüzetben az utolsó mentés óta" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Nem történt módosítás az utolsó verzió óta" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Engedélyezed a verzókezelést?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "A verziókezelés nincs bekapcsolva ehhez az jegyzetfüzethez.\n" "Be akarod kapcsolni most?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Kiszolgáló" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Verzió mentése" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Írj be egy megjegyzést ehhez a verzióhoz" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Automatikusan mentve" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Verziók" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Lap" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Mutasd a_z állapotokat" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Válaszd ki azt a verziót, amelyet össze akarsz hasonlítani a jelenlegi " "állapottal!\n" "Vagy válassz ki többet, hogy összehasonlítsd őket egymással!\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Megjegyzés" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "Verzió vi_sszaállítása" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "_Változások mutatása" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Egy az egyben" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Állapot lap forrása" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Visszaállítja a lap mentett verzióját?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Vissza kívánod állítani ezt a lapot: %(page)s\n" "erre a mentett verzióra: %(version)s ?\n" "\n" "Az utolsó mentés óta történt változások el fognak veszni!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Változások" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Vissza" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Események naplózása a Zeitgeisten keresztül" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Az eseményeket a Zeitgeist démonnak továbbítja" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wiki oldal: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Nem található a \"%s\" sablon" #~ msgid "Text Editor" #~ msgstr "Szövegszerkesztő" #~ msgid "Email client" #~ msgstr "E-mail kliens" #~ msgid "Pages" #~ msgstr "Oldalak" #~ msgid "Output" #~ msgstr "Kimenet" #~ msgid "Match c_ase" #~ msgstr "Na_gybetűérzékeny" #~ msgid "Slow file system" #~ msgstr "Lassú fájlrendszer" #~ msgid "_Filter" #~ msgstr "_Szűrő" #~ msgid "Web browser" #~ msgstr "Web böngésző" #~ msgid "File browser" #~ msgstr "Fájl böngésző" #~ msgid "Prio" #~ msgstr "Prioritás" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/ru.po�������������������������������������������������������������������������0000664�0001750�0001750�00000336377�12613750113�015646� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Russian translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-07-27 01:45+0000\n" "Last-Translator: ManDrive <roman_romul@mail.ru>\n" "Language-Team: Russian <ru@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Не удалось запустить приложение: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "вернула ненулевой статус выхода %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Ошибка запуска %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "По умолчанию" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Похоже, вы нашли ошибку" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Файл %s не найден" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Не удалось прочитать: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Это обычно означает, что файл содержит некорректные символы" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Подробности" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Файл %s защищён от записи" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Файл %s на диске изменён" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Настроить..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Приложений не найдено" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Открыть с помощью «%s»" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Настройка приложения для открывания ссылок \"%s\"" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Настройка приложения для открывания файлов\n" "типа \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Настройка приложений" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Добавить приложение" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Настройка по умолчанию (системная)" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Имя" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Команда" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Сделать приложением по умолчанию" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Не удалось найти исполняемый файл \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Внешние инструменты" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Вы можете настроить внешние инструменты, которые затем \n" "будут отображаться на панели инструментов или в контекстном меню." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Редактирование внешнего инструмента" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Описание" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Значок" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Команда не изменяет данные" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Вывод должен заменить текущий выбор" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Показывать на панели инструментов" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Следующие выражения могут быть использованы\n" "в строке «Команда»:\n" "<tt>\n" "<b>%f</b> исходный код страницы как временный файл\n" "<b>%d</b> папка с вложениями текущей страницы\n" "<b>%s</b> реальный исходный код страницы (если есть)\n" "<b>%n</b> путь к блокноту (файл или каталог)\n" "<b>%D</b> корневая папка документа (если есть)\n" "<b>%t</b> выделенный текст или слово под курсором\n" "<b>%T</b> выделенный текст с wiki-форматированием\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Экспорт" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Обновление содержания" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Экспорт записей блокнота" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Папка существует: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Папка уже существует и содержит данные. Экспорт в нее может привести к " "перезаписи существующих файлов. Продолжить?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Файл существует" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Этот файл уже существует.\n" "Заменить?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Выберите страницы для экспорта" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Блокнот _целиком" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Одна _страница" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Страница" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Включить вложенные страницы" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Выберите формат для экспорта" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Другой..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Формат" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Шаблон" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Использовать полный путь для файлов" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Преобразовать путь к корневой папке документов в URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Получить больше шаблонов на сайте" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Выберите выходной файл или папку" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Экспортировать каждую страницу в отдельный файл" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Экспортировать все страницы в один общий файл" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Выходная папка" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Главная страница" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Выходной файл" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" "Произошло %(n_error)i ошибок и %(n_warning)i предупреждений, смотрите лог" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "Произошло %i ошибок, смотрите лог" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "Произошло %i предупреждений, смотрите лог" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Экспорт завершён" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Просмотреть _журнал" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Файл" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Правка" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Вид" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Вставка" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "П_оиск" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_Формат" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Инструменты" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "Пере_ход" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Справка" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Панель _адреса" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Панель _инструментов" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Создать страницу…" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Создать _подстраницу…" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Открыть другой блокнот…" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Открыть в _новом окне" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Импорт страницы…" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "Со_хранить" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Сохранить коп_ию…" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Экспорт…" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Отправить…" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Переместить страницу…" #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Пере_именовать страницу…" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Удалить страницу" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Свойства…" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Закрыть" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "В_ыход" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Найти..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Найти _ссылки..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Недавние изменения..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Копировать _адрес" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Шаблоны" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Параметры" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Обновить" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Открыть папку с вложениями" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Открыть папку _блокнота" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Открыть корневую папку документов" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Открыть папку документа" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Вложить _файл…" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Вложить внешний файл" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Редактировать _исходный текст" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Запустить _веб-сервер…" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Обновить индекс" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "В_нешние инструменты…" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "На_зад" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Перейти к предыдущей странице" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "В_перед" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Перейти к следующей странице" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "Уровнем _выше" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Перейти на уровень выше" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "Уровнем _ниже" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Перейти на уровень ниже" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Назад по содержанию" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Перейти к предыдущей странице" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Вперед по содержанию" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Перейти к следующей странице" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Домашняя страница" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Перейти к домашней странице" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Пере_йти к…" #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "Со_держание" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_Часто задаваемые вопросы" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Горячие клавиши" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "О_шибки" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_О программе" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Все панели" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Показать все панели" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Строка состояния" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Боковые панели" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Показать боковые панели" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "Полноэкранный _режим" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Редактирование" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Переключить возможность редактирования блокнота" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Нет" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Недавние страницы" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Недавно изменённые страницы" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "Посещенные страницы" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Иерархия страниц" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Значки _и текст" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Только _значки" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Только _текст" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Большие значки" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Маленькие значки" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Очень маленькие значки" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Использовать «отрывные» меню" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Использовать <Ctrl><Пробел> для переключения на боковую панель" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Убирать ссылки при удалении страниц" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Всегда использовать последнюю позицию курсора при открытии страницы" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Указанный файл или папка не существует.\n" "Проверьте правильность пути." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Нет такого файла или папки: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Страница содержит несохранённые изменения" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Обновить блокнот?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Этот блокнот был создан более старой версией Zim.\n" "Обновить его до последней версии?\n" "\n" "Обновление займет некоторое время и может привести \n" "к некоторым изменениям в блокноте. Рекомендуем \n" "сделать резервную копию перед этой операцией.\n" "\n" "Если вы откажетесь от обновления, некоторые\n" "новые возможности могут работать некорректно." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Обновление блокнота" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Содержание все еще обновляется. Пока эта операция не завершится, ссылки " "могут обновиться некорректно. Выполнение этого действия сейчас может " "повредить ссылки. Все равно продолжить?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Обновление ссылок" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Удаление ссылок" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Создать папку?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Каталог \"%s\" ещё не существует.\n" "Хотите его создать?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Не удалось открыть: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "У этой страницы нет папки для вложений" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Редактирование файла: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Вы редактируете файл во внешнем приложении. Закройте этот диалог по " "завершении редактирования" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Настольная wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Andrew Kuzminov https://launchpad.net/~ilobster\n" " Antonio https://launchpad.net/~ghoniq\n" " Arsa Chernikov https://launchpad.net/~arsa-chernikov\n" " Artem Anufrij https://launchpad.net/~artem-anufrij\n" " DIG https://launchpad.net/~dig\n" " Dmitry Ostasevich https://launchpad.net/~ostasevich\n" " Dominus Alexander Z. https://launchpad.net/~dominusalex\n" " Eugene Krivobokov https://launchpad.net/~eugene-krivobokov\n" " Eugene Marshal https://launchpad.net/~lowrider\n" " Eugene Mikhantiev https://launchpad.net/~mehanik\n" " Eugene Schava https://launchpad.net/~eschava\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " ManDrive https://launchpad.net/~roman-romul\n" " Nikolay A. Fetisov https://launchpad.net/~naf-altlinux\n" " Oleg https://launchpad.net/~oleg-devyatilov\n" " Sergey Shlyapugin https://launchpad.net/~inbalboa\n" " Sergey Vlasov https://launchpad.net/~sigprof\n" " Vadim Rutkovsky https://launchpad.net/~roignac\n" " Vitaliy Starostin https://launchpad.net/~vvs\n" " Vitaly https://launchpad.net/~jauthu\n" " Vladimir Sharshov https://launchpad.net/~vsharshov\n" " aks-id https://launchpad.net/~aks-id\n" " anton https://launchpad.net/~faq-ru\n" " gest https://launchpad.net/~drug-detstva" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Содержание" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "только чтение" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Поиск" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Искать страницы...." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Обратных ссылок…" msgstr[1] "%i _Обратная ссылка..." msgstr[2] "%i _Обратные ссылки…" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Не удалось сохранить страницу: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Для продолжения вы можете сохранить копию этой страницы \n" "или отклонить все изменения. Если вы сохраните копию, изменения\n" "также не будут внесены, но они могут быть восстановлены позже." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "От_клонить изменения" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Сохранить копию" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Переход" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Перейти к странице" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Создать новую подстраницу" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Создать новую страницу" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Имейте ввиду, что ссылка на несуществующую страницу\n" "приведет к автоматическому созданию этой страницы." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Имя страницы" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Шаблон страницы" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Страница уже существует" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Сохранить копию страницы" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Импорт страницы" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Текстовые файлы" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Перемещение страницы" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Переместить страницу «%s»" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Обновить %i страницу, ссылающуюся на эту страницу" msgstr[1] "Обновить %i страницы, ссылающихся на эту" msgstr[2] "Обновить %i страниц, ссылающихся на эту страницу" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Раздел" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Переименование страницы" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Переименовать страницу «%s»" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Обновить заголовок страницы" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Удаление страницы" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Удалить страницу «%s»?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Страница «%s» и все ее подстраницы\n" "и вложения будут удалены" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Убрать ссылки с %i страниц, ссылающихся на эту страницу" msgstr[1] "Убрать ссылки с %i страницы, ссылающейся на эту страницу" msgstr[2] "Убрать ссылки с %i страниц, ссылающихся на эту страницу" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i файлов будет удалено" msgstr[1] "%i файл будет удален" msgstr[2] "%i файла будет удалено" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Создать вложение" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "У страницы «%s» нет папки для вложений" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Вставить изображение как ссылку" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Блокнот" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Открыть блокнот" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Блокнот по умолчанию" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Добавить блокнот" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Укажите имя и папку для блокнота" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Папка" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Для отображения этого объекта нет доступного плагина." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Для отображения этого объекта требуется плагин %s." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Обновление содержания…" #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Отменить" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "Ве_рнуть" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Вырезать" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Копировать" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "Вст_авить" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Удалить" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Пометить как V-флажок" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Пометить как X-флажок" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Редактировать ссылку или объект…" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Убрать _ссылку" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Дата и время…" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Изображение..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Маркированный список" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Нумерованный список" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Список переключателей" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Текст из _файла…" #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Ссылка…" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Вставить ссылку" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Очистить форматирование" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Найти" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Найти _следующее" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Найти _предыдущее" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Заменить…" #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Статистика…" #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Увеличить" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "У_меньшить" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Нормальный размер" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Новое _вложение" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Файл _Шаблоны..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Заголовок _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Заголовок 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Заголовок _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Заголовок 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Заголовок _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Заголовок 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Заголовок _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Заголовок 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Заголовок _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Заголовок 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Жирный" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Жирный" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Курсив" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Курсив" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Подчеркнутый" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Подчеркнутый" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "Зач_еркнутый" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Зачеркнутый" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "Нижний индекс" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "Верхний индекс" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "Стенограмма" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Стенограмма" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Использовать <Enter> для перехода по ссылкам\n" "(если отключено, можно использовать <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Показывать курсор на страницах, защищенных от редактирования" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Автоматически делать ссылками слова, написанные в ПрыгающемРегистре" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Автоматически делать ссылками пути файлов" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Автоматически выделять текущее слово при применении форматирования" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Удаление отступов по <BackSpace>\n" "(если отключено, можно использовать <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Повторение нажатий по флажку меняет его состояние по кругу" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Изменение отступа элемента списка изменяет отступы подэлементов" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Отметка флажка влияет на подэлементы" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Переформатировать разметку wiki на лету" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Применять форматирование по умолчанию для копируемого текста" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Каталог с шаблонами для файлов-вложений" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Неизвестная wiki-ссылка: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "_Копировать как..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Переместить выделенный текст" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Редактировать свойства" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Редактировать ссылку" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Копировать _ссылку" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Копировать адрес электронной почты" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Открыть папку" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Открыть с помощью…" #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Открыть" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Шаблоны не установлены" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Каталог \n" "%s\n" "не существует.\n" "Хотите его создать?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Вставить дату и время" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "Календарь" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Ссылка на дату" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Вставить изображение" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Вставить изображение" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Тип файла не поддерживается: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Редактировать изображение" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Местоположение" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Ссылка на" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Ширина" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Высота" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Сбросить размер" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Вставить текст из файла" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Редактировать ссылку" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Связать" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Текст" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Следующее" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Предыдущее" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "_Учитывать регистр" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Только слово целиком" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Регулярное выражение" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "П_одсвечивать" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Найти" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Параметры" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Найти и заменить" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Найти что" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Заменить на" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Заменить" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Заменить _всё" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Статистика" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Абзац" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Выделение" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Слов" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Строк" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Символов" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Символы, исключая пробелы" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Переместить текст на другую страницу" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Переместить" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Переместить текст в" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Оставить ссылку на новую страницу" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Открыть новую страницу" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Новый файл" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Интерфейс" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Редактирование" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Параметры" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Модули" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Приложения" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Использовать свой шрифт" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Еще" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "Настроить" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Получить больше плагинов на сайте" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Зависимости" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Нет зависимостей" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Ошибка" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Дополнительно" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Автор" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Включен" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Модуль" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Настроить модуль" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Параметры модуля «%s»" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Установить текстовой редактор по умолчанию" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Свойства" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Свойства блокнота" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Недавние изменения" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Сегодня" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Вчера" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Последнее изменение" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Для расширенного поиска можно использовать операторы И, ИЛИ и НЕ.\n" "Более подробная информация на странице помощи." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Ограничить поиск на текущей странице и во вложенных страницах" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Найдено" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Веб-сервер" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Сервер не запущен" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Разрешить публичный доступ" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Порт" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Сервер запущен" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Сервер остановлен" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Шаблоны" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Обзор" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Копировать шаблон" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Выбрать файл" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Развернуть _все" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Свернуть всё" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Очистить" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Выбрать папку" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Выбрать изображение" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Верх>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Левая боковая панель" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Правая боковая панель" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Нижняя панель" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Верхняя панель" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Сверху слева" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Внизу слева" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Сверху справа" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Внизу справа" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "При отправке отчета об ошибке, пожалуйста,\n" "включите информацию из текстового поля ниже" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Все файлы" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Изображения" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Журнал" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Файл существует" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Файл с именем <b>«%s»</b> уже существует.\n" "Вы можете указать другое имя или перезаписать существующий файл." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Имя файла" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Обзор" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Перезаписать" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Не удалось найти файл или папку для этого блокнота" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Пожалуйста, сформулируйте записную книжку" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Не удалось найти блокнот: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Выходное расположение, требующееся для экспорта" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Выходная директория существует и не пуста, укажите \"--overwrite\", чтобы " "выполнить экспорт принудительно" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Выходной файл существует, укажите \"--overwrite\", чтобы выполнить экспорт " "принудительно" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Нужен выходной файл для экспорта в MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Нужна выходная папка для экспорта полной записной книжки" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Введено некорректное имя страницы.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Неверное имя страницы «%s»" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Содержание все еще занято обновлением, пока мы пытаемся выполнить операцию, " "которой оно необходимо.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Не удалось изменить страницу: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Название для интервики:й" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Домашняя страница" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Корневая папка документа" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Свойства" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Неизв.>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Ошибка в %(file)s в строке %(line)i около \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Арифметика" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Этот модуль позволяет вставлять арифметические вычисления в zim. \n" "Он основан на арифметическом модуле \n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Арифметика" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "нет данных" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Тип" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Размер" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Изменен" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Переместить сюда" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Копировать сюда" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Отмена" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Менеджер вложений" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Положение в окне" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Вложения" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Показать просмотрщик приложений." #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Вложений" msgstr[1] "%i _Вложение" msgstr[2] "%i _Вложения" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Панель обратных ссылок" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет дополнительный виджет, который показывает список " "страниц,\n" "ссылающихся на текущую страницу.\n" "\n" "Это -- базовый модуль; поставляется с zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Обратные ссылки" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Предварительный просмотр" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Во время генерации изображения возникла ошибка.\n" "Всё равно сохранить исходный текст?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Дневник" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Этот плагин перенаправляет один раздел записной книжки в журнал\n" "со страницей в день, неделю или месяц.\n" "Также добавляет виджет календаря для доступа к этим страницам.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "День" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Неделя" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Месяц" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Год" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Показывать календарь в боковой панели вместо отдельного окна" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Странице календаря соответствует:" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Развернуть страницу журнала в индекс при открытии" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Сегодня" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Календарь" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Показать календарь" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d %b %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Календарь" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Сегодня" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Вставка диаграмм" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет редактор диаграмм для Zim на основе GraphViz.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Диа_грамма…" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Диаграмма" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Редактировать диаграмму" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Редактирование не отвлекаясь" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Этот модуль добавляет установки, которые позволяют \n" "редактировать в zim, не отвлекаясь.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Скрыть меню в полноэкранном режиме" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Скрыть инструменты в полноэкранном режиме" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Скрыть индикатор пути в полноэкранном режиме" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Скрыть строку статуса в полноэкранном режиме" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Максимальная ширина страницы" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Вертикальное поле" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Цвет фона" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Цвет текста" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Цвет фона экрана" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Вставка ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет редактор диаграмм, основанный на Ditaa. \n" "Это -- базовый модуль; поставляется с zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Редактировать Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Вставка формул" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет редактор формул для Zim на основе LaTeX.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "_Уравнение" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Редактировать формулу" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Вставка Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Этот модуль предоставляет редактор графиков для Zim, основанный на Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "Редактировать Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Вставка графика GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Этот модуль, основанный на GNU R, служит для редактирования графиков.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "График GNU _R" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Редактировать график GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Встроенный калькулятор не смог\n" "рассчитать выражение под курсором." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Встроенный калькулятор" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль позволяет быстро рассчитать\n" "простые математические выражения в Zim.\n" "\n" "Это базовый модуль, поставляющийся вместе с Zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Не удалось разобрать выражение" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Посчитать _формулу" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Вставка символа" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет диалог «Вставка символа» и\n" "позволяет автоформатирование типографских знаков.\n" "\n" "Это базовый модуль, поставляющийся вместе с Zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Си_мвол…" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Сортировщик строк" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Этот модуль сортирует выделенные строки в алфавитном\n" "порядке. Если строки уже отсортированы, порядок\n" "сортировки будет изменен на обратный (А-Я на Я-А).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "Сортировать строки" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Выделите не менее двух строк." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Карта ссылок" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль отображает диалоговое окно с графическим\n" "представлением структуры ссылок блокнота. Он может\n" "быть использован в качестве «карты», показывающей,\n" "как связаны страницы.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Показать карту ссылок" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Печать в браузер" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль предоставляет отсутствующую в Zim\n" "поддержку печати. Он экспортирует текущую страницу\n" "в HTML и открывает ее в браузере. Если браузер имеет \n" "поддержку печати, вы сможете произвести печать оттуда.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Печать в браузер" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Быстрые заметки" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет диалог для быстрой вставки текста\n" "или содержания буфера обмена на страницу в Zim.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Быстрая заметка…" #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Раздел страницы" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Создавать новую страницу для каждой заметки" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Заголовок" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Открыть _Страницу" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Выбросить заметку?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Вставка нотного текста" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет нотный редактор, основанный на GNU Lilypond. \n" "Это -- базовый модуль; поставляется с zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Общий включаемый заголовок" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Общий включаемый \"подвал\"" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "_Баллы" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Редактировать нотный текст" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Вставка снимка экрана" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль позволяет сделать снимок экрана и вставить его\n" "в страницу Zim.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Команда для скриншота" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "С_нимок экрана…" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Захватить весь экран" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Выбрать окно или область экрана" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Задержка" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "сек." #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "При выполнении «%s» возникла ошибка" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Вставить диаграмму последовательностей" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Этот плагин предоставляет редактор диаграммы последовательностей для zim на " "основе seqdiag.\n" "Это позволяет легко редактировать диаграммы последовательностей.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Диаграмма последовательностей" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Редактировать диаграмму последовательностей" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Просмотр исходника" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Этот плагин позволяет вставлять \"блоки кода\" в страницу. Они будут " "показаны как встроенные виджеты с подсветкой синтаксиса, номерами строк и " "т.д.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Авто отступ" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Ключ Smart Home" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Подсвечивать текущую строку" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Показать правую границу" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Позиция правой границы" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Ширина табуляции" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Блок кода" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Вставить блок кода" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Синтаксис" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Показывать номера строк" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Проверка орфографии" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Добавляет проверку правописания с помощью gtkspell.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Проверять _орфографию" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Не удалось загрузить проверку орфографии" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Это может означать, что соответствующий\n" "словарь не установлен" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "По левому краю" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "По-центру" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "По правому краю" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Неопределённый" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Редактор таблиц" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "С помощью этого плагина вы можете вставлять таблицу в вики-страницу.\n" "Таблицы будут показаны как виджеты GTK TreeView.\n" "Экспорт их в различные форматы (т.е. HTML/LaTeX) дополняет набор функций.\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "с линиями" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "без линий сетки" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "горизонтальные линии" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "вертикальные линии" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Показать помощник панели инструментов" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Линии сетки" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Таблица" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Добавить строку" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Удалить строку" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Дублировать строку" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "Строку вверх" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "Строку вниз" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Изменить столбцы" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Открыть справку" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Удалить строку" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Открыть ссылку, содержащуюся в ячейке" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "Таблица должна состоять по крайней мере из строки!\n" "Никакого удаления не сделано." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Пожалуйста, выберите строку перед нажатием на кнопку." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Вставить таблицу" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Редактор таблицы" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Управление столбцами таблицы" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Столбец 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "Авто\n" "Перенос" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Выравнивание" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Добавить столбец" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Удалить столбец" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Переместить столбец вперёд" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Переместить столбец назад" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Таблица должна иметь по крайней мере один столбец." #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Оглавление" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет дополнительный виджет, показывающий\n" "оглавление текущей страницы.\n" "\n" "Это -- базовый модуль; поставляется с zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Показать оглавление в плавающем виджете (а не в боковой панели)" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Показать заголовок страницы как заголовок в оглавлении" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Оглавление" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Понизить" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Повысить" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Метки" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Этот модуль позволяет фильтровать содержание по выбранным меткам в облаке.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Показать полное имя страницы" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Сортировать страницы по меткам" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "без меток" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Сортировать по алфавиту" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Список задач" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет диалог, показывающий список \n" "открытых задач в определенном блокноте. \n" "Открытые задачи помечаются флажками или\n" "метками, например TODO или FIXME.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Считать задачами все строки с флажками" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Преобразовывать имя страницы в метки для задач" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Предполагаемая дата выполнения для задач из календаря" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "Пометить задачи на понедельни или вторник перед выходными" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Метки для задач" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Метка для следующей задачи" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Теги для невыполняемых задач" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Поддерево для индексации" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Игнорируемые поддеревья" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Необходимо проиндексировать блокнот" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Вы впервые открыли список задач,\n" "поэтому необходимо перестроить индекс.\n" "Операция может занять несколько минут\n" "в зависимости от размера блокнота.\n" "В следующий раз эта операция уже не потребуется." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Фильтр" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Показать только активные задачи" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i открытых задач" msgstr[1] "%i открытая задача" msgstr[2] "%i открытых задачи" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Все задачи" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Непомеченные" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Задача" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Дата" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Значок в области уведомлений" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль добавляет значок Zim в область уведомлений.\n" "\n" "Для работы этого модуля требуется версия Gtk+ не ниже 2.10.\n" "\n" "Это базовый модуль, поставляющийся с Zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Классический значок в области уведомлений\n" "(не использовать новый стиль значков статуса в Ubuntu)" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Показывать отдельный значок для каждого блокнота" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Быстрая заметка…" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Другой…" #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Блокноты" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Контроль версий" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Этот модуль обеспечивает контроль версий для блокнотов.\n" "\n" "Этот модуль поддерживает следующие системы контроля версий: Bazaar, Git и " "Mercurial.\n" "\n" "Это -- базовый модуль; поставляется с zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Регулярное автосохранение версий" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Автоматически сохраненная версия" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Сохранить _версию…" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Версии…" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Со времени сохранения последней версии изменений не было." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Нет изменений с прошлой версии" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Включить контроль версий?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Контроль версий для этого блокнота отключен.\n" "Включить?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Система контроля версий" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Сохранить версию" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Добавьте комментарий для этой версии" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Сохраненная версия" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Версии" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Страница" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Просмотреть _аннотации" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Выберите версию, чтобы увидеть изменения между этой версией и\n" "текущим состоянием. При выборе нескольких версий будут показаны различия " "между ними.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Комментарий" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Восстановить версию" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Показать _изменения" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Бок о бок" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Комментированный исходник страницы" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Вернуть страницу к сохраненной версии?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Вы хотите вернуть страницу: %(page)s\n" "к сохраненной версии: %(version)s?\n" "\n" "Все изменения с последней сохраненной версии будут утеряны!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Изменения" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Ревизия" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Журналировать события с помощью Zeitgeist." #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Передаёт события процессу zeitgeist." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Вики-страница: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Не удалось найти шаблон \"%s\"" #~ msgid "Text Editor" #~ msgstr "Текстовый редактор" #~ msgid "Email client" #~ msgstr "Почтовый клиент" #~ msgid "Pages" #~ msgstr "Страницы" #~ msgid "Slow file system" #~ msgstr "Медленная файловая система" #~ msgid "Prio" #~ msgstr "Приоритет" #~ msgid "_Filter" #~ msgstr "_Фильтр" #~ msgid "Match c_ase" #~ msgstr "Учитывать регистр" #~ msgid "Output" #~ msgstr "Выходной файл" #~ msgid "File browser" #~ msgstr "Файловый менеджер" #~ msgid "Web browser" #~ msgstr "Веб-браузер" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/ro.po�������������������������������������������������������������������������0000664�0001750�0001750�00000276066�12613750113�015636� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Romanian translation for zim # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2012. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-06-14 17:19+0000\n" "Last-Translator: Jaap Karssenberg <jaap.karssenberg@gmail.com>\n" "Language-Team: Romanian <ro@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 " "== 0) && (n != 0))) ? 2: 1));\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Alegerea fișierului sau dosarului de ieșire" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Dosarul de ieșire" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Eșec în rularea aplicației: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "a returnat statusul de ieșire nenul %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Eșec la rularea: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Implicit" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Se pare că ați găsit un defect" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Nu există fișierul: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Nu s-a putut citi: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Aceasta înseamnă de regulă că fișierul conține caractere invalide" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detalii" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Fișierul nu poate fi scris: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "FIșierul s-a schimbat pe disc: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Modifică..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "N-a fost găsită nici o aplicație" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Deschide cu „%s”" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Configurează o aplicație care să deschidă legăturile „%s”" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Configurează o aplicație pentru deschiderea fișierelor\n" "de tip „%s”" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Configurare aplicații" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Adaugă aplicație" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Setare implicită" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nume" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Comanda" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Setează ca aplicație implicită" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "N-am putut găsi executabilul „%s”" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Unelte personalizate" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Puteţi configura uneltele personalizate care apar\n" "în meniul de unelte şi în bara de unelte sau în meniurile contextuale." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Editaţi unealta personalizată" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Descriere" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Iconiţă" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Comanda nu modifică date" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Rezultatul ar trebui să înlocuiască selecția curentă" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Afișat în bara de unelte" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Următorii parametri vor fi substituiți\n" "în comandă când aceasta este executată:\n" "<tt>\n" "<b>%f</b> sursa paginii ca fișier temporar\n" "<b>%d</b> dosarul cu atașamente al paginii curente\n" "<b>%s</b> adevăratul fișier-sursă al paginii (dacă există)\n" "<b>%n</b> locația notesului (fișier sau dosar)\n" "<b>%D</b> rădăcina documentului (dacă există)\n" "<b>%t</b> textul sau cuvântul selectat în dreptul cursorului\n" "<b>%T</b> textul selectat ce include formatarea wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportare" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Se actualizează indexarea" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Se exportă notesul..." #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Dosarul există: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Dosarul există deja și are conținut, iar exportarea în acest dosar ar putea " "suprascrie fișierele existente. Continuați, totuși?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Fișierul există" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Fișierul există.\n" "Doriți să-l suprascrieți?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Selectați paginile pentru exportare" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Notesul complet" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "O singură pagină" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Pagină" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Include subpagini" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Selectați formatul pentru export" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Altele..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formatare" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Șablon" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Leagă fișierele de documentul-rădăcină cu întreaga cale a fișierului" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Harta dosarului rădăcină în legătură" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Obține mai multe șabloane de pe rețea" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Exportă fiecare pagină într-un fișier separat" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Exportă toate paginile într-un singur fișier" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Pagina de index" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Fișier de ieșire" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "au apărut %i erori, verificați înregistrarea" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "au apărut %i avertismente, verificați înregistrarea" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Export finalizat" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Arată _jurnalul" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Fișier" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Editează" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Vizualizare" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Inserare" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Căutare" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_matare" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "Unel_te" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "Navi_gare" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "A_jutor" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "_Bara de căi" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Bară de unel_te" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "Pagină _nouă" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "S_ubpagină nouă" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "Deschide alt n_otes" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Deschide într-o _fereastră nouă" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importă pagina" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Salvare" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Salvează o _copie" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xportă..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Trimite _spre..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Mută pagina..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Redenumește pagina..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Șterge pagina" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Proprie_tăți" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "În_chide" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "P_ărăsește aplicația" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Caută..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Caut_ă antelegături" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Schimbări recente..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copiază _locația" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "Ș_abloane" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Pref_erințe" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Reîncarcă" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Deschide d_osarul atașamentelor" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Deschide dosarul _notesurilor" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Deschide Documentul-_rădăcină" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Deschide _dosarul documentelor" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Atașează _fișier" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Atașează fișier extern" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Editează _sursa" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Pornește serverul _web" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Actualizează _indexul" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Unel_te personalizate" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "Îna_poi" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Mergi o pa_gină înapoi" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Înaintează" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Mergi o _pagină înainte" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Părinte" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Mergi la pagina-părinte" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Copil" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Mergi la pagina-copil" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Anterior în index" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Mergi la pagina precedentă" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Următorul în i_ndex" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Mergi la pagina următoare" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Acasă" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Mergi acasă" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Sari _la..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Conținuturi" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "Întrebări _frecvente" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "Sc_urtături de taste" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "O_bstacole" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Despre aplicație" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "To_ate panourile" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Arată toate panourile" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "Bară de _stare" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Panourile laterale" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Arată panourile laterale" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "Pe tot _ecranul" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Notes de _editat" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Comută notesul de editat" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Nimic" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "Pagini _recente" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Pagini _schimbate recent" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Istoric" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "Ierarhizarea _paginilor" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Iconiț_e și text" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Doar _iconițe" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Doar _text" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "Iconițe _mari" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "Iconițe m_ici" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Ic_onițe minuscule" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Adaugă benzile pentru detașare la meniuri" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Utilizează <Ctrl><Space> pentru a trece la panoul lateral" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Înlătură legăturile când sunt șterse paginile" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" "Utilizează mereu ultima poziție a cursorului la deschiderea unei pagini" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Fișierul sau dosarul specificat nu există.\n" "Verificați dacă ați ales calea corectă." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Nici un fișier sau dosar: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Pagina conține schimbări nesalvate" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Actualizez notesul?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Acest notes a fost creat cu o versiune mai veche a Zim.\n" "Doriți să-l actualizați la ultima versiune acum?\n" "\n" "Actualizarea va lua ceva timp și va produce unele schimbări\n" "notesului. În general, este o idee bună să faceți o\n" "copie a lui înainte.\n" "\n" "Dacă alegeți să nu actualizați acum, unele caracteristici\n" "s-ar putea să nu lucreze după așteptări." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Se actualizează notesul" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Indexul se actualizează, încă. Înaintea finalizării, legăturile nu pot fi " "actualizate corect. Efectuarea acestei acțiuni acum ar putea întrerupe " "legăturile. Continuați, totuși?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Se actualizează legăturile" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Se șterg legăturile" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Creați dosarul?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Dosarul „%s” nu există încă.\n" "Doriți să fie creat acum?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Nu s-a putut deschide: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Această pagină nu are un dosar pentru atașamente" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Editarea fișierului: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Editați fișierul cu o aplicație externă. Puteți închide acest dialog când " "terminați" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Un wiki pentru desktop" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Adrian Fita https://launchpad.net/~afita\n" " Arthur Țițeică https://launchpad.net/~arthur-titeica\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " abelcavasi https://launchpad.net/~abel-cavasi" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Index" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "doar în citire" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Caută" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Caută pagini..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Antelegătură" msgstr[1] "%i _Antelegături" msgstr[2] "%i de _Antelegături" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Nu poate fi salvată pagina: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Pentru a continua, puteți salva o copie a acestei pagini sau neglijați\n" "toate modificările. Dacă salvați o copie, modificările vor fi de asemenea\n" "neglijate, dar veți putea restaura copia ulterior." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "Neglijați mo_dificările" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Salvați copia" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Salt la" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Salt la pagina" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "O nouă sub-pagină" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Pagină nouă" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Notați faptul că legarea la o pagină inexistentă\n" "creează de asemenea o nouă pagină automat." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Numele paginii" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Model de pagină" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Pagina există" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Salvați o copie" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Pagina de import" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Fișiere text" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Mută pagina" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "'Mută pagina \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Se actualizează %i legătură de pagină la această pagină" msgstr[1] "Se actualizează %i legături de pagină la această pagină" msgstr[2] "Se actualizează %i de legături de pagină la această pagină" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Secțiune" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Redenumire Pagină" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Redenumirea paginii \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Se actualizează antetul acestei pagini" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Ștergeți pagina" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Ștergeți pagina \"%s\"" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Pagina \"%s\" și toate sub-paginile\n" "și atașamentele sale vor fi șterse" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "" "Ștergeți legăturile de la %i legături de pagină ale acestei pagini" msgstr[1] "" "Ștergeți legăturile de la %i legături de pagini ale acestei pagini" msgstr[2] "" "Ștergeți legăturile de la %i legături de pagini ale acestei pagini" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i fișier va fi șters" msgstr[1] "%i fișiere vor fi șterse" msgstr[2] "%i fișiere vor fi șterse" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Atașează fișier" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Pagina \"%s\" nu are un dosar pentru atașamente" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Inserează imaginile ca legătură" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Notesul" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Deschide notesul" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Notesul implicit" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Adaugă notes" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Selectați vă rog un nume și un dosar pentru notes" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Dosar" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Nu este disponibil nici un modul pentru a afișa acest obiect." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Modulul %s este necesar pentru a afișa acest obiect." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Se actualizează indexul..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Desfă" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Refă" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "De_cupează" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copiază" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "Li_pește" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "Șt_erge" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Comută căsuța de verificare 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Comută căsuța de verificare 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Editează legătura sau obiectul..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Ște_rge legătura" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Dată și timp..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Imagine..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Lis_tă de marcatori" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Listă numerală" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Listă de ca_sete" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Text din _fișier..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Legătură..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Inserează legătură" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Curăță formatarea" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Găsește" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Gă_sește următorul" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Găsește precedentul" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "Înlocui_re..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Numărător de cuvinte..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Mărește" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Micș_orează" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Mărime _normală" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "_Atașament nou" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Ș_abloane de fișiere..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Antet _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Antet 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Antet _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Antet 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Antet _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Antet 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Antet _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Antet 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Antet _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Antet 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "În_groșat" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Îngroșat" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Accentuat" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Accentuat" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "S_ubliniat" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Subliniat" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Tăiat" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Tăiat" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Indice" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "E_xponent" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Literal" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Literal" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Utilizați tasta <Enter> pentru a urma legătura\n" "(Dacă debifați, utilizați <Alt><Enter> pentru aceasta)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Arată cursorul și pe paginile ce nu pot fi editate" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Transformă automat cuvinte \"CamelCase\" în legături" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Transformă automat căi de fișier în legături" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Selectează automat cuvântul curent la aplicarea formatului" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "De-indentare cu tasta <Backspace>\n" "(Dacă debifați, de-indentați cu <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Cu clicuri repetate pe casetă se obțin ciclic toate opțiunile casetei" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "(De-)Indentarea unei liste de itemi afectează și sub-itemii" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Bifând o casetă se bifează și sub-itemii" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Reformatează din mers marcajele wiki" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Formatul implicit de copiere a textului din sertarul de memorie" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Dosar cu șabloane pentru fișiere atașament" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Nu există vreun wiki definit ca: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Copi_ază ca" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Mută textul selectat..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Editează proprietățile" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "Editează _legătura" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copiază le_gătura" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copiază adresa de e-mail" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Deschide dosar" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Deschide cu..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Deschide" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Nu există șabloane instalate" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Dosarul\n" "%s\n" "nu există încă.\n" "Doriți să fie creat acum?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Inserare dată și oră" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendar" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "Legătură la _dată" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Inserare imagine" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Atașați imaginea întâi" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Tip de fișier nesuportat: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Editare imagine" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Locația" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Legătură la" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Lățimea" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Înălțimea" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Resetați mărimea" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Inserare text din fișier" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Editare legătură" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Legătură" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Text" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Următor" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Precedent" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Potrivire exa_ctă" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Cu_vânt întreg" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Expresie _regulată" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Evidențiază" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Găsește" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Opțiuni" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Caută și înlocuiește" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Ce să caute" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Cu ce să înlocuiască" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "În_locuiește" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Înlo_cuiește tot" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Contor de cuvinte" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Paragraf" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Selecţia" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Cuvinte" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Linii" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Caractere" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Caractere excluzînd spațiile" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Mută textul în altă pagină" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Mută" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Mută textul în" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Lasă legătură la noua pagină" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Deschide pagină nouă" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Fișier nou" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interfață" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Editare" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Preferințe" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Suplimente" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Aplicații" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Utilizează font personalizat" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Mai multe" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigurare" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Obține mai multe module de pe rețea" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dependențe" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Fără dependențe" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Eșuat" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Opțional" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Activat" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Supliment" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configurare supliment" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opțiuni pentru suplimentul %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Stabilește editorul de texte implicit" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Proprietăți" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Proprietăți notes" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Schimbări recente" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Astăzi" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Ieri" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Ultima modificare" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Pentru căutări avansate puteți utiliza operatori precum\n" "AND, OR și NOT. Citiți pagina de ajutor pentru mai multe detalii." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Limitează căutarea la pagina curentă și subpaginile ei" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Scor" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Server Web" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Serverul nu este pornit" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Permite acces public" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Portul" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Serverul este pornit" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Serverul este oprit" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Șabloane" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Răsfoire" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Copiază șablonul" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Selectați fișierul" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Exp_andează tot" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "Res_trânge tot" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Golește" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Selectarea dosarului" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Selectarea imaginii" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Panoul din partea stângă" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Panoul din partea dreaptă" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Panoul de la bază" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Panoul de sus" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Stînga-sus" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Stînga-jos" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Drepta-sus" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Dreapta-jos" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Când raportați această avarie includeți vă rog\n" "informația din caseta de text de dedesubt" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Toate fișierele" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Imagini" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Fișier-jurnal" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Fișierul există" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Fișierul cu numele <b>\"%s\"</b> există deja.\n" "Puteți utiliza alt nume sau suprascrie fișierul existent." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Nume fişier" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Răsfoiește" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Suprascrie" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "N-a fost găsit vreun fișier sau dosar pentru acest notes" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Specificați caietul" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Nu poate fi găsit notesul: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Este nevoie de locația destinație pentru export" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Dosarul destinație există și nu este gol; specificați „--overwrite” pentru a " "forța exportul" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "FIșierul destinație există; specificați „--overwrite” pentru a forța exportul" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Am nevoie de fișierul destinație pentru a exporta în MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Am nevoie de dosarul destinație pentru a exporta tot caietul" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Numele de pagină dat este invalid.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Nume de pagină invalid: \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Indexarea apare ca fiind în curs de desfășurare când se încearcă\n" "realizarea unei operații ce necesită indexul.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Nu se poate modifica pagina: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Cuvânt-cheie interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Pagină de pornire" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Document-rădăcină" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Necunoscut>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Eroare în %(file)s la linia %(line)i în apropierea „%(snippet)s”" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetic" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Acest modul vă permite să integrați calcule aritmetice în zim.\n" "Este bazat pe modulul aritmetic de la\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmetic" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Necunoscut(ă)" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Tip" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Mărime:" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Modificată" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Mută aici" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Copiază aici" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Anulează" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Navigator de atașamente" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Poziția în fereastră" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Atașamente" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Arată navigatorul de atașamente" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _atașament" msgstr[1] "%i _atașamente" msgstr[2] "%i _atașamente" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Panoul cu legături inverse" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul adaugă un extra widget care afișează o listă de pagini\n" "care se leagă la pagina curentă.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Legături inverse" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Previzualizați" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "A ocurs o eroare la generarea imaginii.\n" "Doriți totuși să salvați textul-sursă?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Jurnal" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Acest modul transformă o secțiune din caiet într-un jurnal\n" "cu o pagină pe zi, săptămînă sau lună.\n" "Adaugă de asemenea un widget pentru a accesa aceste pagini.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Zi" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Săptămână" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Lună" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "An" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Afișează calendarul în panoul alăturat în locul unui dialog" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Utilizează o pagină pentru fiecare" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "La _ziua" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Calen_dar" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Arată calendarul" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calendar" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "As_tăzi" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Inserare diagramă" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest supliment furnizează un editor de diagrame pentru zim bazat pe " "GraphViz.\n" "\n" "Acesta este un supliment de bază asociat cu zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gramă..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Inserare diagramă" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Modifică diagrama" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Editare fără distragerea atenției" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Acest modul adaugă configurări care permit folosirea lui zim\n" "ca un editor fără distragerea atenției\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Ascunde bara de meniu în modul ecran complet" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Ascunde bara de unelte în modul ecran complet" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Ascunde bara de căi în modul ecran complet" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Ascunde bara de status în modul ecran complet" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Lățimea maximă a paginii" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Marginea verticală" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Culoarea de fundal a textului" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Culoarea textului" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Culoarea de fundal e ecranului" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Inserare Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest supliment furnizează un editor de diagrame bazat pe Ditaa\n" "\n" "Acesta este un supliment de bază asociat cu zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Editare Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Inserare ecuație" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest supliment furnizează un editor de ecuații pentru zim bazat pe latex.\n" "\n" "Acesta este un supliment de bază asociat cu zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "E_cuație" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Editare ecuație" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Inserare Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Acest supliment furnizează un editor grafic bazat pe Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Editare Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Inserare GNU R Plot" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Acest supliment furnizează un editor grafic pentru zim bazat pe GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "Grafic GNU _R" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Editare GNU R Plot" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Suplimentul de calculator în linie nu poate\n" "evalua expresia de lângă cursor." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Calculator în linie" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest supliment vă permite să evaluați rapid cu zim\n" "expresii matematice simple.\n" "\n" "Acesta este un supliment de bază asociat cu zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Expresia nu poate fi analizată" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Evaluează expresii _matematice" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Inserare simbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest supliment adaugă dialogul 'Inserare simbol' și permite\n" "caractere tipografice auto-formatate.\n" "\n" "Acesta este un supliment de bază asociat cu zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Si_mbol..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Sortator de linii" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Acest supliment sortează liniile selectate în ordine alfabetică.\n" "Dacă lista este deja sortată, ordonarea va fi inversată\n" "(A-Z to Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Sortează linii" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Selectați întâi mai mult de o linie de text." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Harta cu legături" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest supliment furnizează un dialog cu reprezentarea\n" "grafică a structurii cu legături a unui notes.\n" "El poate fi utilizat în genul unei \"hărți mentale\"\n" "ce arată cum se relaționează paginile.\n" "\n" "Acesta este un supliment de bază asociat cu zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Afișează harta cu legături" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Tipărește în navigator" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul furnizează o soluție alternativă pentru lipsa\n" "suportului de printare în zim. Exportă pagina curentă\n" "în html și deschide un navigator. Presupunînd că navigatorul\n" "permite posibilitatea de printare, asta vă permite să vă trimiteți\n" "datele către împrimantă în doi pași.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "Ti_părește în navigator" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Notiță rapidă" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul adaugă un dialog pentru a introduce rapid un text sau\n" "conținutul clipboardului într-o pagină zim.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Notiță rapidă..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Secțiune de pagină" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Crează o pagină nouă pentru fiecare notiță" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Titlu" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Deschidere _pagină" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Renunță la notiță?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Introducere partitură" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest plugin furnizează un editor de partituri pentru zim bazat pe GNU " "Lilypond.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Antet comun inclus" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Subsol comun inclus" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "_Partitură" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "Modifică _partitură" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Introducere captură de ecran" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul permite capturarea ecranului și introducerea imaginii\n" "într-o pagină zim.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Comanda pentru capturarea ecranului" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Captură de ecran..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Capturează tot ecranul" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Alege o fereastră sau o regiune" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Întîrziere" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "secunde" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "A apărut o eroare la rularea „%s”" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Introducere diagramă de secvență" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Acest modul furnizează un editor de diagrame de secvență pentru zim bazat pe " "seqdiag.\n" "Permite editarea ușoară a diagramelor de secvență.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Diagramă de secvență" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Editează diagrama de secvență" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Vedere sursă" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Acest modul permite introducerea de 'Blocuri de cod' în pagină. Acestea vor " "fi\n" "afișate ca widgeturi incorporate cu evidențierea sintaxei, numere de linie " "etc.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Auto indentare" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Tastă Home inteligentă" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Evidențiază linia curentă" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Arată marginea din dreapta" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Poziția marginii din dreapta" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Lățimea tab-ului" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Bloc de cod" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Introducere bloc de cod" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Sintaxă" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Numerotează liniile" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Corector ortografic" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Adaugă suport pentru corectare ortografică folosind gtkspell.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Corectare _ortografie" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Nu am putut încărca corectorul ortografic" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Asta ar putea însemna că nu aveți dicționarele\n" "corect instalate." #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Cuprins" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul adaugă un widget extra care arată un\n" "cuprins pentru pagina curentă.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Arată cuprinsul ca widget flotant și nu ca panou lateral" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Arată antetul cu titlul paginii în cuprins" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Cuprins" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Retrogradează" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Promovează" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etichete" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Acest modul furnizează un index de pagină filtrat după modalitatea\n" "selectării etichetelor dintr-un nor.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sortează paginile după etichete" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "neetichetat" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Sortează alfabetic" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Listă de sarcini" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul adaugă un dialog care afișează toate sarcinile deschise în\n" "acest caiet. Sarcinile deschise pot fi căsuțe de bifare deschise\n" "sau elemente marcate cu etichete cum sînt „TODO” sau „FIXME”.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Consideră toate căsuțele de bifare ca sarcini" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Transformă numele de pagini în etichete pentru elemente de sarcini" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" "Data scadenței implicită pentru elementele de sarcini din paginile calendar" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "Marchează sarcinile scadente luni sau marți înainte de weekend" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Etichete care marchează sarcini" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Eticheta pentru sarcina următoare" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Etichetele pentru sarcinile fără acțiune" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Subarbore(i) de indexat" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Subarbore(i) de ignorat" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Caietul trebuie indexat" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Asta e prima dată cînd lista de sarcini este deschisă.\n" "Prin urmare indexul trebuie reconstruit.\n" "În funcție de dimensiunea caietului asta poate\n" "dura pînă la cîteva minute. Data următoare cînd\n" "veți folosi lista de sarcini nu va mai fi nevoie de asta." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtru" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Arată doar sarcinile acționabile" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i element deschis" msgstr[1] "%i elemente deschise" msgstr[2] "%i elemente deschise" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Toate sarcinile" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Neetichetate" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Sarcină" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Dată" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Iconiță pentru zona de notificare" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul adaugă o iconiță la zona de notificare\n" "pentru acces rapid.\n" "\n" "Acest modul are nevoie de Gtk+ versiunea 2.10 sau mai nouă.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Iconiță clasică în zona de notificare,\n" "nu folosi noul stil pentru iconița de notificare pe Ubuntu." #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Arată o iconiță separată pentru fiecare caiet." #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Notiță rapidă..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Altele..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Caiete" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Controlul versiunii" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Acest modul adaugă suport pentru controlul versiunii în caiete.\n" "\n" "Acest modul suportă următoarele sisteme pentru controlul versiunii:\n" "Bazaar, Git și Mercurial.\n" "\n" "Acesta este un modul de bază furnizat cu zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Salvează automat o versiune la intervale regulate" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Versiune salvată automat din zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "S_alvează versiune..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versiuni..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Nu există modificări în acest caiet de la ultima versiune cînd a fost salvat." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Nici o schimbare de la ultima versiune" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Activează controlul versiunii?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Controlul versiunii nu este activat pentru acest caiet.\n" "Doriți activarea?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Suport" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Salvează versiune" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Vă rog introduceți un comentariu pentru această versiune" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versiune salvată din zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versiuni" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Pagină" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Vedere _adnotări" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Selectați o versiune pentru a vedea schimbările dintre acea versiune și " "starea\n" "prezentă. Sau selectați mai multe versiuni pentru a vedea schimbările dintre " "acele versiuni.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Comentariu" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Restaurare versiune" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Arată s_chimbările" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Una lîngă alta" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Sursa adnotată a paginii" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Restaurare pagină la versiunea salvată?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Doriți să restaurați pagina: %(page)s\n" "la versiunea salvată: %(version)s ?\n" "\n" "Toate modificările de la ultima versiune salvată vor fi pierdute!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Modificări" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Ver" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Înregistrare evenimente cu Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Împinge evenimente spre daemonul Zeitgeist." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Pagina de wiki: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Nu am putut găsi șablonul „%s”" #~ msgid "Text Editor" #~ msgstr "Editor de text" #~ msgid "Email client" #~ msgstr "Client de e-mail" #~ msgid "Web browser" #~ msgstr "Navigatorul web" #~ msgid "File browser" #~ msgstr "Navigatorul de fişiere" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/ja.po�������������������������������������������������������������������������0000664�0001750�0001750�00000306245�12613750113�015601� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Japanese translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-07-30 12:27+0000\n" "Last-Translator: DukeDog <duxwan@gmail.com>\n" "Language-Team: Japanese <ja@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "アプリケーションの実行に失敗: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "が非ゼロの終了ステータス%(code)i を返しました" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "実行に失敗: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "デフォルト" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "カレンダー:週開始日(_S):0" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "バグに遭遇した可能性があります" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "ファイル無し: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "読込不能: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "これは通常、ファイル内に無効な文字が含まれている事を意味します" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "詳細情報" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "ファイルは書き込み不可: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "ディスク上でファイルが変更されています: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "カスタマイズ..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "アプリケーションが見つかりません" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "\"%s\" で開く" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "\"%s\"のリンクを開くアプリケーションを設定する" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "タイプが\"%s\"のファイルを開くアプリケーションを設定する" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "アプリケーションを設定する" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "アプリケーションを追加" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "システムのデフォルト" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "名前" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "コマンド" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "デフォルトのアプリケーションにする" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "実行可能ファイル\"%s\"が見つかりませんでした" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "カスタムツール" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "ツールメニューやツールバー、コンテキストメニューに\n" "表示されるカスタムツールを設定することが出来ます。" #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "カスタムツールの編集" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "説明" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "アイコン" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "このコマンドによるデータの改変を禁止" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "出力は現在の選択と置き換えられます" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "ツールバーに表示" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "実行するコマンドでは以下の事前定義パラメータを\n" "使用することが出来ます:\n" "<tt>\n" "<b>%f</b> 一時ファイルとして使用するページソース\n" "<b>%d</b> 現在のページ用の添付ディレクトリ\n" "<b>%s</b> (存在するなら)実際のページソースファイル\n" "<b>%n</b> ノートブックの位置(ファイル/フォルダ)\n" "<b>%D</b> (存在するなら)ドキュメントルート\n" "<b>%t</b> 選択範囲のテキストまたは単語\n" "<b>%T</b> 選択範囲のテキスト(ウィキ書式を含む)\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "エクスポート" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "目次の更新中" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "ノートブックをエクスポート中" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "既存フォルダ: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "指定したフォルダ内には既にデータが存在しており、このフォルダにエクスポートすれば既存ファイルを上書きする可能性があります。 続けて宜しいですか?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "既存ファイル" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "このファイルは既に存在します。\n" "このまま上書きして宜しいですか?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "エクスポートするページの選択" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "ノートブック全体(_N)" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "単一ページ(_P)" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "ページ" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "サブページを含める" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "エクスポートフォーマットの選択" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "その他..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "書式" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "テンプレート" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "ドキュメントルート以降のファイルをフルパスでリンクする" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "ドキュメントルートをURLにマップする" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "出力ファイル/フォルダの選択" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "それぞれのページを個別ファイルにエクスポート" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "全てのページを単一ファイルにエクスポート" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "出力フォルダ" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "インデックスページ" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "出力ファイル" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%iエラーが発生しました、ログを参照して下さい" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i警告が発生しました、ログを参照して下さい" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "エクスポート完了" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "ログを表示(_L)" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "ファイル(_F)" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "編集(_E)" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "表示(_V)" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "挿入(_I)" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "検索(_S)" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "フォーマット(_M)" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "ツール(_T)" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "移動(_G)" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "ヘルプ(_H)" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "パスバー(_A)" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "ツールバー(_T)" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "新規ページ(_N)..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "新規サブページ(_U)..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "別のノートブックを開く(_O)" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "新しいウィンドウで開く(_W)" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "ページのインポート(_I)..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "保存(_S)" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "コピーの保存(_C)" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "エクスポート(_X)..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "送る(_S)..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "ページの移動(_M)..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "ページ名の変更(_R)..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "ページを削除(_D)" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "プロパティ(_T)" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "閉じる(_C)" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "終了(_Q)" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "検索(_S)..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "逆リンク検索(_B)..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "最近の変更..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "ウィキパスをコピー(_L)" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "テンプレート(_T)" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "設定(_E)" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "再読込(_R)" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "添付フォルダを開く(_F)" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "ノートブックフォルダを開く(_N)" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "ドキュメントルートを開く(_D)" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "ドキュメントフォルダを開く(_D)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "添付ファイル(_F)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "外部ファイルを添付" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "ソースを編集(_S)" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "ウェブサーバを起動(_W)" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "インデックスを更新" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "カスタムツール(_T)" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "戻る(_B)" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "前のページへ戻る" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "進む(_F)" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "次のページへ進む" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "親ページ(_P)" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "親ページへ移動" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "子ページ(_C)" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "子ページへ移動" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "前の項目(_P)" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "前のインデックス項目へ移動" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "次の項目(_N)" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "次のインデックス項目へ移動" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "ホーム(_H)" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "ホームへ移動" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "移動(_J)..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "コンテンツ(_C)" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "FAQ(_F)" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "キーの割り当て(_K)" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "バグ(_B)" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "Zimについて(_A)" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "全てのペイン(_A)" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "全てのペインを表示" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "ステータスバー(_S)" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "サイドペイン(_S)" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "サイドペインを表示" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "全画面(_F)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "ノートブック編集(_E)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "ノートブック編集状態の切替え" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "なし(_N)" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "最近使ったページ(_R)" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "最近変更したページ(_C)" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "履歴(_H)" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "アイコンとテキスト(_A)" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "アイコンのみ(_I)" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "テキストのみ(_T)" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "大きいアイコン(_L)" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "小さいアイコン(_S)" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "極小アイコン(_T)" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "メニューを\"点線\"で切り離せるようにする" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "サイドペインへの切替えに<CTRL>+<Space>を使用する" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "ページ削除時にそのページへのリンクも取り除く" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "最後にページを開いていた時のカーソル位置を記録する" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "指定されたファイルまたはフォルダが存在しません。\n" "パスが正しいかどうか確認して下さい。" #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "ファイル/フォルダ無し: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "変更を未保存のページ" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "ノートブックをアップグレードしますか?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "このノートブックは古いバージョンのZimで作成されています。\n" "今すぐ最新バージョンの形式にアップグレードしますか?\n" "\n" "アップグレードには少し時間がかかり、ノートブックがいくつか変更\n" "される可能性があります。アップグレードを行う前にノートブックの\n" "バックアップをとることをお勧めします。\n" "\n" "ここでアップグレードを行わなかった場合、いくつかの機能が期待\n" "通りの働きをしない事があります。" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "ノートブックをアップグレード中" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "インデックスが更新作業中のため、これが完了するまでリンク更新が正しく行えません。 " "今この操作を行えばリンクが破壊される可能性がありますが、それでも続けますか?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "リンクの更新" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "リンクの削除中" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "フォルダを作成しますか?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "フォルダ \"%s\" はまだ存在しません。\n" "今すぐ作成しますか?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "開けません: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "このページには添付フォルダがありません" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "ファイルの編集中: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "外部アプリケーションでファイルを編集中です。 作業が終わればこのダイアログを閉じて下さい。" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "デスクトップ ウィキ" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Akihiro Nishimura https://launchpad.net/~nimu-zh3\n" " DukeDog https://launchpad.net/~windows-ero\n" " EminoMeneko https://launchpad.net/~eminomeneko\n" " Hiroshi Tagawa https://launchpad.net/~kuponuga\n" " Johan Burati https://launchpad.net/~johan-burati\n" " Katz Kawai https://launchpad.net/~katzkawai\n" " OKANO Takayoshi https://launchpad.net/~kano\n" " Tetsuya https://launchpad.net/~dr.hornet\n" " Yajima Hiroshi https://launchpad.net/~yajima\n" " mobilememo@gmail.com https://launchpad.net/~mobilememo\n" " orz.inc https://launchpad.net/~orz-inc" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "インデックス" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "読込専用" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "検索" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "ページ検索..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "逆リンク: %i (_B)..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "ページを保存できません: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "続けるにはこのページのコピーを保存するか 又は全ての変更を破棄\n" "する必要があります。コピーを保存した場合でも変更は破棄されますが\n" "後でそのコピーから復元することができます。" #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "変更を破棄する(_D)" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "コピーを保存(_S)" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "移動先" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "移動先ページ:" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "新規サブページ" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "新規ページ" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "存在しないページへのリンクを作成すれば\n" "自動的に新しいページが作成されます。" #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "ページ名" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "ページテンプレート" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "既存ページ名:" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "コピーの保存" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "ページのインポート" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "テキストファイル" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "ページの移動" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "ページ \"%s\" へ移動" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "リンクしている %i ページを更新" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "ページ名の変更" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "ページ名 \"%s\" を変更" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "ページの見出しを更新" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "ページを削除" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "ページ \"%s\" を削除しますか?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "ページ \"%s\" とその全てのサブページ\n" "及び添付ファイルが削除されます。" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "このページへリンクしている %i ページからリンクを取り除きます" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i ファイルを削除しました" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "添付ファイル" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "ページ \"%s\" は添付用のフォルダを持っていません。" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "リンクとして画像を挿入" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "ノートブック" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "ノートブックを開く" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "デフォルトのノートブック" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "ノートブック追加" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "ノートブックの名前とフォルダを選択してください。" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "フォルダ" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "このオブジェクトを表示する為に利用できるプラグインがありません" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "このオブジェクトを表示するにはプラグイン%sが必要となります" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "インデックスの更新中..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "元に戻す(_U)" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "やり直す(_R)" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "切り取り(_T)" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "コピー(_C)" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "貼り付け(_P)" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "削除(_D)" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "チェックボックス 'V' の切替" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "チェックボックス 'X' の切替" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "リンク/オブジェクトの編集(_E)..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "リンクを消す(_R)" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "日時(_D)..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "画像(_I)..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "箇条書きリスト(_T)" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "連番リスト(_N)" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "チェックボックスリスト(_X)" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "テキストファイル(_F)..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "リンク(_L)..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "リンクの挿入" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "書式のクリア(_C)" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "ページ内検索(_F)..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "次を検索(_X)" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "前を検索(_V)" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "置換(_R)..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "単語統計..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "拡大(_Z)" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "縮小(_O)" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "通常サイズ(_N)" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "添付ファイルを新規作成(_A)" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "ファイルテンプレート(_T)..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "見出し1(_1)" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "見出し1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "見出し2(_2)" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "見出し2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "見出し3(_3)" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "見出し3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "見出し4(_4)" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "見出し4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "見出し5(_5)" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "見出し5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "太字(_S)" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "太字" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "斜体(_E)" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "斜体" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "下線(_M)" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "下線" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "取消線(_S)" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "取り消し線" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "下付き(_U)" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "上付き(_P)" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "固定幅(_V)" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "固定幅" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "カーソルがリンク上にある時 <ENTER> キーでリンク先に移動する\n" "(無効にしている場合は <ALT>+<ENTER> の組み合わせ)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "編集できないページにもカーソルを表示する" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "キャメル記法(CamelCase)の単語を自動的にリンクへ変換する" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "ファイルパスを自動的にリンクへ変換する" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "現在カーソルがある単語に対して自動的にフォーマットを適用する" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "<BackSpace> で字下げを解除する\n" "(無効にしている場合は <Shift><Tab> の組み合わせ)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "クリックによるチェックボックスの状態変更を循環させる" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "リストアイテムの字下げ(解除)をサブアイテムにも適用する" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "チェックボックスへの変更を全てのサブアイテムにも適用する" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "編集中のWikiマークアップを再フォーマットする" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "クリップボードにコピーするテキストのデフォルト形式" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "添付ファイル用テンプレートの格納フォルダ:" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Wikiの定義無し: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "特殊コピー(_A)..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "選択テキストに移動..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "プロパティの編集(_E)" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "リンクの編集(_E)" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "リンクをコピー(_L)" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "メールアドレスをコピー" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "フォルダを開く" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "アプリケーションで開く..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "開く(_O)" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "テンプレート無し" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "フォルダ\n" "%s\n" "はまだ存在しません。\n" "作成して宜しいですか?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "日時の挿入" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "カレンダー(_C)" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "日時ページへリンク(_L)" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "画像を挿入" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "始めに画像を添付" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "未サポートのファイル形式: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "画像プロパティの編集" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "場所" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "リンク先" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "幅" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "高さ" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "サイズのリセット(_R)" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "ファイルからテキストを挿入" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "リンクの編集" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "リンク(_L)" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "テキスト" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "次へ(_N)" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "前へ(_P)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "大小文字を区別(_C)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "単語のみ検索(_W)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "正規表現(_R)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "強調表示(_H)" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "ページ内検索" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "オプション" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "検索と置換" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "検索文字列" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "置換文字列" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "置換(_R)" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "全て置換(_A)" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "単語統計" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "段落" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "選択範囲" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "単語数" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "行数" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "文字数" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "他のページへテキストを移動" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "移動(_M)" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "移動先" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "新しいページへのリンクを残す" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "新しいページを開く" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "新規ファイル" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "インタフェース" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "編集" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "設定" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "プラグイン" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "アプリケーション" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "使用するフォントを指定" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "詳細(_M)" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "設定(_O)" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "依存ファイル" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "無し" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "失敗" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "オプション" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "作者" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "有効" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "プラグイン" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "プラグインの設定" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "プラグイン%sのオプション" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "既定のテキストエディタを設定" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "プロパティ" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "ノートブックのプロパティ" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "最近の変更" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "今日" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "昨日" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "最終更新日時" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "高度な検索用にANDやOR、NOTといった演算子が\n" "使用できます。詳しくはヘルプを参照して下さい。" #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "スコア" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "ウェブサーバー" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "サーバは起動していません" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "パブリックアクセスを許可" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "ポート番号" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "サーバは起動中です" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "サーバは停止中です" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "テンプレート" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "参照" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "テンプレートをコピー" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "ファイルの選択" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "全て開く(_A)" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "全て閉じる(_C)" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "クリア" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "フォルダの選択" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "画像の選択" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "左ペイン" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "右ペイン" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "下ペイン" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "上ペイン" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "左上" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "左下" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "右上" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "右下" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "このバグを報告する場合は下のテキストボックス\n" "にある情報も合わせて入力して下さい" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "全てのファイル" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "画像" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "ログファイル" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "既存ファイル" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "<b>\"%s\"</b> という名前のファイルが既に存在しています。\n" "別の名前にするか、既存のファイルを上書きすることが出来ます。" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "ファイル名" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "参照(_B)" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "上書き" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "このノートブック用のファイル又はフォルダが見つかりません" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "ノートブックを指定して下さい" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "ノートブックが見つかりません: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "エクスポート用の出力場所が必要です" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "出力フォルダが既に存在していて空ではありません、エクスポートを強制するには\"--overwrite\"を指定して下さい" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "出力フォルダが既に存在しています、エクスポートを強制するには\"--overwrite\"を指定して下さい" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "MHTMLをエクスポートする出力ファイルが必要です" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "完全なノートブックをエクスポートする出力フォルダが必要です" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "指定されたページ名は無効です。\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "\"%s\" は不正なページ名です。" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "インデックスが必要な操作を行おうとしていますが\n" "インデックスは現在更新作業中です。\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "ページを更新できません: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Interwikiキーワード" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "ホームページ" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "ドキュメントルート" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "プロフィール" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "未知のファイル名用のプレースホルダ" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "%(file)s内の%(line)i行の\"%(snippet)s\"付近でエラー" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "演算" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "このプラグインはzimに埋込演算機能を追加します。\n" "この機能は http://pp.com.mx/python/arithmetic\n" "の演算モジュールに基づいて作成されています。\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "演算(_A)" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "不明" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "種類" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "サイズ" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "更新" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "ここへ移動(_M)" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "ここへコピー(_C)" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "キャンセル" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "添付ブラウザ" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "ウィンドウの位置" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "添付" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "添付ブラウザを表示" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "添付数(_A): %i" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "逆リンクペイン" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインは現在のページへリンクしているページのリストを表示する拡張ウィジェットを追加します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "逆リンク" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "プレビュー(_P)" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "イメージの生成中にエラーが発生しました。\n" "ソーステキストをこのまま保存して宜しいですか?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "日誌" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "日" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "週" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "月" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "年" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "ダイアログの替わりにサイドペインに表示" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "ページを追加する単位" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "今日(_D)" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "カレンダー(_D)" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "カレンダーを表示" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%Y %B %d %A" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "カレンダー" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "今日(_T)" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "ダイアグラムの挿入" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはGraphVizを利用したダイアグラムエディタをzimに追加します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "ダイアグラム(_G)..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "ダイアグラムの挿入" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "ダイアグラムを編集(_E)" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "集中編集モード" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "このプラグインはzimの使用中、集中力を損なう無駄な表示をしない設定を追加します。\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "全画面表示でメニューバーを表示しない" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "全画面表示でツールバーを表示しない" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "全画面表示でパスバーを表示しない" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "全画面表示でステータスバーを表示しない" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "最大ページ幅" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "縦余白" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "文字背景色" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "文字色" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "画面背景色" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "ditaaを挿入" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはDitaaをベースにしたZim用のダイアグラムエディタを提供します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "Ditaa編集(_E)" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "数式の挿入" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはlatexを利用した方程式エディタをzimに提供します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "数式(_Q)" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "数式の編集(_E)" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Gnuplotの挿入" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "このプラグインはGnuplotを使用するZim用のplotエディタを提供します。\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "Gnuplot編集(_G)" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "GNU R Plotの挿入" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "このプラグインはGNU Rを使用するZim用のplotエディタを提供します。\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU R Plot(_R)" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "GNU R Plot編集(_R)" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "インライン電卓プラグインでカーソル位置の\n" "の計算式を評価することが出来ませんでした。" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "インライン電卓" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインを使えば、Zimで簡単な数式を即座に評価することが出来るようになります。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "数式を解析できません" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "計算式を評価(_M)" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "記号の挿入" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインは特殊な記号や文字を挿入する\"記号を挿入\"ダイアログを追加し、それらの記号や文字を自動的に書式化します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "記号(_M)..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "行ソート" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "このプラグインは選択行をアルファベット順にソートします。\n" "既にリストがソートされていた場合は、逆順にソートされます\n" "(A-Z → Z-A)\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "行のソート(_S)" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "1行以上選択することが前提条件になります。" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "リンクマップ" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはノートブックのリンク構造をグラフ化してダイアログに表示します。\n" "ページ間の相関関係を表示するので、一種の\"マインドマップ\"のような使い方が出来ます。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "リンクマップの表示" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "ブラウザで印刷" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはZimの貧弱な印刷機能の次善策を提供します。\n" "まず現在のページをHTMLとして書き出し、その後ブラウザで開きます。ブラウザに満足のいく印刷機能があるとすれば、この二つの手順を踏むことでデータを印刷でき" "ることになります。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "ブラウザで印刷(_P)" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "クイックノート" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはいくつかのテキストを入力したり、クリップボードの内容を貼り付けたりすることで、素早くZimページを作成できるダイアログを提供します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "クイックノート..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "入力項目毎に新しいページを作成" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "タイトル" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "ページを開く(_P)" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "ノートを破棄しますか?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "楽譜を挿入" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはGNU Lilypondを利用した楽譜エディタをzimに追加します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "通常のインクルードヘッダ" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "通常のインクルードフッタ" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "楽譜(_C)" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "楽譜編集(_E)" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "スクリーンショットの挿入" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはスクリーンショットを撮ってZimページ内に直接挿入することができます。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "スクリーンショット(_S)..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "画面全体をキャプチャ" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "ウィンドウまたは範囲を選択" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "待機時間" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "秒" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "\"%s\"起動中に何らかのエラーが発生しました" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "シーケンス図を挿入" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "このプラグインはseqdiagを利用したシーケンス図エディタをzimに追加します。\n" "このプラグインでシーケンス図の編集を行う事ができるようになります。\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "シーケンス図" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "シーケンス図の編集(_E)" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "ソース表示" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "このプラグインはページ内に‘コードブロック’を追加出来るようにします。\n" "これらは構文強調や行番号等の埋め込みウィジェットとして表示されます\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "自動インデント" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "スマートホットキー" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "現在行を強調表示" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "右余白を表示" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "右余白の位置" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "タブ幅" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "コードブロック" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "コードブロックを挿入" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "構文" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "行番号を表示" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "スペルチェッカ" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "gtkspellを使用したスペルチェック機能を追加します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "スペルチェック(_S)" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "スペルチェックを読み込めませんでした" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "これは適切な辞書がインストールされていない\n" "ことを意味します。" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "目次" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインは現在のページに目次を表示するウィジェットを提供します。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "サイドペインではなく独立したウィジェットとして目次を表示" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "ページタイトルヘッダをToC内に表示" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "目次" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "下位" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "上位" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "タグ" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "このプラグインは左ペイン下部のページインデックスを、上部のタグクラウドにあるタグを選択することによってフィルタリング出来るような機能を追加します。\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "タグでページをソート" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "未タグ" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "アルファベット順にソート" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "タスク一覧" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはノートブック内に存在する全てのタスクを表示するダイアログを提供します。\n" "タスク候補にはチェックボックスか、\"TODO\"または\"FIXME\"としてタグが付けられたアイテムが選ばれます。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "全てのチェックボックスをタスクとする" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "タスクアイテム用にページ名をタグに変換する" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "カレンダーページ内のタスクアイテム用の強制満期日" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "終末を控えた月曜又は火曜のフラグタスク期限" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "タスク処理するラベル" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "次のタスク用のラベル" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "無期限タスク用タグ" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "サブツリーのインデックス" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "サブツリーを無視" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "ノートブックのインデックス作業が必要です" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "初めてタスクリストを開くため、再インデックス化する必要があります。\n" "ノートブックのサイズによってはこの作業に少し時間が掛かる場合も\n" "あります。この作業は初回だけで、次にタスクリストを開く時には必要\n" "ありません。" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "フィルタ" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "操作できるタスクだけを表示" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i の未処理項目" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "全タスク" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "非タグ" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "タスク名" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "日付" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "トレイアイコン" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはZimにすぐアクセス出来るようになるトレイアイコンを提供します。\n" "\n" "このプラグインには Gtk+ 2.10 以降のバージョンが必須となります。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "旧トレイアイコン\n" "(Ubuntuで新しい形式のステータスアイコンを使用しない)" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "ノートブックで個別にアイコンを表示する" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "クイックノート(_Q)..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "その他(_O)..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "ノートブック" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim デスクトップ・ウィキ" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "バージョン管理" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "このプラグインはノートブック用のバージョン管理機能を提供します。\n" "\n" "このプラグインはBazaar、Git、Mercurialバージョン管理機構をサポートしています。\n" "\n" "これはZimに同梱される基幹プラグインです。\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "一定の間隔毎にバージョンを自動保存する" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Zimに自動保存されたバージョン" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "バージョンを保存(_A)..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "バージョン(_V)..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "このノートは最後に保存されたバージョンから全く変更されていません" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "最終バージョンから変更はありません" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "バージョン管理を有効にしますか?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "このノートブックでは現在、バージョン管理は有効になっていません。\n" "有効にして宜しいですか?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "バックエンド" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "保存バージョン" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "このバージョンについてのコメントを入力してください" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Zimに保存されたバージョン" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "バージョン" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "ページ(_P)" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "注釈を表示(_A)" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "バージョンを選択して現在のものとの相違点を表示します。\n" "または複数のバージョンを選択して相互間の相違を見ることもできます。\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "コメント" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "バージョンを復元(_R)" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "変更を表示(_C)" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "サイドバイサイド(_S)" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "ページソースの注釈" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "保存バージョンからの復元を行いますか?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "復元するページ: %(page)s\n" "保存バージョン: %(version)s\n" "この復元を行いますか?\n" "\n" "最終保存バージョン以降に行われた全ての変更は破棄されます!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "変更" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Zeitgeistログイベント" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Zeitgeistデーモンへイベントを送る" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "ウィキページ: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "テンプレート\"%s\"が見つかりません" #~ msgid "Email client" #~ msgstr "メールクライアント" #~ msgid "Web browser" #~ msgstr "ウェブブラウザ" #~ msgid "Output" #~ msgstr "出力" #~ msgid "Prio" #~ msgstr "優先度" #~ msgid "_Filter" #~ msgstr "フィルタ(_F)" #~ msgid "Pages" #~ msgstr "ページ数" #~ msgid "Slow file system" #~ msgstr "低速なファイルシステム" #~ msgid "File browser" #~ msgstr "ファイルブラウザ" #~ msgid "Text Editor" #~ msgstr "テキストエディタ" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/de.po�������������������������������������������������������������������������0000664�0001750�0001750�00000303464�12613750113�015577� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# German translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-12 20:13+0000\n" "Last-Translator: Andreas Klostermaier <Unknown>\n" "Language-Team: German <de@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Anwendung konnte nicht gestartet werden: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "Aufruf von %(cmd)s fehlgeschlagen. Fehlercode: %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Konnte nicht starten: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Standard" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Anscheinend haben Sie einen Fehler gefunden" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Datei nicht gefunden: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Lesen von %s nicht möglich!" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Gewöhnlich bedeutet dies, dass die Datei ungültige Zeichen enthält." #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Details" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Datei ist nicht schreibbar: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Die Datei wurde auf der Festplatte geändert: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Anpassen …" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Keine Anwendungen gefunden" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Mit »%s« öffnen" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Eine Anwendung zum Öffnen von \"%s\"-Links konfigurieren" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Anwendung auswählen, mit der Dateien vom Typ \"%s\" geöffnet werden sollen." #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Anwendungen konfigurieren" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Anwendung hinzufügen" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Systemvorgabe" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Name" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Befehl" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Zur Standardanwendung machen" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Konnte die ausführbare Datei \"%s\" nicht finden" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Benutzerdefinierte Werkzeuge" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Sie können benutzerdefinierte Werkzeuge erstellen, die im Werkzeugmenü,\n" "der Werkzeugleiste und in Kontextmenüs erscheinen." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Benutzerdefiniertes Werkzeug bearbeiten" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Beschreibung" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Symbol" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Befehl verändert keine Daten" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Ausgabe soll aktuelle Auswahl ersetzen" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Erscheint in Werkzeugleiste" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "\"Die folgenden Parameter werden im Befehl ersetzt, wenn er ausgeführt " "wird:\\n\"\n" "\"<tt>\\n\"\n" "\"<b>%f</b> eine temporäre Datei mit dem Quelltext der aktuellen Seite\\n\"\n" "\"<b>%d</b> das Anhangverzeichnis der aktuellen Seite\\n\"\n" "\"<b>%s</b> die Quelltextdatei der aktuellen Seite (falls vorhanden)\\n\"\n" "\"<b>%n</b> der Pfad des Notizbuchs (Datei oder Ordner)\\n\"\n" "\"<b>%D</b> das Wurzelverzeichnis des Dokuments (falls vorhanden)\\n\"\n" "\"<b>%t</b> markierter Text oder Wort unter dem Cursor\\n\"\n" "\"<b>%T</b> markierter Text oder Wort unter dem Cursor mit Wiki-" "Formatierung\\n\"\n" "\"</tt>\\n\"\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportieren" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Index wird aktualisiert …" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Notizbuch wird exportiert" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Ordner besteht bereits: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Das Verzeichnis existiert bereits und enthält Dateien. Wenn Sie in dieses " "Verzeichnis exportieren, überschreiben Sie vielleicht existierende Dateien. " "Wollen Sie weiter machen?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Die Datei existiert bereits" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Diese Datei existierst bereits.\n" "Soll sie überschrieben werden?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Wählen Sie die zu exportierenden Seiten" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Komplettes _Notizbuch" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Einzelne _Seite" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Seite" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Unterpakete einschließen" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Wählen Sie das Exportformat" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Anderes …" #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Format" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Vorlage" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Verlinke Dateien im Dokumentverzeichnis mit vollständigem Pfad" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Dokumentverzeichnis auf URL abbilden" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Weitere Vorlagen online holen" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Wählen Sie den Ausgabeordner" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Jede Seite in eine eigene Datei exportieren" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Alle Seiten in eine einzige Datei exportieren" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Ausgabeverzeichnis" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Indexseite" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Ausgabedatei" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" "Es sind %(n_error)i Fehler und %(n_warning)i Warnungen aufgetreten (siehe " "Protokoll)" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i Fehler aufgetreten, siehe Log" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i Warnungen aufgetreten, siehe Log" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Export abgeschlossen" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "_Protokoll anzeigen" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Datei" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Bearbeiten" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Ansicht" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Einfügen" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Suchen" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mat" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Werkzeuge" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Gehe zu" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Hilfe" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Pf_adleiste" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Werkzeugleiste" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Neue Seite …" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Neue Unter_seite..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "Ein neues Notizbuch _öffnen" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "In neuem _Fenster öffnen" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "Seite _importieren..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Speichern" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Eine _Kopie speichern..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xportieren..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Senden an …" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "Seite _verschieben..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Seite _umbenennen..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "Seite _löschen" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Eigenschaften" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Schließen" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Beenden" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "Notizbuch durchsuchen" #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Suche nach _Backlinks..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Letzte Änderungen..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Seiten_pfad kopieren" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Vorlagen" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Einstellungen" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Neu laden" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "_Anhangverzeichnis öffnen" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "N_otizbuchverzeichnis öffnen" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "_Dokumentverzeichnis öffnen" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "_Dokumentverzeichnis öffnen" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Datei an_hängen" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Externe Datei anhängen ..." #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "_Quelltext bearbeiten" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "_Webserver starten" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Index aktualisieren" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Benu_tzerdefinierte Werkzeuge" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Zurück" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Zurück" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Weiter" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Eine Seite weiter" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Übergeordnete Seite" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Gehe zur übergeordneten Seite" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Untergeordnete Seite" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Gehe zur untergeordneten Seite" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Vorige Seite im Index" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Gehe zur vorherigen Seite" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Nächste Seite im Index" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Gehe zur nächsten Seite" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Startseite" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Startseite" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Springe zu..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Inhalt" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Tastenkombinationen" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Fehlermeldungen" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Über" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Alle Fensterbereiche" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Zeige alle Fensterbereiche" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Statuszeile" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Seitenbereiche" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Zeige Seitenbereiche" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Vollbild" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Schr_eibschutz für Notizbuch" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Notizbuch bearbeiten" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Nichts" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Zuletzt besuchte Seiten" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Zuletzt _geänderte Seiten" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Verlauf" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Seiten Hierarchie" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Symbole _und Text" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Nur _Symbole" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Nur _Text" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Große Symbole" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Kleine Symbole" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Winzige Symbole" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Menüs 'abreißbar' machen" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Mit <Strg><Leertaste> in die Seitenleiste springen" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Links entfernen, wenn Seiten gelöscht werden" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Verwende immer die letzte Cursorposition beim Öffnen einer Seite" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Die angegebene Datei oder das Verzeichnis existiert nicht.\n" "Bitte überprüfen Sie ob die Pfadangabe korrekt ist." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Datei oder Verzeichnis %s existiert nicht" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Die Seite hat ungespeicherte Änderungen" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Notizbuch aktualisieren?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Diese Notizbuch wurde mit eine älteren Version von Zim erstellt\n" "Wollen Sie es auf den neuesten Stand aktualisieren?\n" "\n" "Die Aktualisierung wird etwas dauern und Änderungen am\n" "Notizbuch vornehmen. Es wird empfohlen, das Nozibuch vorher \n" "zu sichern.\n" "\n" "Wenn Sie die Aktualisierung jetzt nicht durchführen, arbeitet Zim\n" "unter Umständen nicht so wie erwartet." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Notizbuch wird aktualisiert" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Der Index wird gerade aktualisiert. Bis dieser Vorgang abgeschlossen ist " "können Verknüpfungen nicht korrekt aktualisiert werden. Das Ausführen dieser " "Aktion kann zu fehlerhaften Verknüpfungen führen. Wollen sie trotzdem " "fortfahren?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Anpassen der Verknüpfungen" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Links entfernen" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Verzeichnis erstellen?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Der Ordner \"%s\" existiert nicht.\n" "Möchten Sie ihn jetzt anlegen?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "%s kann nicht geöffnet werden" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Diese Seite hat kein Verzeichnis für Anhänge" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Datei bearbeiten: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Sie bearbeiten eine Datei in einer externen Anwendung. Schließen Sie den " "Dialog, wenn dieser Vorgang beendet ist." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Ein Desktop Wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Andreas Klostermaier https://launchpad.net/~apx-ankl\n" " Arnold S https://launchpad.net/~arnold.s\n" " BBO https://launchpad.net/~bbo\n" " Benedikt Schindler https://launchpad.net/~benedikt-schindler\n" " Christoph Fischer https://launchpad.net/~christoph.fischer\n" " Christoph Zwerschke https://launchpad.net/~cito\n" " Fabian Affolter https://launchpad.net/~fab-fedoraproject\n" " Fabian Stanke https://launchpad.net/~fmos\n" " Ghenrik https://launchpad.net/~ghenrik-deactivatedaccount\n" " Gunnar Thielebein https://launchpad.net/~lorem-ipsum\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Johannes Reinhardt https://launchpad.net/~johannes-reinhardt\n" " Klaus Vormweg https://launchpad.net/~klaus-vormweg\n" " Matthias Mailänder https://launchpad.net/~mailaender\n" " Murat Güven https://launchpad.net/~muratg\n" " P S https://launchpad.net/~pascal-sennhauser\n" " SanskritFritz https://launchpad.net/~sanskritfritz+launchpad\n" " Tobias Bannert https://launchpad.net/~toba\n" " hruodlant https://launchpad.net/~hruodlant\n" " lootsy https://launchpad.net/~lootsy\n" " mrk https://launchpad.net/~m-r-k\n" " smu https://launchpad.net/~smu\n" " sojusnik https://launchpad.net/~sojusnik\n" " ucn| https://launchpad.net/~ucn\n" " zapyon https://launchpad.net/~zapyon" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Index" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "schreibgeschützt" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Suche" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Seiten durchsuchen..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Backlink..." msgstr[1] "%i _Backlinks..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Seite %s konnte nicht gespeichert werden" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Sie können an dieser Stelle eine Kopie dieser Seite speichern oder \n" "die Änderungen verwerfen. Wenn Sie eine Kopie speichern, werden \n" "die Änderungen auch verworfen, Sie können Sie aber später aus der \n" "Kopie wieder herstellen." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "Änderungen _verwerfen" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Kopie speichern" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Gehe zu" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Gehe zur Seite" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Neue Unterseite" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Neue Seite" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Bitte beachten Sie, dass der Link auf eine nicht\n" "existierende Seite automatisch eine neue, leere \n" "Seite erzeugt" #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Seitenname" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Seiten Vorlage" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Seite existiert bereits" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Kopie speichern" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Seite importieren" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Textdateien" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Seite verschieben" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Seite \"%s\" verschieben" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "%i Link auf diese Seite werden angepasst" msgstr[1] "%i Links auf diese Seite werden angepasst" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Abschnitt" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Seite umbenennen" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Seite \"%s\" umbenennen" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Seitentitel wird angepasst" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Seite löschen" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Seite \"%s\" löschen?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Seite \"%s\" sowie alle Unterseiten \n" "und Anhänge werden gelöscht" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Entferne Links von %i Seite, die zu dieser Seite verlinkt" msgstr[1] "Entferne Links von %i Seiten, die zu dieser Seite verlinken" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i Datei wird gelöscht" msgstr[1] "%i Dateien werden gelöscht" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Datei anhängen" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Seite \"%s\" hat kein Verzeichnis für Anhänge" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Bild als Link einfügen" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Notizbuch" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Notizbuch öffnen" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Standard-Notizbuch" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Notizbuch hinzufügen" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Bitte wählen sie einen Namen und Ort für das Notizbuch" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Verzeichnis" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "Um ein neues Notizbuch anzulegen, muss ein leerer Ordner ausgewählt werden.\n" "Es kann auch ein bereits vorhandener Zim Notizbuch-Ordner ausgewählt " "werden.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Kein Plugin zur Anzeige dieses Objekts verfügbar." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Plugin %s wird benötigt, um das Objekt anzuzeigen." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Der Index wird eneuert..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Rückgängig" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Wiederherstellen" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Ausschneiden" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopieren" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Einfügen" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Löschen" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Ankreuzfeld 'v' umschalten" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Ankreuzfeld 'x' umschalten" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "Link oder Objekt _bearbeiten..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Ve_rknüpfung entfernen" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Datum und Zeit..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Bild..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Aufz_ählung" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Nummerierte Liste" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Ankreu_zliste" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Text aus _Datei..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Link..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Verknüpfung einfügen" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Formatierung entfernen" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Suchen…" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "_Weitersuchen" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "_Rückwärts suchen" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Ersetzen…" #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Wortanzahl..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "Ver_größern" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Ver_kleinern" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Standardgröße" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Neuer _Anhang" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Datei_vorlagen ..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Überschrift _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Überschrift 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Überschrift _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Überschrift 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Überschrift _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Überschrift 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Überschrift _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Überschrift 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Überschrift _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Überschrift 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Fett" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Fett" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "Hervorgehoben" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Kursiv" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "Markiert" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Markiert" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Durchgestrichen" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Durchgestrichen" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "Subskript" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "Superskript" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Vorformatiert" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Vorformatiert" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Mit der <Return>-Taste können Sie Links folgen.\n" "(Wenn deaktiviert, benutzen Sie <Alt><Return>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Auch bei schreibgeschützten Seiten Schreibmarke anzeigen" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "'KamelSchreibWeise' automatisch verlinken" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Dateien automatisch verlinken" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" "Das aktuelle Wort automatisch auswählen, wenn Sie die Formatierung ändern." #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "<Backspace (Zurück)>-Taste verringert den Einzug\n" "(Alternativ <Hochstell><Backspace>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Wiederholtes Anklicken des Ankreuzfelds schaltet zwischen den möglichen " "Zuständen um" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Ein- oder Ausrücken von Listenpunkten ändert Unterpunkte" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Ankreuzlisten rekursiv ankreuzen" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Wiki-Markup während der Eingabe anwenden" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Standardformat für das Kopieren von Text in die Zwischenablage" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Speicherort für Vorlagen von Dateianhängen" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Kein Wiki definiert: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopieren _Als" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Ausgewählten Text verschieben" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "Eigenschaften editieren" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "Link _bearbeiten" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "_Verknüpfung kopieren" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "E-Mail-Adresse kopieren" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Ordner öffnen" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Öffnen mit..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "Öffnen" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Keine Vorlagen installiert" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Der Ordner\n" "%s\n" "existiert nicht.\n" "Soll er jetzt angelegt werden?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Datum und Uhrzeit einfügen" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalender" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "Ver_linke datum" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Bild einfügen" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Bild zuerst anhängen" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Dateiformat wird nicht unterstützt: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Bild bearbeiten" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Ort" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Verknüpfen mit" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Breite" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Höhe" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "Größe zu_rücksetzen" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Text aus Datei einfügen" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Verknüpfung bearbeiten" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Verknüpfung erstellen" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Text" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Nächstes" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Vorheriges" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Groß-/Kleinschreibung" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Ganzes _Wort" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Regulärer Ausdruck" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Hervorheben" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Suchen" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Einstellungen" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Suchen und Ersetzen" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Suche was" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Ersetzen durch" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Ersetzen" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "_Alles ersetzen" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Wortanzahl" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Absatz" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Auswahl" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Worte" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Zeilen" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Zeichen" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Zeichen ohne Leerzeichen" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Verschiebe Text auf andere Seite" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Verschieben" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Verschieben nach" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Link zur neuen Seite einfügen" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Neue Seite öffnen" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Neue Datei" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Erscheinungsbild" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Bearbeiten" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Einstellungen" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Plugins" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Anwendungen" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Eigene Schriftart benutzen" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Mehr" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "K_onfigurieren" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Weitere Plugins online holen" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Abhängigkeiten" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Keine Vorraussetzungen" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Ok" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Nicht erfüllt" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Optional" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Aktiviert" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Plugin" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Plugin einrichten" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Einstellungen für Plugin %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Standard-Texteditor festlegen" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Eigenschaften" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Eigenschaften des Notizbuchs" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Letzte Änderungen" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Heute" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Gestern" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Zuletzt geändert" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Für die fortgeschrittene Suche können die logischen Verknüpfungen AND, OR " "und NOT verwendet werden. Mehr Informationen dazu finden sie aus den Hilfe " "Seiten." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Suche auf die aktuelle Seite und Unterseite(n) einschränken" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Bewertung" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Webserver" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server wurde nicht gestartet" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Öffentlichen Zugriff erlauben" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server gestartet" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server gestoppt" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Vorlagen" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Durchblättern" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopiere Vorlage" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Datei auswählen" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Alle _aufklappen" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "Alle ein_klappen" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Leeren" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Verzeichnis auswählen" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Bild auswählen" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Oben>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Linker Fensterbereich" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Rechter Fensterbereich" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Unterer Fensterbereich" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Oberer Fensterbereich" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Oben links" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Unten links" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Oben rechts" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Unten rechts" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Wenn Sie diesen Fehler melden wollen, senden Sie bitte die Meldungen aus der " "folgenden Textbox mit." #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Alle Dateien" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Bilder" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Protokolldatei" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Datei exisiert" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Eine Datei mit dem Namen <b>\"%s\"</b> existiert bereits,\n" "Sie können einen anderen Namen vorschlagen oder die bestehende Datei " "überschreiben." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Dateiname" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Durchsuchen" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Überschreiben" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Konnte für dieses Notizbuch keine Datei bzw. kein Verzeichnis finden" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Bitte ein Notizbuch angeben" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Konnte Notizbuch %s nicht finden" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Für den Export wird ein Ausgabeziel benötigt" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Ausgabeverzeichnis existiert und ist nicht leer, Export kann mit \"--" "overwrite\" erzwungen werden" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Ausgabedatei existiert, Export kann mit \"--overwrite\" erzwungen werden" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Export von MHTML benötigt Ausgabedatei" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Export des gesamten Notizbuchs benötigt Ausgabeverzeichnis" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Der Seitenname ist ungültig\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Ungültiger Seitenname \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Ein Vorgang braucht Zugang auf den Index.\n" "Dieser wird gerade aktualisiert, daher kann nicht auf ihn zugegriffen " "werden.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Seite %s kann nicht geändert werden" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Interwiki Schlüsselwort" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Startseite" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Zim-Startverzeichnis" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Unbekannt>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Fehler in %(file)s in der Zeile %(line)i nahe bei \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Arithmetisch" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Durch dieses Plugin können arithmetische Berechnungn in Zim eingebettet " "werden.\n" "Es basiert auf dem Modul arithmetic von\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Arithmetisch" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Unbekannt" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Dateityp" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Größe" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Geändert" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "Hierher _verschieben" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "Hierher _kopieren" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Abbrechen" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Attachment Browser" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" "Dieses Plugin erstellt eine Auflistung der Anhänge\n" "der aktuellen Seite in Form einer Symbolansicht\n" "unterhalb der aktuellen Seite.\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Position im Fenster" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Dateianhänge" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Anhänge anzeigen" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Anhang" msgstr[1] "%i _Anhänge" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Fensterbereich für RückLinks" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin fügt ein zusätzliches Widget hinzu, das eine Liste\n" "von Seiten anzeigt, die auf die aktuelle Seite verweisen.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "RückLinks" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Vorschau" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Während des Erstellen der Grafik trat ein Fehler auf.\n" "Möchten Sie den Quelltext trotzdem speichern?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "Lesezeichenleiste" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\tDiese Erweiterung stellt eine Lesezeichenleiste zur Verfügung.\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "Lesezeichen speichern" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "Neue Lesezeichen am Anfang der Leiste einfügen" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "Lesezeichen hinzufügen" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "Lesezeichen" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "Sollen alle Lesezeichen gelöscht werden?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "Vollständigen Seitennamen anzeigen" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "Neuen Namen vergeben" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "Ursprünglichen Namen verwenden" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "Entfernen" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "Alle entfernen" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "In neuem Fenster öffnen" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "Auf aktuelle Seite einstellen" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Tagebuch" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Dieses Plugin erstellt einen Journal-Abschnitt im Notebook\n" "mit einer Seite pro Tag, Woche oder Monat.\n" "Fügt auch ein Kalender Widget hinzu, um auf diese Seiten zugreifen zu " "können.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Tag" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Woche" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Monat" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Jahr" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Kalender in der Seitenleiste statt als eigenen Dialog anzeigen." #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Verwende jeweils eine Seite" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Tagebuch-Seite beim Öffnen im Index aufklappen" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Heute" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Kalen_der" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Kalender anzeigen" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d. %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalender" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Heute" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Diagramm einfügen" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin erlaubt das Erstellen von Schaubildern in zim mit Hilfe von " "GraphViz.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gramm" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Diagramm einfügen" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Diagramm bearbeiten" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Ablenkungsfreier Bearbeitungsmodus" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Dieses Plugin fügt Zim einen ablenkungsfreien \n" "Bearbeitungsmodus hinzu.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Menüleiste im Vollbildmodus verstecken" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Werkzeugleiste im Vollbildmodus verstecken" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Pfadleiste im Vollbildmodus verstecken" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Statusleiste im Vollbildmodus verstecken" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Maximale Seitenbreite" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Vertikaler Abstand" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Farbe des Texthintergrunds" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Textfarbe" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Farbe des Bildschirmhintergrunds" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Ditaa einfügen" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin ermöglicht es Ditaa basierte Diagramme in zim einzugen.\n" "Dieses Plugin gehört zum Lieferumfang von Zim\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "Ditaa _Editieren" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Formel einfügen" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin stellt einen LaTeX-basierten Gleichungseditor zur Verfügung.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "_Gleichung" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "Formel b_earbeiten" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Füge Gnuplot ein" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Dieses Plugin liefert einen Ploteditor für ZIM, welcher auf Gnuplot " "basiert.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "Gnuplot b_earbeiten" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "GNU R Diagramm einfügen" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Dieses Plugin bietet einen Editor um GNU R Diagramme in zim zu erstellen und " "einzubinden.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Diagramm" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "GNU R Diagramm bearbeiten" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Der Taschenrechner konnte die \n" "eingegebene Formel nicht berechnen." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Taschenrechner" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin ermöglicht die schnelle Berechnung einfacher mathematischer " "Ausdrücke in zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Kann Ausdruck nichtz auswerten" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "_Mathematischen Ausdruck auswerten" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Symbol einfügen" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Diese Plugin fügt den 'Symbol einfügen'-Dialog zum Menü hinzu.\n" "Der ermöglicht die automatische Formatierung typografischer \n" "Sonderzeichen.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von Zim\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbol..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Alphabetische Sortierung" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Dieses Plugin sortiert markierte Zeilen in alphabetischer Reihenfolge. Wurde " "einmal sortiert, dann wird ein weiterer Aufruf die Reihenfolge umkehren. (A-" "Z zu Z-A)\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Zeilen sortieren" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Bitte wählen Sie mehr als eine Zeile aus" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Link-Struktur" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin stellt einen Dialog mit einer graphischen \n" "Darstellung der Linkstruktur des Notizbuchs bereit. Es \n" "kann als eine Art \"mind map\" verwendet werden, um \n" "zu zeigen, wie einzelne Seiten aufeinander verweisen.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Zeige Link-Struktur" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Druck in HTML-Datei" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin stellt ein Workaround für die fehlende Druckfunktion \n" "in Zim bereit. Es exportiert die aktuelle Seite in eine HTML-Datei und \n" "öffnet diese im Browser. Darüber kann die Datei dann gedruckt werden.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von Zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Druck in HTML-Datei" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Kurz Notiz" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin stellt ein Dialogfenster zur Verfügung, dass \n" "es erlaubt Text oder den Inhalt der Zwischenablage in eine\n" "Notiz einzufügen.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Kurz Notiz" #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Seiten-Abschnitt" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Erstelle eine neue Seite für jede Notiz" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Titel" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Seite _Öffnen" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Notiz verwerfen?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Notensatz einfügen" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin stellt einen Notensatz-Editor für Zim bereit, basierend auf " "GNU Lilypond.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Stets als Kopf eingefügt" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Stets als Fuß eingefügt" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "_Punkte" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "Notensatz _editieren" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Bildschirmfoto einfügen" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin ermöglicht es ein Bildschirmfoto aufzunehmen \n" "und in eine Seite einzufügen.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Screenshot Befehl" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Bildschirmfoto …" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Ganzen Bildschirm aufnehmen" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Fenster oder Bereich auswählen" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Verzögerung" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "Sekunden" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Ein Fehler trat bei der Bearbeitung von \"%s\" auf." #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Sequenzdiagramm einfügen" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Dieses Plugin stellt einen auf seqdiag basierenden Sequenzdiagramm-Editor " "für zim bereit.\n" "Es erlaubt die einfache Bearbeitung von Sequenzdiagrammen.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Sequenzdiagramm" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Sequenzdiagramm bearbeiten" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Quellcode-Ansicht" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Dieses Diagramm erlaubt das einfügen von 'Code-Blöcken' in die Seite. Diese " "Blöcke werden\n" "als eingebettete Widgets mit Syntaxhervorhebung, Zeilennummern usw. " "angezeigt.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Auto-Einrückung" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Intelligente Home-Taste" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Aktuelle Zeile hervorheben" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Rechten Rand anzeigen" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Position des rechten Randes" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Tabulatorbreite" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Code-Block" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Code-Block einfügen" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Syntax" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Zeilennummern anzeigen" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Rechtschreibprüfung" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin stellt eine automatische Rechtschreibprüfung \n" "zur Verfügung.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Recht_schreibung überprüfen" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Rechtschreibprüfung konnte nicht geladen werden" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Dies könnte bedeuten, dass die richtigen Wörterbücher nicht installiert sind" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "Linksbündig" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Zentriert" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "Rechtsbündig" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Nicht angegeben" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Tabellen-Editor" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "Mit diesem Plugin kannst du eine Tabelle in eine wiki-Seite einbetten. " "Tabellen werden als GTK TreeView widgets angezeigt.\n" "Außerdem wird die Funktion durch die Möglichkeit erweitert Tabellen in " "verschiedene Formate (z.B. HTML/LaTeX) umzuwandeln.\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "mit Linien" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "keine Gitternetzlinien" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "Horizontale Linien" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "Senkrechte Linien" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Hilfe-Leiste anzeigen" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Raster" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Tabelle" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Zeile hinzufügen" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Zeile entfernen" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Zeile duplizieren" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "Zeile hochschieben" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "Zeile runterschieben" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Spalten ändern" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Hilfe öffnen" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Zeile löschen" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Zellen-Inhaltslink öffnen" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "Die Tabelle muss mindestens eine Zeile haben!\n" " Es wurde nichts gelöscht." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Bitte erst eine Zeile markieren, bevor die Taste gedrückt wird." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Tabelle einfügen" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Tabelle bearbeiten" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Tabellen-Spalten verwalten" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Spalte 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "Automatisch\n" "Umbrechen" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Ausrichten" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Spalte hinzufügen" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Spalte entfernen" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Spalte nach oben bewegen" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Spalte nach unten bewegen" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Eine Tabelle muss mindestens eine Spalte haben." #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Inhaltsverzeichnis" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin fügt ein Widget hinzu, das ein\n" "Inhaltsverzeichnis für die aktuelle Seite anzeigt.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von Zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Zeige Inhalt als schwebendes Widget statt in der Seitenleiste" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Seitentitel im Inhaltsverzeichnis anzeigen" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Inhalt" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Herabstufen" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Heraufstufen" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Schlagworte" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Dieses Plugin unterstützt eine im Verhältnis stehende Seitenindexfilterung " "von ausgewählten Schlagwörtern in einer Wolke\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Vollständigen Seitennamen anzeigen" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sortiere Seiten nach Schlagworten" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "ohne Schlagworte" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Alphabetisch sortieren" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Aufgabenliste" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin zeigt alle offenen Aufgaben. Offene Aufgaben sind entweder \n" "offene Ankreuzkästchen oder Elemente, die mit 'FIXME' oder 'TODO' markiert " "wurden.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von Zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Alle Ankreuzfelder als Aufgaben interpretieren" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Seitenname in tags für die Aufgabenliste umwandeln" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Implizites Fälligkeitsdatum für Aufgaben auf Kalenderseiten" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Aufgaben, die am Montag oder Dienstag fällig sind, schon vor dem Wochenende " "anzeigen" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Kennzeichnungen für Aufgaben" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Beschriftung für nächste Aufgabe" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Kennzeichen für Aufgaben, die keine Aktion erfordern" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Zu indizierende Unterbäume" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Zu überspringende Unterbäume" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Indexiere Notizbuch" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Die Aufgabenliste wird gerade zum ersten Mal verwendet.\n" "Dafür muss der Index neu erstellt werden. Abhängig von \n" "der Größe des Notizbuchs kann das einige Minuten \n" "dauern. Dieser Vorgang ist einmalig und bei der nächsten\n" " Nutzung der Aufgabenliste nicht noch einmal nötig." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Nur ausführbare Aufgaben anzeigen" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i offene Aufgabe" msgstr[1] "%i offene Aufgaben" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Alle Aufgaben" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Ohne Tags" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Aufgabe" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Datum" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Benachrichtigungsfeldsymbol" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin fügt ein Informationssymbol zum Benachrichtigungsfeld hinzu\n" "Sie benötigen Gtk+ ab der Version 2.10, um es einsetzen zu können.\n" "\n" "Dieses Plugin gehört zum Lieferumfang von Zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klassisches Informations-Symbol,\n" "verwende nicht das Symbol im neuen Ubuntu Stil" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Ein eigenes Symbol für jedes Notizbuch anzeigen" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Kurz Notiz" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Weitere …" #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Notizbücher" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop-Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Versionskontrolle" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dieses Plugin ermöglicht eine Versionsverwaltung in ihrem Notizbuch.\n" "Unterstützt werden Bazaar, Git und Mercurial Versionswerwaltungen.\n" "Dieses Plugin gehört zum Lieferumfang von Zim\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Automatisch speichern in regelmäßigen Abständen" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automatisch gespeicherte Version" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Eine V_ersion speichern..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versionen..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Seit der letzten Sicherung wurde dieses Notizbuch nicht geändert." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Keine Änderung seit der letzten Sicherung" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Versionskontrolle anschalten?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Die Versionskontrolle ist für dieses Notizbuch nicht aktiviert.\n" "Wollen Sie sie aktivieren?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Backend" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Version speichern" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Bitte geben Sie eine Beschreibung für diese Fassung ein" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Gespeicherte Version aus Zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versionen" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Seite" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "_Anmerkungen" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Wählen Sie eine Version aus, um die Unterschiede zwischen der Version und \n" "dem aktuellen Stand anzeigen zu lassen. Wenn Sie zwei Versionen auswählen, \n" "werden die Unterschiede dieser Versionen angezeigt.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Kommentar" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "Version wiederherstellen" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Unterschiede anzeigen" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_nebeneinander" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Quelltext mit Anmerkungen" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Aktuellen Stand mit gespeicherter Version überschreiben?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Möchten Sie die Seite %(page)s\n" "mit der gespeicherten Version %(version)s überschreiben?\n" "\n" "Alle Änderungen seit dieser Version gehen verloren!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Änderungen" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Ereignisse mit Zeitgeist protokollieren" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Ereignisse per Zeitgeist-Dämon aufzeichnen" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wiki-Seite: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Konnte die Vorlage \"%s\" nicht finden" #~ msgid "File browser" #~ msgstr "Dateibrowser" #~ msgid "Web browser" #~ msgstr "Web-Browser" #~ msgid "Match c_ase" #~ msgstr "_Groß- und Kleinschreibung beachten" #~ msgid "Pages" #~ msgstr "Seiten" #~ msgid "Output" #~ msgstr "Ausgabe" #~ msgid "Slow file system" #~ msgstr "Langsames Dateisystem" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "_Filter" #~ msgstr "_Filter" #~ msgid "Text Editor" #~ msgstr "Texteditor" #~ msgid "Email client" #~ msgstr "E-Mail-Programm" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/ko.po�������������������������������������������������������������������������0000664�0001750�0001750�00000245325�12613750113�015621� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Korean translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-07-30 23:07+0000\n" "Last-Translator: sejong lee <umlstudy@gmail.com>\n" "Language-Team: Korean <ko@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "어플리케이션 실행 실패: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "비-제로 종료 상태로 돌아감 %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "다음 항목 실행 실패 : %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "기본값" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "달력:주시작일(_S):1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "버그인 것 같습니다." #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "파일이 존재하지 않습니다: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "%s 을 읽을 수 없습니다." #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "이것은 화일이 적절하지 않은 문자셋을 가지고 있다는 것을 의미합니다." #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "자세한 내용" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "파일에 쓰기 권한이 없습니다: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "디스크에서 변경된 파일: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "사용자 정의..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "어플리케이션을 찾을 수 없습니다." #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "\"%s\"(으)로 열기" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "\"%s\" 링크를 열 프로그램을 설정" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "\"%s\" 유형의 파일을 열 프로그램을 설정" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "응용프로그램 설정" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "응용프로그램 추가" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "시스템 기본값" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "이름" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "명령" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "기본 응용프로그램으로 지정" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "사용자 지정 도구" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "도구 메뉴와 도구 바 또는 컨텍스트 메뉴에 나타날 사용자 정의 도구를 구성할 수 있습니다" #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "사용자 지정 도구 편집" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "설명" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "아이콘" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "명령이 데이터를 수정하지 않습니다" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "툴바에 보이기" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "내보내기" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "인덱스를 업데이트 하는 중" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "노트북을 내보내는 중 ..." #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "폴더가 이미 존재하며 폴더가 비어있지 않습니다. 이 폴더로 내보내면 기존의 파일들이 지워질 수 있습니다. 계속 하시겠습니까?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "파일이 존재합니다" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "이 파일은 이미 존재합니다." #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "내보낼 페이지를 선택하십시오" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "전체 노트북(_N)" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "단일 페이지(_P)" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "페이지" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "내보낼 포맷을 선택하십시오" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "그 외..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "형식" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "서식" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "최상위 문서 아래에 전체 경로로 파일을 링크합니다." #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "최상위 문서를 URL로 처리합니다." #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "출력 파일 또는 폴더를 선택하세요" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "출력 폴더" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "인덱스 페이지" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "출력 파일" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "로그 보기(_L)" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "파일(_F)" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "편집(_E)" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "보기(_V)" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "삽입(_I)" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "찾기(_S)" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "형식(_M)" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "도구(_T)" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "이동(_G)" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "도움말(_H)" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "경로막대(_A)" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "도구 모음(_T)" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "새로운 페이지(_N)" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "새로운 하위 페이지(_U)" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "다른 노트북 열기 ... (_O)" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "새 창에서 열기(_W)" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "페이지 가져오기 ... (_I)" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "저장하기(_S)" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "사본 저장하기 ... (_C)" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "내보내기 ... (_X)" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "보내기 ... (_S)" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "페이지 옮기기 ... (_M)" #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "페이지 이름 바꾸기 ... (_R)" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "페이지 지우기 (_D)" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "등록 정보(_T)" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "닫기(_C)" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "끝내기(_Q)" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "찾기(_S)..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "역 링크 찾기 ... (_B)" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "설정(_e)" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "다시 읽기(_R)" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "첨부 폴더 열기 (_F)" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "노트북 폴더 열기(_N)" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "최상위 문서 열기 (_D)" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "문서 폴더 열기(_D)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "파일 첨부하기(_F)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "외부 파일 첨부하기" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "원본 편집하기(_S)" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "웹서버 시작하기(_W)" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "사용자 정의 도구(_T)" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "뒤로(_B)" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "이전 페이지로 가기" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "앞으로(_F)" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "다음 페이지로 가기" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "부모(_P)" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "상위 페이지로 가기" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "하위 페이지로 가기" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "색인에서 다음" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "이전 페이지로 이동합니다" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "색인에서 이전" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "다음 페이지로 이동합니다" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "홈(_H)" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "시작으로 가기" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "" #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "내용(_C)" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "자주 묻는 질문들(_F)" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "단축키(_K)" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "버그(_B)" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "정보(_A)" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "상태 표시줄(_S)" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "전체 화면(_F)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "노트북 편집가능(_E)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "노트북 편집가능 상태 토글" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "없음(_N)" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "최근 페이지(_R)" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "기록(_H)" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "아이콘과 글잘 (_A)" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "아이콘만(_I)" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "텍스트만(_T)" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "큰 아이콘(_L)" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "작은 아이콘(_S)" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "아주 작은 아이콘(_T)" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "메뉴에 '자르는 선' 추가하기" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "지정한 파일 또는 폴더가 존재하지 않습니다.\n" "경로가 정확한지 확인하십시오." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "파일 또는 디렏토리가 없습니다: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "노트북을 업그레이드할까요?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "이 노트북은 이전 버전의 Zim에서 제작되었습니다. \n" "최신 버전으로 지금 업그레이드 하시겠습니까?\n" "\n" "업그레이드는 약간의 시간이 걸리며 \n" "노트북에 여러 가지 변경 사항이 발생할 수 있습니다. \n" "일반적으로 이 작업을 수행하기 전에 백업을 하는 것이 좋습니다\n" "\n" "만약 지금 업그레이드 하지 않으면, 몇몇 기능이 제대로 작동하지 않을 수 있습니다" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "노트북 업그레이드 중" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "색인이 아직 업데이팅 중입니다. 이것이 끝나기 전까지는 링크들을 정상적으로 업데이트 할 수 없습니다. 지금 이 작업을 수행하면 링크들이 " "깨질 수 있습니다. 그래도 계속 하시겠습니까?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "링크 업데이트 중" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "폴더를 생성하시겠습니까?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "%s 를 열 수 없습니다" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "이 페이지에는 첨부 폴더가 없습니다." #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "%s 편집 중" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "데스크탑 위키" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Elex https://launchpad.net/~mysticzizone\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Joon Ro https://launchpad.net/~groups-joon\n" " Kentarch https://launchpad.net/~kentarch\n" " Talez https://launchpad.net/~talezshin\n" " sejong lee https://launchpad.net/~umlstudy\n" " sjsaltus https://launchpad.net/~sjsaltus" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "읽기 전용" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "찾기" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "" msgstr[1] "" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "페이지를 저장할 수 없습니다: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "계속하려면 이 페이지의 복사본을 저장하거나 변경 사항을 버려야 합니다. 복사본을 저장하면 변경 사항은 버려지지만, 나중에 복사본을 복원할 " "수 이있습니다." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "바뀐 사항 버리기(_D)" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "사본 저장(_S)" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "직접 이동" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "페이지로 직접 이동" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "새 하위 페이지" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "새 페이지 만들기" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "존재하지 않는 페이지로 링크를 만들면 새로운 페이지가 자동으로 만들어집니다." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "페이지 이름" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "페이지가 존재합니다." #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "복사본 저장" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "페이지 가져오기" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "텍스트 파일" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "페이지 옮기기" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "페이지 \"%s\"를 옮깁니다." #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "이 페이지에 링크된 %i 페이지 업데이트" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "페이지 이름 바꾸기" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "페이지 \"%s\"의 이름을 바꿉니다." #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "페이지 지우기" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "페이지 \"%s\"를 지우시겠습니까?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "" msgstr[1] "" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "" msgstr[1] "" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "파일 첨부" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "페이지 \"%s\"는 첨부 폴더가 없습니다." #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "노트북" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "노트북 열기" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "기본 노트북" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "노트북 추가" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "이 노트북의 이름과 폴더를 선택하십시오" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "폴더" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "인덱스 업데이트 중 ..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "되돌리기(_U)" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "다시 실행(_R)" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "잘라내기(_T)" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "복사하기(_C)" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "붙여넣기(_P)" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "지우기(_D)" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "링크 제거(_R)" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "날짜와 시간 (_D) ..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "그림(_I)..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "" #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "링크(_L)..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "링크 삽입" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "서식 지우기(_C)" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "찾기(_F)..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "다음 찾기(_X)" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "이전 찾기(_V)" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "바꾸기(_R)..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "단어 세기 ..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "제목 _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "제목 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "제목 _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "제목 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "제목 _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "제목 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "제목 _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "제목 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "제목 _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "제목 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "굵게 (_S)" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "굵게" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "강조 (_E)" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "강조" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "표시(_M)" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "표시" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "가로줄(_S)" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "가로줄" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "링크를 따라가려면 <Enter>키를 누릅니다.\n" "(사용안함 상태에서도 <Alt><Enter>를 사용할 수 있습니다.)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "편집할 수 없는 페이지에서도 커서를 보여줍니다." #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "\"CamelCase\" 단어를 자동으로 링크로 전환" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "파일 경로를 자동으로 링크로 전환" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "서식을 적용할 때 현재 단어를 자동으로 선택" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "링크 복사(_L)" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "이메일 주소 복사" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "폴더 열기" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "다음으로 열기..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "열기(_O)" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "날짜과 시간을 입력" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "그림 넣기" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "이미지 먼저 첨부" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "그림 편집" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "위치" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "연결 대상" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "너비" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "높이" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "텍스트를 파일로부터 삽입" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "링크 편집" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "링크(_L)" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "문자열" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "다음(_N)" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "이전(_P)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "대소문자 구분(_c)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "단어 전체(_w)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "정규식(_R)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "강조(_H)" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "찾기" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "옵션" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "찾아서 바꾸기" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "찾기" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "바꾸기" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "바꾸기(_R)" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "모두 바꾸기(_A)" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "단어 갯수" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "문단" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "선택한 부분" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "단어" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "줄" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "문자" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "환경설정" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "부가 기능" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "사용자 정의 글꼴 사용" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "더보기(_M)" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "설정(_O)" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "의존 패키지" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "의존 패키지 없음" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "만족" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "실패" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "만든이" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "사용함" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "부가 기능" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "플러그인 설정" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "%s 플러그인 옵션" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "속성" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "노트북 설정" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "고급 검색에서는 AND, OR 그리고 NOT 등의 연산자를 사용할 수 있습니다. 더 자세한 내용은 도움 페이지를 참고하십시오." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "점수" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "서버가 시작되지 않았습니다." #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "포트" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "서버 시작됨" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "서버가 중지됨" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "파일 선택" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "폴더 선택" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "모든 파일" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "이미지" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "로그 파일" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "파일명" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "이 노트북의 파일이나 폴더를 찾을 수 없음" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "%s 노트북을 찾을 수 없음" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "주어진 페이지 이름이 적절하지 않습니다.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "페이지 이름 \"%s\"이 적절하지 않습니다." #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "%s 페이지를 수정할 수 없습니다." #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "홈페이지" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "문서 루트" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "첨부 브라우저" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "미리보기(_P)" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "이미지 처리 중 오류가 발생했습니다.\n" "텍스트만이라도 저장할까요?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "오늘(_d)" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "달력(_d)" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%Y-%m-%d %A" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "달력" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "오늘(_T)" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "이 플러그인은 GraphViz에 기반한 도표 편집기를 제공합니다.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "도표 삽입" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "수식 삽입" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "이 플러그인은 latex에 기반한 수식 편집기를 제공합니다.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "수식 편집(_E)" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "" #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "" msgstr[1] "" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "짐 데스크탑 위키" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "버전" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "주석" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "변경 사항 보기" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "변경 사항" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "텍스트 편집기" #~ msgid "Pages" #~ msgstr "페이지" #~ msgid "Output" #~ msgstr "출력" #~ msgid "Email client" #~ msgstr "이메일 클라이언트" #~ msgid "Web browser" #~ msgstr "웹 브라우저" #~ msgid "File browser" #~ msgstr "파일 탐색기" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/nb.po�������������������������������������������������������������������������0000664�0001750�0001750�00000255710�12613750113�015606� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Norwegian Bokmal translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-08-13 16:47+0000\n" "Last-Translator: Emil Våge <Unknown>\n" "Language-Team: Norwegian Bokmal <nb@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Kan ikke kjøre programmet: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "returnerte ikke-null avslutningstatus %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Kunne ikke kjøre: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Standard" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "kalender:uke_start:0" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Du har funnet en programfeil" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Fil finnes ikke: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Kunne ikke lese: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Dette betyr vanligvis at filen inneholder ugyldige tegn" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detaljer" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Filen kan ikke skrives til: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Filen er endret på disk: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Tilpass..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Ingen programmer funnet" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Åpne med \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Konfigurer en applikasjon til å åpne \"%s\" lenker" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Konfigurer et program til å åpne filer\n" "av typen \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Konfigurer programmer" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Legg til applikasjon" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Systemstandard" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Navn" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Kommando" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Opprett forvalgt applikasjon" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Kunne ikke finne kjørbar fil: \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "tilpassede verktøyer" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Du kan endre de brukerdefinerte verktøyinnstillingene som vil vises\n" "i verktøylinjen eller kontekstmenyer." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Rediger tilpasset verktøy" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Beskrivelse" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikon" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Data vil ikke bli endret av kommando" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Utdata bør erstatte gjeldende valg" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Vis i verktøylinjen" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Følgende parametre vil bli erstattet\n" "i kommandoen når den blir utført:\n" "<tt>\n" "<b>%f</b> sidens kilde som en temporær fil\n" "<b>%d</b> vedleggsmappen for gjedende side\n" "<b>%s</b> kildefilen for den virkelige siden (hvis noen)\n" "<b>%n</b> notatbokens plassering (fil eller mappe)\n" "<b>%D</b> dokumentets rot (hvis noen)\n" "<b>%t</b> den markerte teksten eller ordet under skrivemerket\n" "<b>%T</b> den markerte teksten inkludert wiki-formatering\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Eksportér" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Oppdaterer indeks" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Eksporterer notebook" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Mappen eksisterer: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Mappen eksisterer allerede og har innhold. Eksportering til denne mappen kan " "overskrive eksisterende filer. Vil du fortsette?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Filen eksisterer" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Denne filen eksisterer allerede.\n" "Vil du overskrive den?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Velg sidene for eksport" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Komplett _notebook" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Enkel _side" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Side" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Inkluder undersider" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Velg eksportformat" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Annet..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Format" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Mal" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Link filer i dokumentrota med fullstendige filstier" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Rotkartdokument til nettadresse" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Hent flere maler fra internett" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Velg utdata fil eller mappe" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Eksporter hver enkelt side til separate filer" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Eksporter alle sider til en separat fil" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Mappe for utdata" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Sideregister" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Utdata-fil" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "%(n_error)i feil og %(n_warning)i advarsler oppstod, se logg" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i feil oppstod, se logg" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i advarsler oppstod, se logg" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Eksport utført" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Vis _logg" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Fil" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Endre" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Vis" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "Sett _inn" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Søk" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mat" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "Verk_tøy" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Gå til" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Hjelp" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "S_tilinje" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Verk_tøylinje" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Ny Side..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Ny _underside..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Åpne annen notisblokk" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Åpne i nytt _vindu" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importer side..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Lagre" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Lagre en _kopi" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_ksporter..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Send til..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Flytt side..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Omdøp side..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "Slett side" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Egenskaper" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Lukk" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Avslutt" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Søk..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Søk_tilbakelenker" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Nylige endringer..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Kopier _lokasjon" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "M_aler" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Innstilling_er" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Oppdatere" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Åpne Vedleggets _Mappe" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Åpne _Notisblokkmappe" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Åpne _rotdokument" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Åpne _Dokumentmappe" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Legg til _Fil" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Legg ved ekstern fil" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Rediger _Kilde" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Start _webserver" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Oppdater indeks" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Brukerdefinerte_Verktøy" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "Til_bake" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Gå en side tilbake" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Fremover" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Gå en side fram" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Forelder" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Gå til den overordnede siden" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Under" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Gå til underside" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Forrige i registeret" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Gå til forrige side" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Neste i registeret" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Gå til neste side" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Hjem" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Gå til hjemmeområdet" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Hopp til..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Innhold" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_OSS" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Tastebindinger" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Feil" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Om" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Alle Paneler" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Vis Alle Paneler" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Statuslinje" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Side Paneler" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Vis Side Paneler" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Fullskjerm" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Notatblokk redigerbar" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "I_ngen" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Nylig brukte sider" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Nylige endrede sider" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historikk" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Side Hirarki" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikoner _Og Tekst" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Kun _ikoner" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Kun _tekst" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Store Ikoner" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Små ikoner" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "Små _Ikoner" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Bruk <Ctrl><Space> for å gå til sidepanelet" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Fjern lenker når sider slettes" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Alltid bruk den siste markørposisjon ved åpning av side" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Filen eller mappen du spesifiserte eksisterer ikke.\n" "Vennligst sjekk om filbanen er korrekt." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Finner ikke fil eller mappe: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Siden er ikke lagret" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Oppgradere Notebook?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Denne notatblokken ble opprettet av en eldre versjon av Zim.\n" "Ønsker du å oppgradere den til siste versjon nå?\n" "\n" "Oppgraderingen tar litt tid og kan resultere i endringer av\n" "innholdet i notatblokken. Det er anbefalt at du tar sikkerhets\n" "kopi før du fortsetter.\n" "\n" "Dersom du ikke ønsker å oppgradere nå er det mulig noen\n" "funksjoner i notatblokken ikke lengre vil virke som forventet." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Oppgraderer notebook" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Indeksen oppdateres. Til operasjonen er ferdig kan ikke lenker oppdateres på " "riktig måte. Avbrytes denne kan det være at lenker blir ødelagt, vil du " "fortsette likevel?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Oppdaterer linker" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Fjerner linker" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Opprett mappe?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "Katalogen \"%s\" eksisterer ikke. Ønsker du å opprette den nå?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Kan ikke åpne: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Denne siden har ingen vedleggsmappe" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Rediger fil: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Du redigerer filen i en ekstern applikasjon. Du kan lukke denne dialogen når " "du er ferdig." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Wiki for Skrivebordet" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Bjørn Forsman https://launchpad.net/~bjorn-forsman\n" " Bjørn Olav Samdal https://launchpad.net/~bjornsam\n" " Børge Johannessen https://launchpad.net/~lmdebruker\n" " Emil Våge https://launchpad.net/~emil-vaage\n" " Espen Krømke https://launchpad.net/~espenk\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Per Knutsen https://launchpad.net/~pmknutsen\n" " Playmolas https://launchpad.net/~playmolas\n" " Terje Andre Arnøy https://launchpad.net/~terjeaar\n" " kingu https://launchpad.net/~comradekingu" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Indeks" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Skrivebeskyttet" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Søk" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Søk i Sider..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "" msgstr[1] "" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Kunne ikke lagre side: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "For å fortsette kan du lagre en kopi av siden eller forkaste\n" "alle endringer. Hvis du lagrer en kopi vil endringer også\n" "forkastes, men du kan gjenopprette kopien senere." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "Forkast en_dringer" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Lagre kopi" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Gå til" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Gå til Side" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Ny underside" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Ny side" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Merk at lenker til sider som ikke eksisterer\n" "vil opprette siden automatisk." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Navn på side" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Sidemal" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Siden eksisterer" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Lagre kopi" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importer side" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Tekstfiler" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Flytt side" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Flytt side \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Oppdater %i side som lenker til denne siden" msgstr[1] "Oppdater %i sider som lenker til denne siden" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Seksjon" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Omdøp Side" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Omdøp side \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Oppdater tittel på denne siden" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Slett Side" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Slett siden \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Siden \"%s\" og alle undersider pluss\n" "vedlegg vil slettes." #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Fjern linker fra %i side som linker til denne side" msgstr[1] "Fjern linker fra %i sider som linker til denne side" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i fil vil slettes" msgstr[1] "%i filer vil slettes" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Legg ved fil" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Siden \"%s\" har ikke en mappe for vedlegg" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Sett inn bilder som link" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Notisblokk" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Åpne Notisblokk" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Forvalgt notatblokk" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Legg til notisblokk" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Velg navn og mappe for notisblokken" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Mappe" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Ingen programtillegg er tilgjengelige for å vise dette objektet" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Programtillegget %s trenges for å vise dette objektet." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Oppdaterer register" #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Angre" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Gjenopprette" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Klipp_ut" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopier" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Lime inn" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Slett" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Veksle avkryssingsboks 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Veksle avkryssingsboks 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Rediger kobling eller objekt..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Fjern kobling" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Dato og tid..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Bilde..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Punk_t Liste" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Nummerert Liste" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Avmerking_s Liste" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Tekst fra _fil..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Kobling" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Sett inn lenke" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Nullstill formatering" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Finn..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Finn ne_ste" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Finn forr_ige" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Erstatt..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Antall ord..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Zoom Inn" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Zoom Ut" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normal Størrelse" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nytt Vedlegg" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Fil _Maler" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Overskriftstittel _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Overskriftstittel 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Overskriftstittel _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Overskriftstittel 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Overskriftstittel _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Overskriftstittel 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Overskriftstittel _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Overskriftstittel 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Overskriftstittel _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Overskriftstittel 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Sterk" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Sterk" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Ettertrykk" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Ettertrykk" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Merke" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Merke" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Stryk" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "ramme" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Senket skrift" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Hevet skrift" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Verbatim" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Verbatim" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Bruk <Enter> for å følge lenker\n" "(Om denne er slått av kan du fortsatt bruke <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Vis også peker for sider som ikke kan redigeres" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Gjør \"CamelCase\" ord om til lenker automatisk" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Gjør filstier om til lenker automatisk" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Velg det gjeldende ordet automatisk når du bruker formatering" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Gjentatte klikk går igjennom de ulike tilstander av avmerkingboksen" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Merking av avkryssingsboks endrer også underelementer" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Standardformatet for å kopiere tekst til utklippstavlen" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Mappe med maler for vedleggs filer" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Denne wiki`en er ikke definert: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopier _som..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Flytt valgt tekst..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "Rediger _egenskaper" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Endre Kobling" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Kopier _Kobling" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopier e-postadresse" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Åpne mappe" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Åpne med …" #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Åpne" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Ingen maler er installert" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Katalogen\n" "%s\n" "eksisterer ikke.\n" "Ønsker du å opprette den nå?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Sett inn dato og klokkeslett" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalender" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Link til dato" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Sett inn bilde" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Legg ved bildet først" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Fil type er ikke støttet: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Rediger bilde" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Lokalisasjon" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Link til" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Bredde" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Høyde" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Nullstill Størrelsen" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Sett inn tekst fra fil" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Rediger lenke" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Lenke" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Tekst" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Neste" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Forrige" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Skill mellom store og små bokstaver" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Hele _ordet" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Regulært uttrykk" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Markér" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Finn" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Alternativer" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Søk og erstatt" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Søk etter" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Erstatt med" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Erstatt" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Erstatt _alle" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Ordtelling" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Avsnitt" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Utvalg" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Ord" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Linjer" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Tegn" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Tegn uten mellomrom" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Flytt tekst til annen side" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Flytt" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Flytt tekst til" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Legg ved lenke til ny side" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Åpne ny side" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Ny fil" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Grensesnitt" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Redigering" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Innstillinger" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Programtillegg" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Programmer" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Brukerdefinert Skrifttype" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Mer" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "K_onfigurer" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Hent flere programtillegg på nett" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Avhengigheter" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Ingen avhengigheter" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Feilet" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Valgfritt" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Forfatter" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Aktivert" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Programtillegg" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Konfigurer programtillegg" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Alternativer for programtillegg %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Sett standard tekstprogram" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Egenskaper" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Notisbokegenskaper" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Nylige endringer" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "I dag" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "I går" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Sist endret" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "For avansert søk kan du bruke operatører som\n" "AND, OR og NOT. Se hjelpesiden for mer informasjon." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Begrens søk til den gjeldende side og undersider" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Poengsum" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Webtjener" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server ikke startet" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Tillat offentlig tilgang" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server startet" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server stanset" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Maler" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Bla gjennom" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopier mal" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Velg Fil" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Ekspander alle" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "S_lå sammen alle" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Fjern" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Velg Mappe" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Velg bilde" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Topp>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Venstre Side Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Høyre Side Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Bunn Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Topp Panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Øverst til venstre" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Nederst til venstre" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Øverst til høyre" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Nederst til høyre" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Når du rapporterer denne programfeilen inkluder\n" "informasjonen i tekst boksen nedenfor." #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Alle filer" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Bilder" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Loggfil" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Filen finnes" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "En fil med navnet <b> \"%s\" </b> finnes allerede.\n" "Du kan bruke et annet navn eller overskrive den eksisterende filen." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Filnavn" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Bla gjennom" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Skriv over" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Kan ikke finne filen eller katalogen til denne notatblokken" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Vennligst velg en notatbok" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Fant ikke notatblokk: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Utdata plassering trengs for eksport" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Utdata mappen eksisterer eller er ikke tom, spesifiser \"--overwrite\" for å " "tvinge eksport" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Utdata fil eksisterer, spesifiser \"--overwrite\" for å tvinge eksport" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Trenger utdatafil for å eksportere MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Trenger utdatamappe for å eksportere hele notatboken" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Navnet på siden er ikke gyldig.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Ugyldig navn på side \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Indeksen er fortsatt opptatt mens vi prøver å gjøre en\n" "operasjon som trenger indeksen\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Kan ikke redigere siden: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Interwiki Tastatur" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Startside" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Dokumentrot" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Ukjent>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Feil i %(file)s på linje %(line)i nær \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetikk" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Dette programtillegget kan du legge inn aritmetiske beregninger i Zim.\n" "Den er basert på den aritmetiske modulen fra\n" "http://pp.com.mx/python/arithmetic\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Ukjent" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Type" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Størrelse" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Endret" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Flytt hit" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Kopier hit" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Avbryt" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Vedlegg" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Vedlegg" msgstr[1] "%i _Vedlegg" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette programtillegget gir en ekstra widget som viser en liste over sider\n" "koblet til den gjeldende siden.\n" "\n" "Dette programstilleget følger med Zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Forhåndsvis" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "En feil oppstod under generering av bildet.\n" "Ønsker du å lagre kilde teksten allikevel?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Journal" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Dette programtillegget omgjør en seksjon av notatboken til en journal\n" "med en side per dag, uke eller måned.\n" "Legger også til en kalender-widget for å få tilgang til disse sidene.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Vis kalender i sidepanelet i stedet for en dialog" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "I _Dag" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalender" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Idag" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Sett inn diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette programtillegget gir deg muligheten til å endre et diagram for Zim " "basert på Graphviz.\n" "\n" "Dette er et kjerne plugin frakt med Zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Sett inn diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Endre diagram" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Fri for distraksjoner modus" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Skjul menylinjen i fullskjermmodus" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Skjul verktøylinjen i fullskjermmodus" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Skjul statuslinjen i fullskjermmodus" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Maksimums side størrelse" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Vertikal marg" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Sett inn Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Endre Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Sett inn ligning" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "L_igning" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Endre sammenligning" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Sett inn Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Endre Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Sett inn GNU R Plot" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Endre GNU R Plot" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Kunne ikke analysere uttrykk" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Sett inn symbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbol..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Sorter linjer" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Vennligst velg mer enn en linje tekst." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Lenke Kart" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Skriv ut til nettleser" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Skriv ut til nettleser" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Raskt notat" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Raskt notat..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Tittel" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Åpne _Side" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Forkast notat?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Legg til skjermbilde" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Dette programtillegget lar deg ta et skjermbilde å settte\n" "det inn i en Zim side.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Skjermbilde Kommando" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Skjermbilde..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Ta bilde av hele skjermen" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Velg vindu eller område" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Forsinkelse" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekunder" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "En feil skjedde under kjøring av \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Sett inn sekvensdiagram" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Sekvensdiagram" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Endre sekvensdiagram" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Uthev aktiv linje" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Vis høyre marg" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Høyre margplassering" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Kodeblokk" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Sett inn kodeblokk" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Syntaks" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Vis linjenummer" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Stave­kontroll" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Legger til stave­kontroll ved å bruke gtkspell\n" "\n" "Dette er en programtillegg som følger med Zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Kjør _stavekontroll" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Kunne ikke laste inn stavekontroll" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "" msgstr[1] "" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Notatblokker" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Skrivebords-wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Vennligst legg til en kommentar til versjonen" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Side" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Vil du gjenopprette siden: %(page)s\n" "til lagret verjson: %(version)s ?\n" "\n" "Alle endringer siden den siste lagrede versjonen vil bli tapt!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Endringer" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Versjon" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Logg hendelser med Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Publiserer hendelser til Zeitgeist tjenesten." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wiki side: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Kunne ikke finne mal \"%s\"" #~ msgid "Text Editor" #~ msgstr "Tekstredigering" #~ msgid "File browser" #~ msgstr "Filleser" #~ msgid "Email client" #~ msgstr "E-postklient" #~ msgid "Web browser" #~ msgstr "Nettleser" #~ msgid "Pages" #~ msgstr "Sider" #~ msgid "Output" #~ msgstr "Utdata" ��������������������������������������������������������zim-0.65/translations/sv.po�������������������������������������������������������������������������0000664�0001750�0001750�00000271610�12613750113�015634� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Swedish translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-11-02 13:03+0000\n" "Last-Translator: Mikael Mildén <Unknown>\n" "Language-Team: Swedish <sv@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Kunde inte starta %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "gav felkod %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Kunde inte starta %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Standardval" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Det verkar som om du har hittat en bug" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Filen saknas: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Kunde inte läsa: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Det är vanligen för att filen innehåller felaktiga tecken" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detaljer" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Skrivfel: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Filen ändrades på disken: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Anpassar..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Hittade inte programmet" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Öppna med \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Konfigurera progammet att öppna \"%s\" länkar" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Konfigurera programmet att öppna\n" "filtypen \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Konfigurera programmet" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Lägg till program" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Operativsystemets standardprogram" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Namn" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Kommando" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Sätt programmet som standardval" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Kunde inte hitta den körbara filen \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Egna verktyg" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Du kan konfigurera egna verktyg som kommer att synas\n" "i verktygsmenyn eller i snabbmenyer." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Inställningar för eget verktyg" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Beskrivning" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikon" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Kommandot ändrar inte data" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Utskrift skall ersätta markeringen" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Visa på verktygsraden" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Följande parametrar kommer bli ersatta\n" "i kommandot när det körs:\n" "<tt>\n" "<b>%f</b> sidan som en temporär fil\n" "<b>%d</b> bilagans katalog\n" "<b>%s</b> ursprunglig sida (om någon)\n" "<b>%n</b> anteckningsbokens fil eller mapp\n" "<b>%D</b> dokumentet rot (om någon)\n" "<b>%t</b> den markerade texten eller ordet under markören\n" "<b>%T</b> den markerade texten inklusive wiki formatering\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportera" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Uppdaterar biblioteksstruktur" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Exporterar anteckningsbok" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Mapp existerar: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Katalogen finns redan och innehåller filer, att exportera hit kan skriva " "över befintliga filer. Vill du fortsätta?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Filen finns redan" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Denna fil finns redan.\n" "Vill du skriva över den?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Välj vilka sidor som ska exporteras" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Hela _anteckningsboken" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Enkel _sida" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Sida" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Inkludera undersidor" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Välj exportformat" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Annan..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Format" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Mall" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Länka till filer i dokumentroten med full sökväg" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Tilldela dokumentets root en URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Hitta fler mallar på internet" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Exportera till fil eller katalog" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Exportera varje sida som en separat fil" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Exportera alla sidor som en enda fil" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Utdatakatalog" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Registersida" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Exportfil" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i fel hittades, se logg" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i varning(ar), se logg" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Exporten är klar" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Visa _logg" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Arkiv" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Redigera" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Visa" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Infoga" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Sök" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_Format" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "Ver_ktyg" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Gå" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Hjälp" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "S_ökvägsfält" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Verktygsrad" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Ny sida" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Ny _undersida" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Öppna anteckningsbok..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Öppna i _nytt fönster" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importera sida" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Spara" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Spara so_m..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xportera..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Skicka till..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Flytta sida..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Byt namn på sida..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Ta bort sida" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Egenskaper" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "St_äng" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Avsluta" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Sök..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Sök _bakåtlänkar" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Senaste ändringarna..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Kopiera _plats" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Mallar" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Inställningar" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Läs om" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Öppna katalog för _bifogade filer" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Öppna _anteckningsbokens katalog" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Öppna dokument_rot" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Öppna dokument_katalog" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "_Bifoga fil" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Bifoga en extern fil" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "R_edigera källkod" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Starta_webbserver" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Uppdatera index" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Egna _verktyg" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Bakåt" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Gå en sida bakåt" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Framåt" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Gå en sida framåt" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "Överordnad" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Gå till ovanliggande sida" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "Underordnad" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Gå till underliggande sida" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "F_öregående i index" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Gå till föregående sida" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "N_ästa i register" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Gå till nästa sida" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Hem" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Gå hem" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Ho_ppa till" #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Innehåll" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_Frågor och svar" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Snabbkommandon" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "Kända _fel" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Om" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Alla paneler" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Visa alla paneler" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Statusrad" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Sidopaneler" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Visa sidopaneler" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Helskärm" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Anteckningsbok _redigerbar" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Växla om anteckningsboken ska vara redigerbar eller inte" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Ingen" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "Senaste sidor" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Senast _ändrade sidor" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historik" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "Sid_hierarki" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikoner _och text" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Endast _ikoner" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Endast _text" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "S_tora ikoner" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "S_må ikoner" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Pyttesmå ikoner" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Gör varje meny löstagbar och möjlig att öppna i ett eget fönster" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Använd <Ctrl><Space> för att växla till sidopanelen" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Ta bort länk när en sida raderas" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Återvänd alltid till senaste markörposition när en sida öppnas" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Filen eller platsen du angav existerar inte.\n" "Var vänlig kontrollera att sökvägen är korrekt." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Ingen sådan fil eller katalog: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Ändringarna på sidan har inte sparats" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Uppgradera anteckningsbok?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Denna anteckningsbok skapades av en äldre version av Zim.\n" "Vill du uppgradera till den senaste versionen?\n" "\n" "Uppgraderingen kan ta flera minuter och kan komma att göra\n" "förändringar i anteckningsboken. Det är rekommenderat att du\n" "sparar en säkerhetskopia innan du genomför uppgraderingen.\n" "\n" "Om du väljer att uppgradera nu, kan en del funktioner helt, eller\n" "delvis, sluta fungera." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Uppgraderar anteckningsbok" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Registret uppdateras fortfarande. Under tiden kan inga länkar uppdateras " "korrekt. Att genomföra detta kommando nu kan bryta länkar. Vill du ändå " "fortsätta?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Uppdaterar länkar" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Tar bort länkar" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Skapa katalog?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Mappen \"%s\" finns inte.\n" "Vill du skapa den nu?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Kunde inte öppna: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Den här sidan har ingen katalog för bifogade filer" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Redigerar filen: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Du redigerar en fil i ett externt program. Du kan stänga den här dialogrutan " "när du är klar." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "En skrivbordswiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Jesper J https://launchpad.net/~jesperj\n" " Kess Vargavind https://launchpad.net/~kess\n" " Leopold Augustsson https://launchpad.net/~leopold-augustsson\n" " Mikael Mildén https://launchpad.net/~mikael-milden\n" " Patrik Nilsson https://launchpad.net/~nipatriknilsson\n" " Rustan Håkansson https://launchpad.net/~rustanhakansson\n" " rylleman https://launchpad.net/~rylleman" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Index" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "Ej skrivbar" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Hitta" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Sök sidor..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _bakåtlänk..." msgstr[1] "%i _bakåtlänkar..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Kunde inte spara sida: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "För att fortsätta måste du spara en kopia av den här sidan eller förkasta\n" "alla ändringar. Om du sparar en kopia kommer ändringarna också\n" "att förkastas, men du kan återskapa kopian senare." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Förkasta ändringar" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Spara" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Hoppa till" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Hoppa till sida" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Ny undersida" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Ny sida" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Observera att länkning till en icke existerande sida\n" "automatiskt skapar en ny sida." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Sidnamn" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Sidmall" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Sidan finns redan" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Spara som" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importera sida" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Textfiler" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Flytta sida" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Flytta sida ”%s”" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Uppdatera %i sida som länkar till den här sidan" msgstr[1] "Uppdatera %i sidor som länkar till den här sidan" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Sektion" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Byt namn på sida" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Byt namn på sidan ”%s”" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Uppdatera rubriken på den här sidan" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Ta bort sida" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Ta bort sidan ”%s”" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Sidan \"%s\" och alla dess\n" "undersidor och bifogade filer kommer att raderas." #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Ta bort länkar från %i sida, som länkar till denna sida." msgstr[1] "Ta bort länkar från %i sidor, som länkar till denna sida." #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i fil kommer att tas bort" msgstr[1] "%i filer kommer att tas bort" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Bifoga fil" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Sidan \"%s\" har ingen mapp för bifogade filer." #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Infoga bilder som länk" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Anteckningsbok" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Öppna anteckningsbok" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Standardanteckningsbok" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Lägg till anteckningsbok" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Välj ett namn och en mapp för anteckningsboken" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Katalog" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Det finns ingen insticksmodul som kan visa det här objektet." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Insticksmodul %s behövs för att kunna visa objektet" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Uppdaterar register..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Ångra" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Gör om" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Klipp _ut" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopiera" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "K_listra in" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Ta bort" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "(Av)markera kryssruta - bock" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "(Av)markera kryssruta - kryss" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Redigera länk eller objekt..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Ta bort länk" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Datum och tid..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Bild..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Punk_tlista" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Numrerad lista" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "kryssrutelista" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Text från _fil..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Länk..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Infoga länk" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Rensa formatering" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Sök..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Sök _nästa" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Sök _föregående" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Ersätt..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Räkna _ord..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "Zooma _in" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Zooma _ut" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normal storlek" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Ny _bilaga" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "_Filmallar" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Rubrik _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Rubrik 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Rubrik _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Rubrik 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Rubrik _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Rubrik 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Rubrik _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Rubrik 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Rubrik _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Rubrik 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Fetstil" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Fetstil" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Kursiv" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Kursiv" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Markera" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Markera" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Genomstrykning" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Genomstrykning" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Nedsänkt" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Upphöjd" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Spärrad" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Spärrad" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Använd <Retur> för att följa länkar\n" "(om avstängd kan du fortfarande använda <Alt><Retur>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Visa pekaren också på sidor som inte kan redigeras" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Gör automatiskt om ord i \"CamelCase\" till länkar" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Gör automatiskt om sökvägar till länkar" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Välj det aktuella ordet automatiskt vid formatering" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Ta bort indrag med <Backsteg>\n" "(om du avaktiverar kan <Skift><Tabb> fortfarande användas)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Att upprepande gånger klicka på en kryssruta växlar genom lägena för " "kryssrutan" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "(Ta bort) indrag i en lista ändrar också alla underobjekt" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Markera en kryssruta påverkar alla underobjekt" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Omformatera wiki markup kontinuerligt" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Standardformat för att kopiera text till klippbordet" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Mapp med mallar för bilagor" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Ingen sådan wiki har angetts: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopiera _som" #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Flytta markerad text..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Redigera egenskaper" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Redigera länk" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Kopiera _länk" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopiera e-postadress" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Öppna katalog" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Öppna med..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Öppna" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Inga mallar är installerade" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Mappen\n" "%s\n" "finns inte.\n" "Vill du skapa den nu?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Infoga datum och tid" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalender" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Länka till datum" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Infoga bild" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Bifoga bild först" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Filtypen stöds ej: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Redigera bild" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Plats" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Länka till" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Bredd" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Höjd" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Återställ storlek" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Infoga text från fil" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Redigera länk" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Länk" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Text" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Nästa" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Föregående" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Matcha _små/stora" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Sök endast _hela ord" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Reguljärt uttryck" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Markera" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Sök" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Alternativ" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Sök och ersätt" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Sök efter" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Ersätt med" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Ersätt" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Ersätt _alla" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Räkna ord" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Stycke" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Markering" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Ord" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Rader" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Tecken" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Tecken exklusive mellanrum" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Flytta text till en annan sida" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Flytta" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Flytta text till" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Lämna länk till ny sida" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Öppna ny sida" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Ny fil" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Gränssnitt" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Redigering" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Inställningar" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Insticksmoduler" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Program" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Använd anpassat typsnitt" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Mer" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "K_onfigurera" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Hitta fler insticksmoduler på internet" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Beroenden" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Inga beroenden" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Misslyckades" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Valfri" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Användarnamn" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Aktiverad" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Insticksmodul" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Konfigurera modul" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Alternativ för insticksmodulen %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Välj textredigerare som standard" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Egenskaper" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Egenskaper för anteckningsbok" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Senaste ändringar" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "I dag" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "I går" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Senast ändrad" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "För avancerad sökning kan du använda operatorer som\n" "AND, OR och NOT. Se hjälpsidorna för utförligare beskrivning." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Begräns sökning till den aktuella sidan och dess undersidor" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Resultat" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Webbserver" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server ej startad" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Tillåt åtkomst för alla" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server startad" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server stoppad" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Mallar" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Bläddra" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopiera mall" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Välj fil" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "_Visa alla" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Dölj alla" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Rensa" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Välj katalog" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Välj bild" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Vänster panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Höger panel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Bottenpanel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Toppanel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Överst till vänster" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Nederst till vänster" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Överst till höger" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Nederst till höger" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Var vänlig och inkludera informationen från textrutan nedan när du " "rapporterar den här buggen" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Alla filer" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Bilder" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Loggfil" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Filen finns redan" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "En fil med namnet <b>\"%s\"</b> finns redan.\n" "Du kan ange ett annat filnamn eller skriva över den existerande filen." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Filnamn" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Bläddra" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Skriv över" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Kunde inte hitta filen eller platsen för anteckningsboken" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Ange en anteckningsbok" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Kunde inte hitta anteckningsbok: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Ange plats för att kunna exportera" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Mappen finns redan och den är inte tom. Ange \"--overwrite\" för att tvinga " "export" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "Filen finns redan. Ange \"--overwrite\" för att tvinga export" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Du måste ange en fil för att kunna exportera MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" "Du måste ange en folder för att kunna exportera hela anteckningsboken" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Det angivna namnet för sidan är ogiltigt.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Ogiltigt namn \"%s\" för sidan" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Index uppdateras fortfarande. Den här\n" "åtgärden behöver använda indexet.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Kan inte redigera sidan: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Nyckelord för interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Hemsida" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Dokumentets root" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Okänd>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Fel i %(file)s i rad %(line)i vid \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetik" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Insticksmodul för att infoga aritmetiska beräkningar i Zim.\n" "Den baseras på den aritmetiska modulen från\n" "http://pp.com.mx/python/aritmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmetik" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Okänd" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Filtyp" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Storlek" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Ändrad" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Flytta hit" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Kopiera hit" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Avbryt" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Bilage-bläddrare" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Placering i fönstret" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Bilagor" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Öppna filhanterare" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Bilaga" msgstr[1] "%i _Bilagor" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Panel för bakåtlänkar" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Insticksmodul för widget, som visar en lista på sidor\n" "som länkar till den aktuella sidan.\n" "\n" "Det här är en basmodul som kommer med Zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Bakåtlänkar" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Förhandsgranska" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Ett fel uppstod när bilden skapades.\n" "Vill du spara källtexten ändå?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Dagbok" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Insticksmodul som förvandlar en sektion i anteckningsboken till en dagbok\n" "med en sida per dag, vecka eller månad.\n" "Den lägger också till en kalenderwidget för att nå dessa sidor.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Dag" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Vecka" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Månad" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "År" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Visa kalender i sidopanel i stället för dialog" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Använd en sida för varje" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "I_dag" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Kalen_der" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Visa kalender" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A den %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalender" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Idag" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Infoga diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram tillhandahåller en diagramredigerare för zim som " "baseras på GraphViz\n" "\n" "Detta tilläggsprogram följer med zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Ta_bell" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Infoga diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "_Redigera diagram" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Störningsfri redigering" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Insticksmodul som låter dig ställa in Zim\n" "för störningsfri redigering.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Dölj menyraden i fullskärmsläge" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Dölj verktygsraden i fullskärmsläge" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Dölj sökvägsfältet i fullskärmsläge" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Dölj statusraden i fullskärmsläge" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Maximal sidbredd" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Sidomarginal" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Teckenbakgrund" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Textfärg" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Bakgrundsfärg" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Infoga Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Insticksmodul för att redigera diagram i Zim, baserat på Ditaa.\n" "\n" "Det här är en basmodul som kommer med Zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Redigera Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Infoga ekvation" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram tillhandahåller en ekvationsredigerare baserad på " "latex.\n" "\n" "Detta är ett kärnprogram som följer med Zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "_Ekvation" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "Redigera _formel" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Infoga Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Insticksmodul för att redigera grafer i Zim, baserat på Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Redigera Gnuplot." #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Infoga GNU R Plot" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Detta tilläggsprogram tillhandahåller en diagramredigerare baserad på GNU " "R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Inställningar för GNU R Plot" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Kalkylator-tilläggsprogrammet kunde\n" "inte utvärdera uttrycket under markören." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Kalkylator" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Det här tilläggsprogrammet tillåter dig att snabbt\n" "utvärdera enkla matematiska uttryck i zim.\n" "\n" "Det här är ett bas-tilläggsprogram som kommer med zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Kunde inte tolka uttrycket" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Utvärdera _Matematik" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Infoga specialtecken" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram tillhandahåller en dialogruta för att infoga " "specialtecken och tillåter\n" "autoformatering av typografiska tecken.\n" "\n" "Detta är ett kärnprogram som följer med Zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Spe_cialtecken..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Sortera linjer" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Insticksmodul för att sortera markerade rader i alfabetisk ordning.\n" "Om listan redan är sorterade kommer ordningen att bli omvänd\n" "(från A-Ö till Ö-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Sortera rader" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Markera mer än en rad." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Länkkarta" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram öppnar en grafisk\n" "representation av länkstrukturen i din\n" "anteckningsbol. Det kan användas som en sorts \"mind map\"\n" "som visar hur sidor relaterar till varandra.\n" "\n" "Detta är ett kärnprogram som följer med Zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Visa länkkarta" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Skriv till webläsare" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram ersätter bristen på\n" "utskriftsstöd i Zim. Det exporterar den aktuella sidan\n" "till html och öppnar en webläsare. Om webläsaren \n" "har stöd för utskrifter kommer detta ge möjligheten\n" "att skriva ut i två steg.\n" "\n" "Detta är ett kärnprogram som följer med Zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Skriv till webläsare" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Snabb anteckning" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram tillhandahåller ett sätt att snabbt lägga in text\n" "eller ett urklipp på en sida i Zim.\n" "\n" "Detta är ett kärnprogram som följer med Zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Snabb anteckning..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Skapa en ny sida för varje ny anteckning" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Titel" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Öppna _sida" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Kasta anteckning?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Infoga partitur" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Den här insticksmodulen ger dig en partiturredigerare för Zim, baserad på " "GNU Lilypond.\n" "\n" "Det här är en basinsticksmodul som kommer med Zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "_Partitur" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Redigera partitur" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Infoga skärmbild" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram låter dig ta en skärmdump och infoga den\n" "på en sida i Zim.\n" "\n" "Detta är ett kärnprogram som följer med Zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Kommando för skärmdump" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Skärmbild..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Fånga hela skärmen" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Välj fönster eller region" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Fördröjning" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekunder" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Ett fel inträffade vid körningen av \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Infoga sekvensdiagram" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Den här insticksmodulen ger möjlighet att redigera sekvensdiagram i Zim, " "baserat på seqdiag.\n" "Det är ett enkelt sätt att redigera sekvensdiagram.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Sekvensdiagram" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Redigera sekvensdiagram" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Visa källa" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Insticksmodul som infogar kodstycken på sidan. Dessa kommer att\n" "visas som inbäddade widgetar med syntaxmarkering, radnummer och så vidare.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Automatiskt indrag" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Färgmarkera aktuell rad" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Visa högermarginal" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Högermarginalens position" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Kodstycke" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Infoga kodstycke" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Syntax" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Visa radnummer" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Stavningskontroll" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Aktiverar stavningskotroll med hjälp av gtkspell.\n" "Detta tilläggsprogram medföljer zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Kontrollera _stavning" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Kunde inte ladda stavningskontroll" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Detta kan bero på att du inte har rätt\n" "ordlista installerad" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Innehållsförteckning" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Insticksmodul som infogar en extra widget med\n" "en innehållsförteckning för den aktuella sidan.\n" "\n" "Det här är en basmodul som kommer med Zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" "Visa innehållsförteckning som en flyttbar widget istället för sidopanel" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Visa sidans titelrubrik i innehållsförteckningen" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Innehåll" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Lägre nivå" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Högre nivå" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Etiketter" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sortera sidor efter taggar" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "Ej taggade" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Sortera alfabetiskt" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Uppgiftslista" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram visar alla oavslutade aktiviteter i den här\n" "anteckningsboken. En oavslutad aktivitet kan vara antingen omarkerade " "kryssrutor\n" "eller objekt markerade med etiketter som \"TODO\" eller \"FIXME\".\n" "\n" "Detta är ett kärnprogram som följer med Zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Se alla kryssrutor som aktiviteter" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Omvandla sidnamn till taggar för uppgifter" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Markera aktiviteter som inträffar på måndag eller tisdag, innan helgen" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Etiketter som markerar aktiviteter" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Etikett för nästa aktivitet" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Måste indexera anteckningsboken" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Detta är första gången du öppnar att göra-listan.\n" "Därför måste ett register skapas.\n" "Beroende på anteckningsbokens storlek kan det\n" "ta upp till flera minuter. Nästa gång du använder\n" "att göra-listan kommer detta inte att behövas." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i öppet objekt" msgstr[1] "%i öppna objekt" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Alla aktiviteter" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Ej taggade" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Uppgift" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Datum" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ikon för aktivitetsfältet" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Detta tilläggsprogram lägger till en ikon i aktivitetsfältet för lätt " "tillgänglighet.\n" "\n" "Programmet kräver Gtk+ version 2.10 eller senare.\n" "\n" "Detta är ett kärnpogram som följer med Zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klassisk ikon för aktivititetsfältet.\n" "Använd inte den nya typen av statusikon i Ubuntu." #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Visa en ikon för varje anteckningsbok" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Snabb anteckning..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Annan..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Anteckningsböcker" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Versionshantering" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Insticksmodul för versionshantering av anteckningsböcker.\n" "\n" "Insticksmodulen hör stöd för Bazaar, Git och Mercurial.\n" "\n" "Detta är en basmodul som kommer med Zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Spara automatiskt med jämna tidsintervaller" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automatiskt sparad version av zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Sp_ara version..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versioner..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Inga ändringar har gjorts i anteckningsboken sedan den senast sparades" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Inga ändringar sedan senaste versionen" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Aktivera versionshantering?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Versionskontroll är inte aktivierat för den här anteckningsboken\n" "Vill du aktivera nu?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Bakgrundsprogram" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Spara version" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Ange en kommentar för den här versionen" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Sparad version av zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versioner" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Sida" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Visa _kommentarer" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Välj en version för att se ändringar mellan den versionen och den aktuella.\n" "Du kan också välja flera versioner och se ändringar mellan dessa.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Kommentar" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Återställ version" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Visa ändringar" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Sida vid sida" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Sidans källkod med kommentarer" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Återställ sida till sparad version?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Vill du återskapa sidan: %(page)s\n" "till den sparade versionen: %(version)s ?\n" "Alla ändringar efter att du senast sparade kommer att förloras!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Ändringar" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Ver" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Logga händelser med Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Bestämmer vilka händelser som ska loggas av Zeitgeist." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wikisida: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Kunde inte hitta mallen \"%s\"" #~ msgid "Output" #~ msgstr "Utdata" #~ msgid "Slow file system" #~ msgstr "Långsamt filsystem" #~ msgid "Text Editor" #~ msgstr "Textredigerare" #~ msgid "Email client" #~ msgstr "E-postprogram" #~ msgid "Web browser" #~ msgstr "Webbläsare" #~ msgid "Pages" #~ msgstr "Sidor" #~ msgid "Match c_ase" #~ msgstr "Gör skillnad på _gemener/VERSALER" #~ msgid "File browser" #~ msgstr "Filbläddrare" #~ msgid "_Filter" #~ msgstr "_Filter" #~ msgid "Prio" #~ msgstr "Prioritet" ������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/fi.po�������������������������������������������������������������������������0000664�0001750�0001750�00000265123�12613750113�015604� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Finnish translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-09-16 16:38+0000\n" "Last-Translator: Matti Pulkkinen <matti.pulkkinen3@gmail.com>\n" "Language-Team: Finnish <fi@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Sovellus ei käynnistynyt: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "keskeytyi ja palautti poistumiskoodin %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Ei käynnistynyt: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Oletus" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Taisit löytää ohjelmasta virheen" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Tiedosto ei ole olemassa: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Luku epäonnistui: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Yleensä tämän syynä on kelvottomat merkit tiedostossa" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Yksityiskohdat" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Tiedostoon ei voi kirjoittaa: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Tiedosto on muuttunut: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Mukauta..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Ei sovellusta" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Avaa ohjelmalla \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Aseta sovellus avaamaan \"%s\" -linkit" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "Aseta avaussovellus \"%s\" -tiedostomuodolle" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Muokkaa sovelluksia" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Lisää sovellus" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Järjestelmän oletus" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Nimi" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Komento" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Aseta oletussovellukseksi" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Mukautetut työkalut" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Voit määrittää omia työkaluja, jotka näkyvät\n" "työkaluvalikossa ja työkalurivissä tai pikavalikoissa." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Muokkaa omaa työkalua" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Kuvaus" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Kuvake" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Komento ei muuta tietoja" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Näytä työkalupalkissa." #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Seuraavat parametrit korvataan komennossa kun se ajetaan:\n" "<tt>\n" "<b>%f</b> sivun lähdekoodin väliaikaistiedosto\n" "<b>%d</b> sivun liitekansio\n" "<b>%s</b> sivun lähdekooditiedosto (ei pakollinen)\n" "<b>%n</b> muistion sijainti (tiedosto tai kansio)\n" "<b>%D</b> juurikansio (ei pakollinen)\n" "<b>%t</b> valittu teksti tai kohdistimen alla oleva sana\n" "<b>%T</b> valittu teksti wikin muotoiluineen\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Vie" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Luetteloa päivitetään" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Viedään muistiota" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Kansio on olemassa: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Kansio on jo olemassa ja se sisältää tiedostoja - vienti tähän kansioon " "saattaa korvata tiedostoja. Haluatko jatkaa?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Tiedosto on jo olemassa" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Tiedosto on jo olemassa.\n" "Haluatko korvata sen?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Valitse vietävät sivut" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "_Koko muistio" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "_Yksi sivu" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Sivu" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Valitse vientimuoto" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Muu..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Muoto" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Malline" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Sisällytä linkkiin tiedoston polku juurikansiossa" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Kuvaa juurikansio URL:ksi" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Valitse kohdetiedosto tai kansio" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Kohdekansio" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Sisällysluettelosivu" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Kohdetiedosto" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Näytä _loki" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Tiedosto" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Muokkaa" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Näytä" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Lisää" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Etsi" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "M_uotoilu" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "T_yökalut" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Siirry" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Ohje" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "_Polkupalkki" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Työkalupalkki" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Uusi sivu..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Uusi A_lisivu..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Avaa toinen muistio..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Avaa uudessa _ikkunassa" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "Tuo _sivu" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Tallenna" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Tallenna _kopio" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Vie..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Lähetä..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Siirrä sivu..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Muokkaa nimeä..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Poista sivu" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Ominai_suudet" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Sulje" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Lopeta" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Etsi..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Etsi _paluulinkeistä..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Uusimmat muutokset..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Kopioi si_jainti" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Mallineet" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "As_etukset" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "La_taa uudelleen" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Avaa _liitekansio" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Avaa _muistion kansio" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Avaa _juurikansio" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Avaa a_siakirjakansio" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Liitä _tiedosto" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Liitä ulkoinen tiedosto" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Muokkaa l_ähdekoodia" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Käynnistä _WWW-palvelin" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Päivitä sisällysluettelo" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "O_mat työkalut" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Takaisin" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Edellinen sivu" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Eteenpäin" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Seuraava sivu" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Ylisivu" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Mene ylisivulle" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Alisivu" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Siirry alisivulle" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Edellinen luettelossa" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Siirry edelliselle sivulle" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Seuraava luettelossa" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Siirry seuraavalle sivulle" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Aloitus" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Siirry aloitussivulle" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Mene kohtaan..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Sisältö" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ (usein kysytyt)" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Pikanäppäimet" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Viat" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_Tietoja" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Kaikki palkit" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Näytä kaikki palkit" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Tilapalkki" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Sivupalkit" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Näytä sivupalkit" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Koko näyttö" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Voi _muokata" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Vaihda muokattavuus" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Ei mitään" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Viimeksi käydyt sivut" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Viimeksi _muokatut sivut" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historia" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Kuvakkeet _ja teksti" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Vain _kuvakkeet" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Vain _teksti" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Suuret kuvakkeet" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Pienet kuvakkeet" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "P_ienimmät kuvakkeet" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Lisää 'leikkausraidat' valikkoihin" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Paina <Ctrl><Välilyönti> siirtyäksesi sivupalkkiin" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Poista linkit poistettaessa sivu" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Muista kohdistimen sijainti sivulla" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Tiedostoa tai kansiota ei ole.\n" "Tarkista polku." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Ei tiedostoa tai kansiota: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Päivitä muistio?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Tämä muistio on luotu Zimin vanhemmalla versiolla.\n" "Haluatko päivittää uusimpaan versioon nyt?\n" "\n" "Päivitys kestää jonkin aikaa ja saattaa aiheuttaa muutoksia\n" "muistioon. Otathan varmuuskopion ennen päivityksen aloittamista.\n" "\n" "Jos et päivitä, Zimin toiminnoissa saattaa ilmetä häiriöitä\n" "tässä muistiossa." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Päivitetään muistiota" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Luettelo päivittyy edelleen. Linkkejä ei voi vielä muutella tuottamatta " "virheitä. Tämän toiminnon suorittaminen nyt saattaa rikkoa linkkejä. " "Haluatko todella jatkaa?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Päivitetään linkkejä" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Poistetaan linkkejä" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Luo kansio?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Kansiota \"%s\" ei ole olemassa.\n" "Luodaanko se nyt?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Ei auennut: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Tällä sivulla ei ole liitekansiota" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Muokataan tiedostoa: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Käytät ulkoista sovellusta tiedoston muokkaamiseen. Voit sulkea tämän " "valintaikkunan kun olet valmis." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Työpöytäwiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Harri K. Hiltunen https://launchpad.net/~harri-k-hiltunen\n" " Juhana Uuttu https://launchpad.net/~rexroom\n" " Matti Pulkkinen https://launchpad.net/~matti-pulkkinen3\n" " Torsti Schulz https://launchpad.net/~torsti-schulz" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Sisällysluettelo" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "vain luku" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Etsi" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Etsi sivuilta..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Paluulinkki..." msgstr[1] "%i _Paluulinkit..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Sivun tallennus ei onnistunut: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Jatkaaksesi voit tallentaa kopion tästä sivusta ja hylätä \n" "muutokset, tai vain hylätä muutokset. \n" "Jos tallennat kopion, voit palauttaa sen myöhemmin." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Hylkää muutokset" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Tallenna kopio" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Hyppää" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Hyppää sivulle" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Uusi alisivu" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Uusi sivu" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Huomaa, että olemattoman sivun linkittäminen\n" "luo uuden sivun linkin kohteeksi." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Sivun nimi" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Sivupohja" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Sivu on jo olemassa" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Tallenna kopio" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Tuo sivu" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Tekstitiedostot" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Siirrä sivu" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Siirrä sivu \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Päivitä sivu %i , jolla on linkki tähän" msgstr[1] "Päivitä sivut %i , joilla on linkki tähän" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Muuta sivun nimeä" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Muuta sivun \"%s\" nimeä" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Päivitä otsikko vastaavaksi" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Poista sivu" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Poista sivu \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Sivu \"%s\" ja kaikki sen \n" "alisivut ja liitteet poistetaan" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Poista tähän viittaavat linkit sivulta %i" msgstr[1] "Poista tähän viittaavat linkit sivuilta %i" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "Poistetaan tiedosto %i" msgstr[1] "Poistetaan tiedostot %i" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Liitä tiedosto" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Sivulla \"%s\" ei ole kansiota liitteille" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Lisää kuvat linkkinä" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Muistio" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Avaa muistio" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Oletusmuistio" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Lisää muistio" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Valitse muistion nimi ja kansio." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Kansio" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Päivitetään sisällysluetteloa..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "K_umoa" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Tee uudelleen" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Leikkaa" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopioi" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "L_iitä" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "P_oista" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Vaihda valintaruksi 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Vaihda valintaruksi 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Muokkaa linkkiä tai oliota..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Poista linkki" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Päiväys ja aika..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Kuva…" #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Lue_telmamerkit" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Numeroitu lista" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "_Valintaruksilista" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "_Teksti tiedostosta..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Linkki…" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Lisää linkki" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Tyhjennä muotoilu" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Etsi…" #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Etsi _seuraava" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Etsi _edellinen" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "Ko_rvaa…" #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Sanamäärä..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Suurenna" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "_Pienennä" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "P_alauta koko" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Uusi _liite" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "_Tiedostomallineet..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Otsikko _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Otsikko 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Otsikko _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Otsikko 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Otsikko _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Otsikko 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Otsikko _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Otsikko 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Otsikko _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Otsikko 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Voimakas" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Voimakas" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "K_ursiivi" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Kursiivi" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Korostus" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Korostus" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Yliviivaus" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Yliviivaus" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Alaindeksi" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Yläindeksi" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Tasalevyinen" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Tasalevyinen" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Paina <Enter> avataksesi linkin\n" "(Jos ei toiminnassa, paina <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Näytä kohdistin myös niillä sivuilla joita ei voi muokata" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Muuta \"KamelinKyttyrä\" -muotoiset yhdyssanat aina linkeiksi" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Muuta tiedostopolut aina linkeiksi" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Valitse kohdistimen alla oleva sana kokonaan muotoilua muutettaessa" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Vähennä sisennystä näppäimellä <BackSpace>\n" "(Jos ei käytössä, paina <Shift><Tab> vähentääksesi)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Toistuva valintaruksin klikkaaminen kiertää kaikkien tilavaihtoehtojen läpi" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Listan jäsenen sisennyksen muuttaminen vaikuttaa myös sen alikohtiin" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Valintaruksin ruksiminen muuttaa myös sen alivalinnat" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Päivitä wikin muotoilumerkinnät lennossa" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Leikepöydälle kopioitavan tekstin oletusmuotoilu" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Liitetiedostomallineiden kansio" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Wikiä ei määritelty: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopioi _muodossa..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Siirrä valittu teksti..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Muokkaa asetuksia" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Muokkaa linkkiä" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Kopioi _linkki" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopioi sähköpostiosoite" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Avaa kansio" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Avaa sovelluksella..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Avaa" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Mallineita ei ole asennettu" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Kansiota\n" "%s\n" "ei ole.\n" "Luodaanko se nyt?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Lisää päiväys ja aika" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalenteri" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Linkki päivämäärään" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Lisää kuva" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Liitä kuva ensin" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Tiedostomuoto ei tuettu: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Muokkaa kuvaa" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Sijainti" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Linkin kohde" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Leveys" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Korkeus" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Palauta koko" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Lisää tekstiä tiedostosta" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Muokkaa linkkiä" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Linkki" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Teksti" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Seuraava" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Edellinen" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "_Huomioi kirjainkoko" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "K_oko sana" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Säännöllinen _lauseke" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Korostus" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Etsi" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Asetukset" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Etsi ja korvaa" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Etsi mitä" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Korvaava teksti" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Korvaa" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Korvaa k_aikki" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Sanamäärä" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Kappale" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Valinta" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Sanoja" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Rivejä" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Merkkejä" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Siirrä teksti toiselle sivulle" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Siirrä" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Siirrä teksti kohteeseen" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Jätä linkki uuteen sivuun" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Avaa uusi sivu" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Uusi tiedosto" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Käyttöliittymä" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Muokkaus" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Asetukset" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Lisäosat" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Käytä omaa kirjasinta" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Lisää" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Asetukset" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Riippuvuudet" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Ei riippuvuuksia" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "Valmis" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Epäonnistui" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Valinnainen" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Tekijä" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Päällä" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Lisäosa" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Lisäosan asetukset" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Lisäosan %s valinnat" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Ominaisuudet" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Muistion ominaisuudet" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Uusimmat muutokset" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Tänään" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Eilen" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Muokattu viimeksi" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Edistynyt haku; voit käyttää loogisia suhteuttimia kuten\n" "AND, OR, NOT (suom. JA, TAI, EI). Lisätietoa ohjeessa." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Arvosana" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "WWW-palvelin" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Palvelin ei käynnissä" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Julkaise sivu kaikille" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Portti" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Palvelin käynnistetty" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Palvelin pysäytetty" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Mallineet" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Selaa" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopioi malline" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Valitse tiedosto" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "_Laajenna kaikki" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Supista kaikki" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Tyhjennä" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Valitse kansio" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Valitse kuva" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Alku>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Vasen sivupalkki" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Oikea sivupalkki" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Alapalkki" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Yläpalkki" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Ylävasen" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Alavasen" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Yläoikea" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Alaoikea" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "Liitä alla oleva tieto bugiraporttiin" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Kaikki tiedostot" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Kuvat" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Lokitiedosto" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Tiedosto on jo olemassa" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Tiedosto <b>\"%s\"</b> on jo olemassa.\n" "Voit vaihtaa nimeä tai korvata alkuperäisen tiedoston." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Tiedoston nimi" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Selaa" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Korvaa" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Tämän muistion tiedostoa tai kansiota ei löytynyt" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Muistiota ei löytynyt: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Annettu sivun nimi ei kelpaa.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Kelvoton sivun nimi \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Sisällysluettelon päivitys on kesken.\n" "Yritetty komento tarvitsee luetteloa.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Sivua ei voi muokata: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Wikien välinen avainsana" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Aloitussivu" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Juurikansio" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profiili" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetiikka" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Lisäosa sallii aritmeettisten laskujen sisällyttämisen Zimiin.\n" "Se perustuu aritmeettiseen moduliin lähteestä\n" "http://pp.com.mx/python/arithmetic .\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmeettinen" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Ei tiedossa" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Tyyppi" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Koko" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Muokattu" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Siirrä tähän" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Kopioi tähän" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Peru" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Liiteselain" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Sijainti ikkunassa" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Liitteet" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Näytä liiteselain" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Liite" msgstr[1] "%i _Liitettä" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Paluulinkkipalkki" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa lisää ikkunaelementin, joka listaa ne sivut, joilta on linkki auki " "olevaan sivuun.\n" "\n" "Tämä keskeinen lisäosa toimitetaan aina Zimin ohessa.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "PaluuLinkit" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Esikatsele" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Tapahtui virhe kuvaa luotaessa.\n" "Haluatko silti tallentaa lähdekoodin?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Päiväkirja" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Päivä" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Viikko" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Kuukausi" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Vuosi" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Näytä kalenteri sivupalkissa, ei ikkunassaan" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Sivu kullekin" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Tänään" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Kalenteri" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Näytä kalenteri" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d.%m.%Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalenteri" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Tänään" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Lisää kaavio" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa on GraphViz:iin perustuva kaaviomuokkain.\n" "\n" "Tämä keskeinen lisäosa toimitetaan aina Zimin ohessa.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "_Kaavio..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Lisää kaavio" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Häiriötön muokkaus" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Lisäosa antaa asetuksia, joiden avulla Zimistä saa piilotettua\n" "keskittymistä haittaavia, huomiota herättäviä piirteitä.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Piilota vetovalikkopalkki kokonäyttötilassa" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Piilota työkalupalkki kokonäyttötilassa" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Piilota polkupalkki kokonäyttötilassa" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Piilota tilapalkki kokonäyttötilassa" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Suurin sallittu sivun leveys" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Pystysuuntainen marginaali" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Tekstin taustaväri" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Tekstin väri" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Näytön taustaväri" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Lisää Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa on Ditaa:han perustuva kaaviomuokkain.\n" "\n" "Tämä keskeinen lisäosa toimitetaan aina Zimin ohessa.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Muokkaa Ditaa:ta" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Lisää yhtälö" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa on LaTeX:iin perustuva yhtälömuokkain.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Muokkaa yhtälöä" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Lisää Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Lisäosa on Gnuplot:iin perustuva kuvaajamuokkain.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Muokkaa Gnuplot:ia" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Lisää GNU R -kuvaaja" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Lisäosa on GNU R:ään perustuva kuvaajamuokkain.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Muokkaa GNU R -kuvaajaa" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Välitön laskin -lisäosa ei pystynyt arvioimaan kohdistimen alla olevaa " "yhtälöä." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Välitön laskin" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa sallii yksinkertaisten matemaattisten yhtälöiden arvioinnin " "välittömästi sivulla.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Lausekkeen jäsennys ei onnistunut" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "_Arvioi yhtälön tuloarvo" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Lisää symboli" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa lisää \"Lisää symboli\" -valinnan ja sallii typografisten merkkien " "automaattisen muotoilun.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mboli..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Rivien järjestin" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Lisäosa järjestää valitut rivit aakkosjärjestykseen.\n" "Jos lista on jo järjestetty, järjestys käännetään.\n" "(A-Ö -> Ö-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Järjestä rivit" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Valitse useampi kuin yksi rivi." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Linkkipuun rakennekartta" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa esittää muistion linkkipuun rakenteen graafisesti. Havainnollista " "kuviota voi käyttää vaikkapa miellekarttana.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Näytä linkkipuun rakenne" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Tulosta selaimelle" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa kiertää tulostintuen puutteen Zimissä. Se vie sivun html-muodossa ja " "avaa sen selaimella. Jos selaimessa on tulostintuki, lisäosa mahdollistaa " "tulostamisen sitä kautta.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Tulosta selaimelle" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Muistilappu" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa antaa ikkunan tekstin tuomiseen Zimiin raahaten tai leikepöydältä " "liittäen.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Muistilappu..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Luo uusi sivu kullekin muistilapulle" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Nimi" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Avaa _sivu" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Hylkää muistilappu?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Lisää nuotit" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa on GNU Lilypond:iin perustuva nuottimuokkain.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Yleinen lisäyksen ylätunniste" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Yleinen lisäyksen alatunniste" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Muokkaa nuotteja" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Lisää kuvankaappaus" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa sallii kuvankaappauksen lisäämisen suoraan sivulle.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Kuvankaappaus..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Kaappaa koko näyttö" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Valitse ikkuna tai alue" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Viive" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekuntia" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Tapahtui jokin virhe ajettaessa \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Oikoluku" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa lisää oikoluvun, joka käyttää gtkspell:iä.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "_Oikoluku" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "Syynä saattaa olla, että kielen sanastoa ei ole asennettu" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "pystysuuntaiset viivat" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Sisällysluettelo" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa näyttää auki olevan sivun sisällysluettelon ikkunaoliossaan.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Näytä sisällysluettelo omassa ikkunassaan, ei sivupalkissa" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Sisällysluettelo" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Alenna" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Ylennä" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Tunnisteet" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Lisäosa sallii sisällysluettelon suodattamisen pilvestä valittavien " "tunnisteiden perusteella.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Järjestä sivut tunnisteiden mukaan" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "ei tunnisteita" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Järjestä aakkosjärjestykseen" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Tehtävälista" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa näyttää muistion kaikki avoimet tehtävät. \n" "Avoimet tehtävät voivat olla joko avoimia valintarukseja tai työvaiheita, " "jotka on merkitty tunnisteilla kuten \"TEE\" tai \"KORJAA\".\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Oleta kaikkien valintaruksien olevan tehtäviä" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Luo sivun nimestä tunnisteita tehtävien työvaiheille" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Oleta viimeinen tekopäivä kalenterin sivuilla oleville työvaiheille" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Liputa maanantaina tai tiistaina erääntyvät tehtävät ennen viikonloppua" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Tehtävien tunnisteet" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Seuraavan tehtävän tunniste" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Tunnisteet tehtäville, joita ei voi tehdä nyt" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Luetteloitavat alipuut" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Alipuut, joita ei huomioida" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Muistiosta on luotava sisällysluettelo" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Tämä on ensimmäinen kerta kun tehtävälista avataan, \n" "joten sisällysluettelo täytyy rakentaa uudelleen. \n" "Luettelon rakentaminen saattaa kestää jopa \n" "minuutteja. Tämä tarvitsee tehdä vain kerran." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Suodatin" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Näytä vain nyt tehtävissä olevat tehtävät" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i avoin tehtävä" msgstr[1] "%i avointa tehtävää" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Kaikki tehtävät" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Ei tunnisteita" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Tehtävä" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Päiväys" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ilmoitusalueen kuvake" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa lisää kuvakkeen ilmoitusalueelle.\n" "\n" "Riippuu paketista: Gtk+ versio 2.10 tai uudempi.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klassinen ilmoitusaluekuvake,\n" "älä käytä uudentyylistä kuvaketta Ubuntussa" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Oma kuvake kullekin muistiolle" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Muistilappu..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Muu..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Muistiot" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim työpöytä-wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Versionhallinta" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Lisäosa tuo muistioihin versionhallinnan.\n" "\n" "Lisäosa tukee Bazaar, Git ja Mercurial -versionhallintajärjestelmiä.\n" "\n" "Tämä keskeinen lisäosa toimitetaan Zimin ohessa.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Tallenna automaattisesti säännöllisin väliajoin" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Zimin automaattisesti tallentama versio" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "_Tallenna versio..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versiot..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Ei uusia muutoksia muistiossa edellisen version tallennuksen jälkeen" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Ei muutosta edellisestä versiosta" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Salli versionhallinta?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Versionhallinta ei ole päällä tässä muistiossa.\n" "Kytketäänkö se päälle?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Taustaosa" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Tallenna versio" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Kommentoi tämä versio" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versiotallenne Zim-muistiosta" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versiot" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Sivu" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Näytä _kommentit" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Valitse yksi versio nähdäksesi muutokset sen ja nykyisen välillä \n" "tai monta nähdäksesi muutokset niiden välillä.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Kommentti" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Palauta versio" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Näytä _muutokset" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Vierekkäin" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Kommentoitu sivun lähdekoodi" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Palautetaanko tallennettu versio käyttöön nykyisen tilalle?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Haluatko palauttaa sivun: %(page)s\n" "tallennettuun versioon: %(version)s ?\n" "\n" "Kaikki edellisen tallennuksen jälkeen tehdyt muutokset menetetään!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Muutokset" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Versio" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Tallenna tapahtumat lokiin Zeitgeist:lla" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Työntää tapahtumat Zeitgeist-palvelin-daemonille." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wiki-sivu: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "Tekstieditori" #~ msgid "File browser" #~ msgstr "Tiedostoselain" #~ msgid "Email client" #~ msgstr "Sähköposti-ohjelma" #~ msgid "Web browser" #~ msgstr "Nettiselain" #~ msgid "Pages" #~ msgstr "Sivut" #~ msgid "Output" #~ msgstr "Ulostulo" #~ msgid "Slow file system" #~ msgstr "Hidas tiedostojärjestelmä" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "Match c_ase" #~ msgstr "Sama _kirjainkoko" #~ msgid "_Filter" #~ msgstr "_Suodata" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/sl.po�������������������������������������������������������������������������0000664�0001750�0001750�00000266414�12613750113�015630� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovenian translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2013-04-14 19:38+0000\n" "Last-Translator: Andrej Znidarsic <andrej.znidarsic@gmail.com>\n" "Language-Team: Slovenian <sl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Zaganjanje programa je spodletelo: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "ukaz %(cmd)s\n" "je vrnil stanje končanja %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Poganjanje je spodletelo: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Privzeto" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Videti je,da ste našli hrošča" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Ni takšne datoteke: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Ni mogoče brati: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "To običajno pomeni, da datoteka vsebuje neveljavne znake" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Podrobnosti" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "V datoteko ni mogoče pisati: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Datoteka se je spremenila na disku: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Prilagodi ..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Ni bilo najdenih programov" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Odpri s programom \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Nastavite program za odpiranje povezav \"%s\"" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Nastavite program za odpiranje datotek\n" "vrste \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Nastavi programe" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Dodaj program" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Privzete sistemske vrednosti" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Ime" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Ukaz" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Naredi program privzet" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Orodja po meri" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Nastavite lahko orodja po meri, ki se bodo pojavila\n" "v orodnem meniju v v orodni vrstici ali vsebinskih menijih." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Uredi orodje po meri" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Opis" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikona" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Ukaz ne spremeni podatkov" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Prikaži v orodni vrstici" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Ob izvedbi ukaza bodo zamenjani naslednji parametri:\n" "<tt>\n" "<b>%f</b> vir strani kot začasna datoteka\n" "<b>%d</b> mapa prilog trenutne strani\n" "<b>%s</b> prava izvorna datoteka strani (če obstaja)\n" "<b>%n</b> mesto beležke (datoteka ali mapa)\n" "<b>%D</b> koren dokumenta (če obstaja)\n" "<b>%t</b> izbrano besedilo ali beseda pod kazalko\n" "<b>%T</b> izbrano besedilo vključno z oblikovanjem wiki\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Izvozi" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Posodabljanje kazala" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Izvažanje beležke" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Mapa obstaja: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Mapa že obstaja in ima vsebino. Izvoz v to mapo lahko prepiše obstoječe " "datoteke. Ali želite nadaljevati?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Datoteka že obstaja" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Ta datoteka že obstaja.\n" "Ali jo želite prepisati?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Izberite strani za izvoz" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Celotna _beležka" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Posamezna _stran" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Stran" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Izberite obliko izvoza" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Drugo ..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Oblika" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Predloga" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Poveži datoteke pod korenom dokumenta s polno potjo datotek" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Preslikaj koren dokumenta v URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Izberite izhodno datoteko ali mapo" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Izhodna mapa" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Kazalo" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Izhodna datoteka" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Pokaži _dnevnik" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Datoteka" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Uredi" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "Po_gled" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Vstavi" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Iskanje" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "O_blika" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Orodja" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Pojdi" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "Pomo_č" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Vrstica _poti" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Orodna vrstica" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nova stran ..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nova po_dstran ..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Odpri drugo beležko ..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Odpri v novem _oknu" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Uvozi stran ..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Shrani" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Shrani _kopijo ..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Izvozi ..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Pošlji _na ..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Premakni stran ..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "P_reimenuj stran ..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Izbriši stran" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Lastnosti" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "Za_pri" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Končaj" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Iskanje ..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Iskanje _povratnih povezav ..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Nedavne spremembe ..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Kopiraj _mesto" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Predloge" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Možnosti" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Znova naloži" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Odpri _mapo prilog" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Odpri mapo _beležk" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Odpri koren _dokumenta" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Odpri mapo _dokumenta" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Pripni _datoteko" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Pripni zunanjo datoteko" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Uredi _vir" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Zaženi _spletni strežnik" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Posodobi kazalo" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "_Orodja po meri" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "Na_zaj" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Pojdi stran nazaj" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Naprej" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Pojdi stran naprej" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "N_adrejeni predmet" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Pojdi na nadrejeno stran" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Podrejeni predmet" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Pojdi na podrejeno stran" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "P_redhodna v kazalu" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Pojdi na predhodno stran" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Naslednja v kazalu" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Pojdi na naslednjo stran" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Domov" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Pojdi domov" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Skoči na ..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "V_sebina" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_V&O" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Tipkovne bližnjice" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Hrošči" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_O Programu" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Vsi pladnji" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Pokaže vse pladnje" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Vrstica stanja" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Stranski pladnji" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Prikaže stranske pladnje" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Celozaslonski način" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "_Uredljiva beležka" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Preklopi uredljivost beležke" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Brez" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Nedavne strani" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Strani nedavno _spremenjeno" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Zgodovina" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikone i_n besedilo" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Le _ikone" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "_Le besedilo" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Velike ikone" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Male ikone" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Drobcene ikone" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Menijem dodaj 'odtrgljive' trakove" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Za preklop na stranski pladenj uporabite <Ctrl><Preslednica>" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Odstrani povezave ob izbrisu strani" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Pri odpiranju strani vedno uporabi zadnji položaj kazalca" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Navedena datoteka ali mapa ne obstaja.\n" "Preverite, če je pot pravilna." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Ni takšne datoteka ali mape: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Ali želite posodobiti beležko?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Ta beležka je bila ustvarjena s starejšo različico programa zim.\n" "Ali jo želite nadgraditi na najnovejšo različico sedaj?\n" "\n" "Nadgrajevanje lahko vzame nekaj časa in lahko naredi različne\n" "spremembe beležke. V splošnem je pred tem dobro narediti\n" "varnostno kopijo.\n" "\n" "Če sedaj ne boste nadgradili, morda nekatere\n" "zmožnosti ne bodo delovale kot pričakovano." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Nadgrajevanje beležke" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Kazalo se še vedno posodablja. Dokler se ne konča povezav ni mogoče pravilno " "posodabljati. Izvajanje tega dejanja sedaj bi lahko zlomilo povezave. Ali " "želite vseeno nadaljevati?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Posodabljanje povezav" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Odstranjevanje povezav" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Ali želite ustvariti mapo?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Mapa \"%s\" še ne obstaja.\n" "Ali jo želite ustvariti zdaj?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Ni mogoče odpreti: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Ta stran nima mape prilog" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Urejanje datoteke: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Datoteko urejate v zunanjem programu. To pogovorno okno lahko zaprete, ko " "končate" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Namizni wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Andrej Znidarsic https://launchpad.net/~andrej.znidarsic\n" " Sasa Batistic https://launchpad.net/~sasa-batistic\n" " Vanja Cvelbar https://launchpad.net/~cvelbar\n" " c0dehunter https://launchpad.net/~kralj-primoz" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Kazalo" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "le za branje" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Iskanje" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Iskanje strani ..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i_Povratnih povezav ..." msgstr[1] "%i_Povratna povezava ..." msgstr[2] "%i_Povratni povezavi ..." msgstr[3] "%i_Povratne povezave ..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Ni mogoče shraniti strani: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Za nadaljevanje lahko shranite kopijo te strani ali\n" "zavržete vse spremembe. Tudi v primeru shranjevanja kopije bodo\n" "vse spremembe zavržene, vendar lahko kopijo pozneje obnovite." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Zavrzi spremembe" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Shrani kopijo" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Skoči na" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Skoči na stran" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nova podstran" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nova stran" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Povezovanje na neobstoječo stran\n" "samodejno ustvari tudi novo stran." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Ime strani" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Predloga strani" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Stran obstaja" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Shrani kopijo" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Uvozi stran" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Besedilne datoteke" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Premakni stran" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Premakni stran \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Podosobi %i strani, ki se povezujejo na to stran" msgstr[1] "Podosobi %i stran, ki se povezuje na to stran" msgstr[2] "Podosobi %i strani, ki se povezujeta na to stran" msgstr[3] "Podosobi %i strani, ki povezujejo na to stran" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Preimenuj stran" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Preimenuj stran \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Posodobi glavo te strani" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Izbris strani" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Ali želite izbrisati stran \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Stran \"%s\" in vse njene\n" "podstrani in priloge bodo bile izbrisane" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Odstrani povezave iz %i strani, ki se povezujejo na to stran" msgstr[1] "Odstrani povezave iz %i strani, ki se povezuje na to stran" msgstr[2] "Odstrani povezave iz %i strani, ki se povezujeta na to stran" msgstr[3] "Odstrani povezave iz %i strani, ki se povezujejo na to stran" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i datotek bo izbrisanih" msgstr[1] "%i datoteka bo izbrisana" msgstr[2] "%i datoteki bosta izbrisani" msgstr[3] "%i datoteke bodo izbrisane" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Priloži datoteko" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Stran \"%s\" nima mape za priloge" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Vstavi slike kot povezavo" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Beležka" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Odpri beležko" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Privzeta beležka" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Dodajanje beležke" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Izberite ime in mapo za beležko." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Mapa" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Posodabljanje kazala ..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Razveljavi" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Uveljavi" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "I_zreži" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopiraj" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Prilepi" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Izbriši" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Preklopi izbirno polje 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Preklopi izbirno polje 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "Ur_edi povezavo ali predmet ..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Odstrani povezavo" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Datum in čas ..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Sliko ..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Vrs_tični seznam" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Oštevilčen seznam" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "S_eznam spustnih polj" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "_Besedilo iz datoteke ..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "Po_vezavo ..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Vstavljanje povezave" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "Po_čisti oblikovanje" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Najdi ..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Najdi _naslednje" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Najdi _predhodno" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Zamenjaj ..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Število besed ..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Približaj" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "O_ddalji" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "O_bičajna velikost" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nova _priloga" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "_Predloge datotek ..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Naslov_1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Naslov 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Naslov_2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Naslov 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Naslov_3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Naslov 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Naslov_4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Naslov 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Naslov_5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Naslov 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Močno" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Močno" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Poudari" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Poudari" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Označi" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Označi" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Prečrtaj" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Prečrtaj" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "Po_dpisano" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Nadpisano" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Verbatim" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Verbatim" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Uporabite <Vnosno tipko> za slednje povezavam\n" "(V primeru, da je onemogočeno, lahko še vedno uporabite <Alt><Vnosna tipka>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Pokaži kazalko tudi za strani, ki jih ni mogoče urejati" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Samodejno pretvori besede \"CamelCase\" v povezave" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Samodejno pretvori poti datotek v povezave" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Samodejno izberi trenutno besedo ob uveljavitvi oblikovanja" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Odstrani zamik ob <Povratni tipki>\n" "(Če je onemogočeno, lahko še vedno uporabite <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Povaljajoče klikanje izbirnega polja kroži skozi njegova stanja" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "(Odstranitev)Zamik na predmetu seznama spremeni tudi podpredmete" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Izbira izbirnega polja bo spremenila tudi podpredmete" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Sproti preoblikuj označevanje wiki" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Privzeta oblika za kopiranje besedila na odložišče" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Mape s predlogami za datoteke prilog" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Takšnega wikija ni določena: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopiraj _kot ..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Premakni izbrano besedilo ..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Uredi lastnosti" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Uredi povezavo" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "_Kopiraj povezavo" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopiraj naslov elektronske pošte" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Odpri mapo" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Odpri z ..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Odpri" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Ni nameščenih predlog" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Mapa\n" "%s\n" "še ne obstaja.\n" "Ali jo želite ustvariti zdaj?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Vstavi datum in čas" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Koledar" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Povezava na datum" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Vstavi sliko" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Najprej pripni sliko" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Vrsta datoteke ni podprta: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Urejanje slike" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Mesto" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Poveži na" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Širina" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Višina" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Ponastavi velikost" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Vstavljanje besedila iz datoteke" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Uredi povezavo" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Povezava" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Besedilo" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Naslednji" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Predhodni" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Ujemanje _velikosti črk" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Celotna _beseda" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "Logični izraz" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Poudari" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Najdi" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Možnosti" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Najdi in zamenjaj" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Besedilo iskanja" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Zamenjaj z" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Zamenjaj" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Zamenjaj _vse" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Štetje besed" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Odstavek" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Izbor" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Besede" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Vrstice" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Znaki" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Premakni besedilo na drugo stran" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Premakni" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Premakni besedilo v" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Pustite povezavo za ustvaritev nove strani" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Odpri novo stran" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Nova datoteka" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Vmesnik" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Urejanje" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Možnosti" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Vstavki" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Uporabi pisavo po meri" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Več" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Nastavi" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Odvisnosti" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Brez odvisnosti" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "V redu" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Spodletelo" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Izbirno" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Avtor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Omogočeno" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Vstavek" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Nastavi vstavek" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Možnosti za vstavek %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Lastnosti" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Lastnosti beležke" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Nedavne spremembe" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Danes" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Včeraj" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Zadnja sprememba" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Za napredno iskanje lahko uporabite operatorje kot\n" "AND, OR in NOT. Oglejte si stran pomoči za več podrobnosti." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Rezultat" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Spletni strežnik" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Strežnik se ni zagnal" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Dovoli javni dostop" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Vrata" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Strežnik se je zagnal" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Strežnik se je zaustavil" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Predloge" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Brskaj" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopiraj predlogo" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Izbor datoteke" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Razširi _vse" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Zloži vse" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Počisti" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Izbor mape" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Izbor slike" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Zgoraj>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Levi stranski pladenj" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Desni stranski pladenj" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Spodnji pladenj" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Zgornji pladenj" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Zgoraj levo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Spodaj levo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Zgoraj desno" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Spodaj desno" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Pri poročanju tega hrošča vključite\n" "podrobnosti iz besedilnega polja spodaj" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Vse datoteke" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Slike" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Dnevniška datoteka" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Datoteka že obstaja" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Datoteka z imenom <b>\"%s\"</b> že obstaja.\n" "Uporabite lahko drugo ime ali prepišete obstoječo datoteko." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Ime datoteke" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Prebrskaj" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Prepiši" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Ni mogoče najti datoteke ali mape za to beležko" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Beležke ni bilo mogoče najti: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Ime dane strani ni veljavno.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Neveljavno ime strani \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Kazalo se še vedno posodablja medtem ko program\n" "poskuša izvesti opravilo, ki ga potrebuje\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Ni mogoče spremeniti strani: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Ključna beseda medwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Domača stran" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Koren dokumenta" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Aritmetika" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Vstavek vam omogoča vstavitev arimetričnih izračunov v zim.\n" "Osnovan je na aritmetričnem modulu iz\n" "http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Aritmetika" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Neznano" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Vrsta" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Velikost" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Spremenjeno" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Premakni sem" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Kopiraj sem" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Prekliči" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Brskalnik prilog" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Položaj v oknu" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Priloge" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Pokaži brskalnik prilog" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i_ prilog" msgstr[1] "%i_ priloga" msgstr[2] "%i_ prilogi" msgstr[3] "%i_ priloge" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Pladenj povratnih povezav" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek doda dodaten gradnih, ki prikazuje seznam\n" "strani, ki se povezujejo s trenutno stranjo.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Povratne povezave" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Predogled" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Med ustvarjanjem slike je prišlo do napake.\n" "Ali vseeno želite shraniti izvorno besedilo?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Dnevnik" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Dan" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Teden" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Mesec" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Leto" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Pokaže koledar v stranskem pladnju namesto v pogovornem oknu" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Uporabi stran za vsako" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "D_anes" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Kole_dar" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d. %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Koledar" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Danes" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Vstavi diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek zagotavlja urejevalnik diagramov za zim osnovan na GraphViz.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram ..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Vstavi diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Urejanje brez motenj" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Ta vstavek doda nastavitev, ki pomaga pri uporabi\n" "programa zim brez motenj.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Skrij menijsko vrstico v celozaslonskem načinu" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Skrij orodno vrstico v celozaslonskem načinu" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Skrij vrstico poti v celozaslonskem načinu" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Skrij vrstico stanja v celozaslonskem načinu" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Največja širina strani" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Navpični odmik" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Barva ozadja besedila" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Barva ospredja besedila" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Barva ozadja zaslona" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Vstavi Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek zagotavlja urejevalnik diagramov osnovan na Ditaa.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Vstavi Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Vstavi enačbo" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek zagotavlja urejevalnik enačb za zim osnovan na latexu.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Uredi enačbo" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Vstavi Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Ta vstavek zagotavlja urejevalnik grafov za na zimu osnovan Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Uredi Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Vstavi GNU R graf" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Ta vstavek zagotavlja urejevalnik grafov za zim osnovan na GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Uredi GNU R graf" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Medvstični vstavek računala ni mogel\n" "oceniti izraza na kazalki." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Medvrstično računalo" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek vam omogoča hitro oceno enostavnih\n" "matematičnih izrazov v zimu.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Ni mogoče razčleniti izraza" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Oceni _matematiko" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Vstavi simbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek doda pogovorno okno 'Vstavi simbol' in omogoča\n" "samodejno oblikovanje tipografskih znakov.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Si_mbol ..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Razvrščevalnik vrstic" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Ta vstavek razvrsti izbrane vrstice v abecednem vrstnem redu.\n" "V primeru da je seznam že razvrščen, bo bil vrstni red obrnjen.\n" "(A-Ž v Ž-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Razvrsti vrstice" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Najprej izberite eno ali več vrstic besedila" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Zemljevid povezav" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek zagotavlja pogovorno okno z grafično\n" "predstavitvijo strukture povezav beležke.\n" "Uporabiti ga je mogoče kot neke vrste \"miselni\n" "vzorec\", ki kaže, kako se strani povezujejo.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Pokaži zemljevid povezav" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Natisni v brskalnik" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek zagotavlja izogibanje pomanjkanju\n" "podpore za tiskanje v programu zim. Trenutno stran izvozi\n" "v html in jo odpre v brskalniku. V primeru, da brskalnik\n" "podpira tiskanje, boste lahko svoje podatke natisnili\n" "v dveh korakih.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Natisni v brskalnik" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Hitro sporočilce" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek doda pogovorno okno za hitro spuščanje besedila ali\n" "vsebine odložišča na stran zim.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "HItro sporočilce ..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Ustvari novo stran za vsako sporočilce" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Naslov" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Odpri _stran" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Ali želite zavreči sporočilo?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Vstavljanje partiture" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek zagotavlja urejevalnik partitur za zim osnovan na GNU Lilypond.\n" "\n" "Je je jedrni vstavek, ki je del zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Skupna glava vključi" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Skupna noga vključi" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Uredi partituro" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Vstavi zaslonski posnetek" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek omogoča zajemanje zaslonskega posnetka\n" "in njegovo neposredno vstavljanje v stran zim.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Zaslonski posnetek ..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Zajemi celoten zaslon" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Izberite okno ali področje" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Zamik" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekunde" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Med poganjanjem \"%s\" je prišlo do napake" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Črkovalnik" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Doda podporo črkovanja z uporabo gtkspell.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Preveri _črkovanje" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "To lahko pomeni, da nimate nameščenih\n" "ustreznih slovarjev" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Kazalo vsebine" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek doda dodaten gradnik, ki pokaže preglednico\n" "vsebine trenutne strani.\n" "\n" "To je osnovni vstavek, ki pride s programom zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" "Pokaži gradnik kazala vsebine kot ledbeč gradnik namesto v stranskem pladnju" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Kazalo vsebine" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Nižja raven" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Višja raven" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Oznake" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Ta vstavek zagotavlja kazalo strani, ki je filtrirano z izbiro oznak v " "oblaku.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Razvrsti strani po oznakah" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "neoznačeno" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Razvrsti po abecedi" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Seznam nalog" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek doda pogovorno okno, ki prikazuje vse odprte\n" "naloge v tej beležki. Odprte naloge so lahko odprta\n" "izbira polja ali stvari označene z oznakami \"TODO\" ali \"FIXME\".\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Obravnavaj vsa izbirna polja kot naloge" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Pretvori ime strani v oznake za predmete nalog" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Implicitni rok za naloge v straneh koledarja" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "Označi naloge, ki imajo rok v ponedeljek ali torek pred vikendom" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Oznake za označevanje nalog" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Oznaka za naslednjo nalogo" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Oznake za naloge brez dejanj" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Poddrevesa iz katerih naj bo ustvarjeno kazalo" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Poddrevesa za prezrtje" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Treba je pripraviti kazalo beležke" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Seznam nalog je sedaj prvič odprt.\n" "Zato je treba znova izgraditi kazalo.\n" "Glede na velikost beležke lahko to traja\n" "do nekaj minut. Ob naslednji uporabi seznama\n" "nalog to ne bo več potrebno." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Pokaži le naloge, kjer je mogoče izvesti dejanje" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i odprtih predmetov" msgstr[1] "%i odprt predmet" msgstr[2] "%i odprta predmeta" msgstr[3] "%i odprti predmeti" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Vsa opravila" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Neoznačeno" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Naloga" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Datum" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ikona sistemske vrstice" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek doda ikono sistemske vrstice za hiter dostop.\n" "\n" "Ta vstavek zahteva Gtk+ 2.10 ali noveši.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Običajna ikona sistemske vrstice\n" "en uporabite nove ikone stanja na Ubuntuju" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Pokaži ločeno ikono za vsako beležko" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Hitro sporočilce ..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Drugo ..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Beležke" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Namizni Wiki Zim" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Nadzor različic" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Ta vstavek doda nadzor različic za beležke.\n" "\n" "Ta vstavek podpira sisteme za nadzor različic Bazaar, Git in Mercurial.\n" "\n" "To je jedrni vstavek, ki je del zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Samodejno shrani različico ob rednih obdobjih" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Samodejno shranjena različica z zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "S_hrani različico ..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Različice ..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "V tej beležki od shranjevanja zadnje različice ni bilo sprememb" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Ni sprememb od zadnje različice" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Ali želite omogočiti nadzor različic?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Nadzor različic v tej beležki trenutno ni omogočen.\n" "Ali ga želite omogočiti?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Zaledje" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Shrani različico" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Vnesite opombo za to različico" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Shranjena različica iz programa zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Različice" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Stran" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Ogled _zabeležke" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Izberite različico za ogled sprememb med tisto različico in trenutnim " "stanjem.\n" "Izberete lahko več različic za ogled sprememb med njimi.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Opomba" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Obnovi različico" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Pokaži _spremembe" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "Stran _ob strani" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Vir zabeležene strani" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Ali želite stran obnoviti na shranjeno različico?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Ali želite obnoviti stran: %(page)s\n" "na shranjeno različico: %(version)s?\n" "\n" "Vse spremembe od zadnjega shranjevanja bodo izgubljene!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Spremembe" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Različica" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Beleži dogodke s programom Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Objavi dogodke v ozadnjemu programu Zeitgeist." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Strani Wiki: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Pages" #~ msgstr "Strani" #~ msgid "File browser" #~ msgstr "Brskalnik datotek" #~ msgid "Text Editor" #~ msgstr "Urejevalnik besedila" #~ msgid "Email client" #~ msgstr "Odjemalec e-pošte" #~ msgid "Web browser" #~ msgstr "Spletni brskalnik" #~ msgid "_Filter" #~ msgstr "_Filtriraj" #~ msgid "Prio" #~ msgstr "Prednost" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/zh_TW.po����������������������������������������������������������������������0000664�0001750�0001750�00000260734�12613750113�016244� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-15 02:26+0000\n" "Last-Translator: Zihao Wang <Unknown>\n" "Language-Team: Simplified Chinese <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "程式執行錯誤: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "返回碼非零 %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "執行錯誤: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "預設" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "好像你發現了一個Bug" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "無此檔案:%s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "無法讀取: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "通常指此檔案包含了無效的特殊字元" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "細節" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "檔案無法寫入: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "硬碟裡的檔案已被修改: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "自訂..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "未找到應用程式" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "以 \"%s\" 開啟" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "設定用于打開“%s”連結的程式" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "設定用于打開“%s”類型文件的程式" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "設定應用程式" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "新增應用程式" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "系統預設" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "名稱" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "指令" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "設定預設應用程式" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "無法找到程式 \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "自訂工具" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "您可以自訂工具使其顯示於\n" "工具選單、工具列、和滑鼠右鍵選單中" #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "編輯自訂工具" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "說明" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "圖示" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "指令不會更動資料" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "其輸出會替換當前所選" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "顯示於工具列" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "匯出" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "更新索引" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "匯出筆記本" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "目錄已存在: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "此為已存在並有檔案之文件夾。若匯入此文件夾將覆蓋現存檔案。要這麼做嗎?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "已有此檔案" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "已有此檔案\n" "是否覆蓋?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "選擇欲匯出之頁面" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "整部筆記本(_n)" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "單頁(_p)" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "頁面" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "包括子頁面" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "選擇匯出格式" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "其它..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "格式" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "模板" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "以完整路徑鏈結文件根目錄下之文件" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "對應根目錄文件為URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "連線獲取更多模板" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "選擇匯出檔案或文件夾" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "匯出文件夾" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "索引頁" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "匯出檔案" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "檢視系統紀錄(_L)" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "文件(_F)" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "編輯(_E)" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "檢視(_V)" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "加入(_I)" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "尋找(_S)" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "格式(_M)" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "工具(_T)" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "前往(_G)" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "幫助(_H)" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "路徑列(_A)" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "工具列(_T)" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "建立子頁面(_U)" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "開啟別的筆記本(_O)..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "於新視窗中開啟(_W)" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "匯入頁面(_I)" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "儲存(_S)" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "另存副本(_C)" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "匯出(_X)" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "傳送至...(_S)" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "移動頁面(_M)" #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "重新命名頁面(_R)" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "移除頁面(_R)" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "屬性(_T)" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "關閉(_C)" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "離開(_Q)" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "搜尋(_S)..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "搜尋反向鏈結(_B)..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "最近更改..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "複製位置(_L)" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "範本(_T)" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "選項(_E)" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "重新載入(_R)" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "開啟附件之文件夾(_F)" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "開啟筆記本之文件夾(_N)" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "開啟文件根目錄(_D)" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "開啟文件夾(_D)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "附加檔案(_F)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "附加外部檔案" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "編輯原始碼(_S)" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "啟動 Web 伺服器(_W)" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "更新索引" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "自行定義工具(_T)" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "回返(_B)" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "向後翻頁" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "往前(_F)" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "向前翻頁" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "父頁面(_P)" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "上層頁面" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "子頁面(_C)" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "翻至子頁面" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "上一則索引(_P)" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "上一頁" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "下一則索引(_N)" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "下一頁" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "主頁面(_H)" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "首頁" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "前往(_J)..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "內容(_C)" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "常見問題(_F)" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "快捷鍵(_K)" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "錯誤回報(_B)" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "關於(_A)" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "所有窗格(_A)" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "顯示所有窗格" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "狀態列(_S)" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "側窗格(_S)" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "顯示側窗格" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "全螢幕(_F)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "允許編輯筆記本(_E)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "切換是否允許編輯筆記本" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "無(_N)" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "最近頁面(_R)" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "最近更改的頁面(_C)..." #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "歷史(_H)" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "圖示和文字(_A)" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "僅圖示(_I)" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "僅文字(_T)" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "大圖示(_L)" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "小圖示(_S)" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "微圖示(T)" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "為選單增加裁切線" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "使用<Ctrl><Space>來切換側面板" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "刪除頁面時移除鏈接" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "打開頁面時指標永遠位于上次位置" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "指定之文件或文件夾不存在\n" "請檢查路徑是否正確" #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "無此文件或文件夾: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "頁面包含未儲存之更動" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "升級筆記本?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "此筆記本乃由較舊版本之 zim 所建立\n" "您希望現在更新至最新版本嗎?\n" "\n" "此作業需花些時間\n" "並對筆記本進行各種更動\n" "建議先備份再進行升級\n" "\n" "若不升級,某些功能\n" "或將無法正常運作" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "筆記本升級中" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "正忙著更新索引作業全部完成後,才能完整更新所有鏈結若一意執行目前命令,將破壞鏈結。仍想繼續嗎?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "更新鏈結" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "移除鏈結" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "要建立文件夾?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "文件夾\"%s\"不存在\\n\n" "你想新增它嗎?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "無法開啟: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "此頁面無附件目錄" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "正在編輯的文件:%s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "你正使用外部程式編輯檔案,當你完成編輯後再關閉對話視窗。" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "桌面維基" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " DreamerC https://launchpad.net/~dreamerwolf\n" " Henry Lee https://launchpad.net/~henrylee\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Thomas Tsai https://launchpad.net/~thomas.tsai\n" " Tsung https://launchpad.net/~tsunghao\n" " YPWang https://launchpad.net/~blue119\n" " Zihao Wang https://launchpad.net/~wzhd\n" " cyberik https://launchpad.net/~cyberikee" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "索引" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "唯讀" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "尋找" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "搜索頁面..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i 個反向鏈結(_B)..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "無法儲存頁面: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "欲繼續作業,您可儲存本頁面之副本,或捨棄任何更動\n" "若儲存副本,仍會捨棄更動\n" "但可於稍後回復副本" #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "捨棄更動(_D)" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "儲存副本(_S)" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "前往" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "前往頁面" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "新的子頁面" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "新頁面" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "請留意,當鏈結至不存在之頁面\n" "將自動建立新頁面" #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "頁面名稱" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "頁面樣式" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "已有此頁面" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "儲存副本" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "匯入頁面" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "文字檔案" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "搬移頁面" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "搬移頁面 \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "更新連結至此書頁共 %i 頁之頁面" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "重新命名頁面" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "重新命名頁面 \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "更新此頁面之標題" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "刪除頁面" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "刪除頁面 \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "頁面 \"%s\" 及其所屬\n" "所有子頁面和附件,都將被刪除" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "移除連結至此書頁之頁面共 %i 頁之鏈結" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i 檔案將被移除" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "附加檔案" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "頁面 \"%s\" 並無附件之文件夾" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "以鏈結方式加入圖像" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "筆記本" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "開啟筆記本" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "預設筆記本" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "新增筆記本" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "請為您的筆記本選擇名字和文件夾" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "文件夾" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "請選擇一個空資料夾來創建新筆記本.\n" "當然你可以選擇已有筆記本的資料夾.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "沒有可用插件以顯示這個物件." #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "需要 %s 插件以顯示這個物件." #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "更新索引..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "還原(_U)" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "取消還原(_R)" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "剪下(_T)" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "複製(_C)" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "貼上(_P)" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "刪除(_D)" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "切換成打勾之勾選框'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "切換成打叉之勾選框'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "編輯鏈結或物件(_E)..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "移除鏈結(_R)" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "日期時間(_D)..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "圖像(_I)..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "項目符號列表" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "順序(_N)列表" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "可復選列表(_x)" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "從檔案加入文字(_F)..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "鏈結(_L)..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "加入鏈結" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "清除格式(_C)" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "尋找(_F)..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "找下一個(_X)" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "找上一個(_V)" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "取代(_R)..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "字數統計..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "放大(_Z)" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "縮小(_O)" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "正常大小(_N)" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "新附件(_A)" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "文件模板(_T)" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "一級標題(_1)" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "一級標題" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "二級標題(_2)" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "二級標題" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "三級標題(_3)" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "三級標題" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "四級標題(_3)" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "四級標題" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "五級標題(_5)" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "五級標題" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "粗體字(_S)" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "粗體字" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "斜體字(_E)" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "斜體字" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "底線字(_M)" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "底線字" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "刪除線(_S)" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "刪除線" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "下標體(_S)" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "上標體(_S)" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "去格式字(_V)" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "去格式字" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "以 <Enter> 鍵追蹤鏈結\n" "(若不勾選,仍可用 <Alt><Enter> 來執行)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "於「不允許編輯」之頁面上,仍然顯示游標" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "自動將 \"CamelCase\" 文字轉換為鏈結" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "自動將檔案路徑轉換為鏈結" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "套用格式時,自動選取目前文字" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "以 <BackSpace> 鍵去除縮排\n" "(若不勾選,仍可用 <Shift><Tab> 來執行)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "反復點擊復選框會循環切換復選框的狀態" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "縮排或去除縮排任一條列項,將順勢更動所有子項" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "勾選任一勾選框,將順勢更動所有子項" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "即時重新格式化wiki之標示語法" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "復制到剪貼板文本的預設格式" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "包含附件文件模板的文件夾" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "內部鏈結 %s 無效" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "複製為(_A)..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "移動已選文字..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "(_E)編輯屬性" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "編輯鏈結(_E)" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "複製鏈結(_L)" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "複製電子郵址" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "打開文件夾" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "以...開啟" #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "開啟檔案或鏈結(_O)" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "沒有安裝任何模板" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "\"文件夾\\n\"\n" "\"%s\\n\"\n" "\"不存在。\\n\"\n" "\"您想新增它嗎?\"" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "加入日期時間" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "日曆(_C)" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "鏈結日期(_L)" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "加入圖像" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "先附加圖像" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "不支援的文件類型: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "編輯圖像" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "位置" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "鏈結至" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "寬度" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "高度" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "重設大小(_R)" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "加入檔案裡的文字" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "編輯鏈結" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "鏈結(_L)" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "文字" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "下一個(_N)" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "上一個(_P)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "符合大小寫(_C)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "尋找完整單字(_W)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "正規表達式(_R)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "以高亮度標示(_H)" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "尋找" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "選項" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "尋找並替換" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "尋找" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "替換為" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "替換(_R)" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "替換全部(_A)" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "字數統計" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "段落" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "選取範圍" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "字" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "行" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "字符" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "字元數 (不計空格)" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "移動文本到其它頁面" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "移動(_M)" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "移動文字到" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "保留到新頁面的連結" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "保留到新頁面的連結" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "新增檔案" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "界面" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "編輯" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "選項" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "外掛程式" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "應用程式" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "使用自訂字體" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "更多(_M)" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "設定(_O)" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "連線獲取更多插件" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "依賴套件" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "無需依賴其他套件" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "確定" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "失敗" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "可選的" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "作者" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "已啟用" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "外掛程式" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "設定外掛程式" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "外掛程式 %s 之選項" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "設定預設文字編輯器" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "屬性" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "筆記本屬性" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "最近更改" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "今天" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "昨天" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "最後更新" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "欲進階搜尋,可使用運算元如AND、OR、NOT\n" "細節可參考「幫助」之內容" #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "只搜尋該頁面及其子頁面" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "相符" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "網頁伺服器" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "伺服器未啟動" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "允許公開存取" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "埠" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "伺服器已啟動" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "伺服器已停止" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "範本" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "瀏覽" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "複製範本" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "選擇檔案" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "展開所有(_A)內容" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "折疊所有(_C)內容" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "清除" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "選擇文件夾" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "選擇圖像" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "左側窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "右側窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "底部窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "頂部窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "左上方" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "左下方" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "右上方" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "右下方" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "提交錯誤時請包含以下文字框中的信息" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "全部文件" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "圖像" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "系統紀錄檔" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "檔案已存在" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "此檔名<b>\"%s\"</b>已存在\\n\n" "你可更改成其它檔名或是直接覆蓋" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "檔案名稱" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "瀏覽(_B)" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "覆蓋" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "找不到此筆記本之檔案或文件夾" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "請指定一個筆記本" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "找不到筆記本: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "指定用於匯出的位置" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "輸出資料夾已存在且非空, 可以使用\"--overwrite\"以強制匯出" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "輸出檔案已存在, 可以使用\"--overwrite\"以強制匯出" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "指定檔案以匯出MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "指定資料夾以匯出整個筆記本" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "指定的頁面名稱無效\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "無效之頁面名稱 \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "索引更新中... \\n\n" "請等待!\\n\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "無法修改頁面: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "內部維基關鍵詞" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "首頁" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "文件根目錄" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "屬性" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<未知的>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "檔案 %(file)s 的第%(line)i 行, 在 \"%(snippet)s\" 附近有錯誤" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "算術運算" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "此外掛可在 zim 中嵌入算數計算。\n" "此外掛基于\n" "http://pp.com.mx/python/arithmetic\n" "中的算數模塊。\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "算術(_A)" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "未知狀態" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "文件類型" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "大小" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "修改日期" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "移動到此處(_M)" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "複製至此(_C)" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "取消" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "附件瀏覽器" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "這個插件會在底欄顯示附件資料夾的圖示\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "視窗中的位置" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "附件" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "顯示附件瀏覽器" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i 個附件(_A)" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "反向連結窗格" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件會在視窗中新增一個小部件,\n" "顯示連結到當前頁面的所有頁面列表。\n" "\n" "此插件為 zim 自帶的核心插件。\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "反向連結" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "預覽(_P)" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "圖像產生失敗\n" "要儲存原始文字嗎?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "書籤欄" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\t這個插件顯示書籤欄\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "儲存書籤" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "新書籤新增到書籤欄最前" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "新增書籤" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "書籤" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "您想要刪除所有書籤嗎?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "顯示完整頁面名稱" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "設定新名稱" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "恢復原有名稱" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "削除" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "移除全部" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "在新視窗開啟" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "設爲當前頁" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "日誌" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "天" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "週" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "月" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "年" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "不以對話框,而於側邊窗格顯示日曆" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "每個一個頁面" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "今天(_D)" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "日曆(_D)" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A (週幾) %d (日) %B (月) %Y (年)" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "日曆" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "今天(_T)" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "加入圖表" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式以 GraphViz 為基礎,提供圖表編輯器\n" "\n" "此為 zim 內附之核心外掛程式\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "圖表(_G)..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "加入圖表" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "免打擾編輯模式" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "全螢幕時隱藏選單列" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "全螢幕時隱藏工具列" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "全螢幕時隱藏路徑列" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "全螢幕時隱藏狀態列" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "最大頁面寬度" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "垂直邊緣" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "文字背景顏色" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "文字的前景顏色" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "背景顏色" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "插入 ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "編輯(_E) Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "加入方程式" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式提供 latex 之方程式編輯器\n" "\n" "\n" "此為 zim 內附之核心外掛程式\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "編輯公式(_E)" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "插入 Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "該插件提供一個基于Gnuplot的繪圖編輯器\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "編輯Gnuplot(_E)" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "加入數據圖" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "此外掛程式以 GNU R 為基礎,提供數據圖表設計語法編輯器\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "編輯數據圖(_E)" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "內置計算機" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "不能解析表達式" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "執行計算(_M)" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "加入符號" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式提供「加入符號」之對話框\n" "方便自動輸入特殊符號\n" "\n" "此為 zim 內附之核心外掛程式\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "符號(_m)..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "行排序" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "排序(_S)" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "請先選擇多于一行的文字" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "鏈結圖覽" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式提供對話框\n" "以圖像顯示筆記本之鏈結結構\n" "以「心像圖覽」方式\n" "呈現頁面之交互關係\n" "\n" "此為 zim 內附之核心外掛程式\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "顯示鏈結圖覽" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "列印至瀏覽器" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式為尚無列印支援的 zim 提供解決之道\n" "程式將匯出目前頁面為 html 並開啟瀏覽器程式\n" "若瀏覽器具備列印支援\n" "則此方法可利用上述兩個步驟(匯出頁面、開啟瀏覽器)\n" "讓您得以列印您的資料\n" "\n" "此為 zim 內附之核心外掛程式\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "列印至瀏覽器(_P)" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "快速記筆記" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式會使用對話框,迅速而方便的\n" "將某些文字或剪貼簿內容置入 zim 頁面\n" "\n" "此為 zim 內附之核心外掛程式\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "快速記筆記..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "為每則記事建立新頁面" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "標題" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "打開頁面(_P)" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "放棄筆記?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "插入樂譜" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "編輯樂譜(_E)" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "加入螢幕快照" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "螢幕快照(_S)..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "快照整面螢幕" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "選擇視窗或區域" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "延遲" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "秒" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "執行\"%s\"時發生錯誤" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "拼字檢查" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "藉由 gtkspell 提供拼字檢查功能\n" "\n" "此為 zim 內附之核心外掛程式\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "拼字檢查(_S)" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "目錄" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "浮動顯示目錄(代替側面板)" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "目錄" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "降級" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "提升" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "標籤" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "此外掛依據標簽雲中的所選標簽,生成頁面索引\\n\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "按標簽排序頁面" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "無標簽" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "依英文字母排序" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "工作清單" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式會加入對話框,顯示此筆記本所有未完成之工作項目\n" "此類項目包含未勾選之勾選框\n" "或帶有 \"TODO\" 或 \"FIXME\" 等標籤之項目\n" "\n" "此為 zim 內附之核心外掛程式\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "將所有勾選框視為工作項目" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "將頁面名稱作為任務項的標簽" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "您沒有在日期頁中設置任務的截止日期" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "將任務標記為在週末前的週一或週二到期" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "以標籤註記工作項目" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "下一個任務的標簽" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "要索引的子樹" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "要忽略的子樹" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "需建立筆記本之索引" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "因第一次使用工作清單,需重建索引\n" "筆記本之大小\n" "將決定作業所需時間\n" "但下次重啟清單\n" "則無需再次重建" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "過濾器" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "只顯示可執行任務" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i 件未完成工作" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "所有任務" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "沒有標籤" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "工作項目" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "日期" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "系統匣圖示" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此外掛程式於系統匣增添 zim 圖示以方便存取\n" "\n" "此外掛程式需依賴 Gtk+ 之 2.10 或較新之版本\n" "\n" "此為 zim 內附之核心外掛程式\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "使用舊樣式之系統匣圖示\n" "在 Ubuntu 作業系統上不使用新風格之狀態欄圖示" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "一本筆記本一個圖示" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "快速記筆記(_Q)" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "其它(_O)..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "筆記本" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim 桌面維基" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "版本控制" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "每隔一段間自動儲存" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "zim 自動儲存的版本" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "儲存版本(_A)" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "所有版本(_V)" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "最近儲存的版本以來,此筆記本至今尚無更動" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "最近版本以來,至今尚無更動" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "啟用版本控制?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "此筆記本尚未啟用版本控制功能\n" "需啟用嗎?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "後端" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "儲存版本" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "請為此版本加註" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "zim 儲存之版本" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "版本" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "頁面(_P)" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "檢視註解(_A)" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "選擇一個版本,以檢視該版本與目前版本的差異\n" "或選擇多個版本,以檢視各版本間的差異\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "註記" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "回復版本(_R)" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "顯示更動(_C)" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "並列比較(_S)" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "註解頁面來源" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "恢復頁面至原先儲存之版本?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "您要將頁面:%(page)s\n" "回復至先前儲存的版本:%(version)s 嗎?\n" "\n" "上次儲存版本以來,至今的所有更動都將消失喔!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "更動" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "版本" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "使用 Zeitgeist 記錄事件" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "事件記錄送往 Zeitgeist 伺服器。" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "維基頁面:%s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "文字編輯器" #~ msgid "Web browser" #~ msgstr "網頁瀏覽器" #~ msgid "Output" #~ msgstr "輸出" #~ msgid "Match c_ase" #~ msgstr "大小寫相符(_a)" #~ msgid "File browser" #~ msgstr "文件瀏覽器" #~ msgid "Pages" #~ msgstr "頁面" #~ msgid "_Filter" #~ msgstr "過濾器(_F)" #~ msgid "Email client" #~ msgstr "電郵程式" #~ msgid "Slow file system" #~ msgstr "較慢的檔案系統" #~ msgid "Prio" #~ msgstr "優先等級" ������������������������������������zim-0.65/translations/en_GB.po����������������������������������������������������������������������0000664�0001750�0001750�00000261764�12613750113�016167� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# English (United Kingdom) translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2014-07-30 23:35+0000\n" "Last-Translator: Paul Thomas Stiles <paulstiles91@gmail.com>\n" "Language-Team: English (United Kingdom) <en_GB@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Attach File" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Failed to run application: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "returned non-zero exit status %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Failed running: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Default" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:0" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Looks like you found a bug" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "No such file: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Could not read: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "This usually means the file contains invalid characters" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Details" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "File is not writable: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "File changed on disk: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Customise..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "No Applications Found" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Open with \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Configure an application to open \"%s\" links" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Configure an application to open files\n" "of type \"%s\"" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Configure Applications" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Add Application" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "System Default" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Name" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Command" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Make default application" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Custom Tools" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Edit Custom Tool" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Description" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Icon" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Command does not modify data" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Show in the toolbar" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Export" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Updating index" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Exporting notebook" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Folder exists: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Folder already exists and is not empty, exporting to this folder may " "overwrite existing files. Do you want to continue?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "File exists" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "This file already exists.\n" "Do you want to overwrite it?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Select the pages to export" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Complete _notebook" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Single _page" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Page" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Select the export format" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Other..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Format" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Template" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Link files under document root with full file path" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Map document root to URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Select the output file or folder" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Output folder" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Index page" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Output file" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "View _Log" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_File" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Edit" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_View" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Insert" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Search" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "For_mat" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Tools" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Go" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Help" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "P_athbar" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Toolbar" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_New Page..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "New S_ub Page..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Open Another Notebook..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Open in New _Window" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Import Page..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Save" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Save A _Copy..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xport..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Send To..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Move Page..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Rename Page..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Delete Page" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Proper_ties" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Close" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Quit" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Search..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Search _Backlinks..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Recent Changes..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Copy _Location" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Templates" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "Pr_eferences" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Reload" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Open Attachments _Folder" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Open _Notebook Folder" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Open _Document Root" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Open _Document Folder" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Attach _File" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Attach external file" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "_Edit Source" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Start _Web Server" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Update Index" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Custom _Tools" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Back" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Go page back" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Forward" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Go page forward" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Parent" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Go to parent page" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "_Child" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Go to child page" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "_Previous in index" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Go to previous page" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Next in index" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Go to next page" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Home" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Go to home" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Jump To..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Contents" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Keybindings" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Bugs" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_About" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_All Panes" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Show All Panes" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Statusbar" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Side Panes" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Show Side Panes" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Fullscreen" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Notebook _Editable" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Toggle notebook editable" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_None" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Recent pages" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Recently Changed Pages" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_History" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Icons _And Text" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "_Icons Only" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "_Text Only" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Large Icons" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Small Icons" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Tiny Icons" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Add 'tearoff' strips to the menus" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Use <Ctrl><Space> to switch to the side pane" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Remove links when deleting pages" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Always use last cursor position when opening a page" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "The file or folder you specified does not exist.\n" "Please check the path you entered." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "No such file or folder: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Upgrade Notebook?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Upgrading notebook" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "The index is still busy updating. Until this is finished, links can not be " "updated correctly; performing this action now could break links. Do you want " "to continue anyway?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Updating Links" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Removing Links" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Create folder?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Could not open: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "This page does not have an attachments folder" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Editing file: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "You are editing a file in an external application. You can close this " "dialogue when you are done" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "A desktop wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Biffaboy https://launchpad.net/~curtisbull\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Matthew Gadd https://launchpad.net/~darkotter\n" " Michael Mulqueen https://launchpad.net/~michael.mulqueen\n" " MoLE https://launchpad.net/~moleonthehill\n" " Nicholas Wastell https://launchpad.net/~nickwastell\n" " Otto Robba https://launchpad.net/~otto-ottorobba\n" " Paul Thomas Stiles https://launchpad.net/~paulstiles91\n" " Rui Moreira https://launchpad.net/~rui-f-moreira\n" " Vibhav Pant https://launchpad.net/~vibhavp\n" " dotancohen https://launchpad.net/~dotancohen" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Index" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "readonly" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Search" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Search Pages..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Backlink..." msgstr[1] "%i _Backlinks..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Could not save page: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "To continue, you can save a copy of this page or discard\n" "any changes. If you save a copy, changes will also be\n" "discarded, but you can restore the copy later." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Discard Changes" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Save Copy" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Jump to" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Jump to Page" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "New Sub Page" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "New Page" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Please note that linking to a nonexistant page\n" "also creates a new page automatically." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Page Name" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Page Template" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Page exists" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Save Copy" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Import Page" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Text Files" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Move Page" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Move page \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Update %i page linking to this page" msgstr[1] "Update %i pages linking to this page" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Rename Page" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Rename page \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Update the heading of this page" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Delete Page" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Delete page \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "Page \"%s\" and all of its sub-pages and attachments will be deleted" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Remove links from %i page linking to this page" msgstr[1] "Remove links from %i pages linking to this page" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i file will be deleted" msgstr[1] "%i files will be deleted" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Page \"%s\" does not have a folder for attachments" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Insert image as link" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Notebook" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Open Notebook" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Default notebook" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Add Notebook" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Please select a name and a folder for the notebook." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Folder" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Updating index..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Undo" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Redo" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "Cu_t" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Copy" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Paste" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Delete" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Toggle Checkbox 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Toggle Checkbox 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Edit Link or Object..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Remove Link" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Date and Time..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Image..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Bulle_t List" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "_Numbered List" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Checkbo_x List" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Text From _File..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Link..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Insert Link" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Clear Formatting" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Find..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Find Ne_xt" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Find Pre_vious" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Replace..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Word Count..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Zoom In" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Zoom _Out" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normal Size" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "New _Attachment" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "File _Templates..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Heading _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Heading 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Heading _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Heading 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Heading _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Heading 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Heading _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Heading 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Heading _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Heading 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Strong" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Strong" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Emphasis" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Emphasis" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Mark" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Mark" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Strike" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Strike" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Subscript" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Superscript" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Verbatim" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Verbatim" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Show the cursor even for pages that cannot be edited" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Automatically turn \"CamelCase\" words into links" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Automatically turn file paths into links" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Automatically select the current word when applying formatting" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Repeatedly clicking a check box cycles through the check box states" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Changing indent level for a list item also changes any sub-items" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Checking a checkbox also change any sub-items" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Reformat wiki markup on the fly" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Default format for copying text to the clipboard" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Folder with templates for attachment files" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "No such wiki defined: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Copy _As..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Move Selected Text..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Edit Properties" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Edit Link" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Copy _Link" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Copy E-mail Address" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Open Folder" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Open With..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Open" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "No templates installed" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Insert Date and Time" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Calendar" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Link to date" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Insert Image" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Attach image first" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "File type not supported: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Edit Image" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Location" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Link to" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Width" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Height" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Reset Size" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Insert Text From File" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Edit Link" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Link" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Text" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Next" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Previous" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Match _case" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Whole _word" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Regular expression" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Highlight" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Find" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Options" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Find and Replace" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Search for" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Replace with" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Replace" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Replace _All" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Word Count" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Paragraph" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Selection" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Words" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Lines" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Characters" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Move Text to Another Page" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Move" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Move text to" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Leave link to new page" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Open new page" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "New File" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Interface" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Editing" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Preferences" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Plugins" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Use a custom font" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_More" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigure" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Dependencies" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "No dependencies" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Failed" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Optional" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Author" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Enabled" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Plugin" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Configure Plugin" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Options for plugin %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Properties" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Notebook Properties" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Recent Changes" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Today" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Yesterday" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Last Modified" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Score" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Web Server" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server not started" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Allow public access" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server started" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server stopped" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Templates" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Browse" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Copy Template" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Select File" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "Expand _All" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "_Collapse All" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Clear" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Select Folder" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Select Image" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Left Side Pane" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Right Side Pane" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Bottom Pane" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Top Pane" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Top Left" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Bottom Left" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Top Right" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Bottom Right" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "When reporting this bug please include\n" "the information from the text box below" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "All Files" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Images" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Log file" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "File Exists" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Filename" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Browse" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Overwrite" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Could not find the file or folder for this notebook" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Could not find notebook: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "The given page name is not valid.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Invalid page name \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Can not modify page: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Interwiki Keyword" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Home Page" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Document Root" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profile" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Arithmetic" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Arithmetic" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Unknown" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Type" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Size" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Modified" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Move Here" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Copy Here" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Cancel" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Attachment Browser" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Position in the window" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Attachments" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Attachment" msgstr[1] "%i _Attachments" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "BackLinks Pane" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "BackLinks" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Preview" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Day" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Week" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Month" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Year" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Show calendar in sidepane instead of as dialog" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Use a page for each" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "To_day" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Calen_dar" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calendar" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Today" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Insert Diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides a diagram editor for zim, based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Insert diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Insert Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Edit Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Insert Equation" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides an equation editor for zim, based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Edit Equation" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Insert Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "This plugin provides a plot editor for zim based on Gnuplot.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Edit Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Insert GNU R Plot" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "This plug-in provides a plot editor for Zim based on GNU R\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Edit GNU R Plot" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "The in-line calculator plug-in was not able\n" "to evaluate the expression at the cursor." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "In-line Calculator" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plug-in allows you to quickly evaluate simple\n" "mathematical expressions in Zim.\n" "\n" "This is a core plug-in and ships with Zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Could not parse expression" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Evaluate _Math" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Insert Symbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plug-in adds the 'Insert Symbol' dialogue and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plug-in shipping with Zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbol" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Line Sorter" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "This plug-in sorts selected lines into alphabetical order.\n" "If the list is already sorted, the order will be reversed\n" "(A-Z to Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Sort Lines" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Please select more than one line of text." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Link Map" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides a dialogue with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Show Link Map" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Print to Browser" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Print to Browser" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Quick Note" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Quick Note..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Create a new page for each note" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Title" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Open _Page" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Insert Score" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Common include header" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Common include footer" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Edit Score" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Insert Screenshot" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plug-in allows a screenshot to be taken and directly inserted \n" "into a Zim page.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Screenshot..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Capture whole screen" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Select window or region" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Delay" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "seconds" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "An error occured while running \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Spell Checker" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Adds spellchecking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Check _spelling" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "This could mean you don't have the proper\n" "dictionaries installed" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Table of Contents" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Show ToC as floating widget instead of in the sidepane" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "ToC" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Demote" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Promote" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Tags" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sort pages by tags" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "untagged" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Sort alphabetically" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Task List" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Consider all checkboxes as tasks" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Turn page name into tags for task items" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Implicit due date for task items in calendar pages" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "Flag tasks due on Monday or Tuesday before the weekend" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Labels marking tasks" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Label for next task" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Notebook indexing required" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "This is the first time the task list has been\n" "opened, so the index needs to be rebuilt.\n" "Depending on the size of the notebook, this\n" "may take several minutes. This is only\n" "necessary for the first use of the task list." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Only Show Actionable Tasks" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i open item" msgstr[1] "%i open items" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "All Tasks" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Untagged" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Task" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Date" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Tray Icon" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Show a separate icon for each notebook" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Quick Note..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Other..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Notebooks" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Version Control" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "This plug-in adds version control for notebooks.\n" "\n" "This plug-in supports the Bazaar, Git and Mercurial version control " "systems.\n" "\n" "This is a core plug-in shipping with zim.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Autosave version at regular intervals" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automatically saved version from zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "S_ave Version..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versions..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "No changes have been made in this notebook since the last version was saved." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "No changes since last version" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Enable Version Control?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Backend" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Save Version" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Please enter a comment for this version" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Saved version from zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versions" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Page" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "View _Annotated" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Select a version to see changes between that version and the current\n" "state, or select multiple versions to see changes between those versions.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Comment" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Restore Version" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Show _Changes" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Side by Side" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Annotated Page Source" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Restore page to saved version?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Changes" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Log events with Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Pushes events to the Zeitgeist daemon." #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wiki page: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "Text Editor" #~ msgid "File browser" #~ msgstr "File browser" #~ msgid "Email client" #~ msgstr "Email client" #~ msgid "Web browser" #~ msgstr "Web browser" #~ msgid "Pages" #~ msgstr "Pages" #~ msgid "Output" #~ msgstr "Output" #~ msgid "Match c_ase" #~ msgstr "Match c_ase" #~ msgid "Slow file system" #~ msgstr "Slow file system" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "_Filter" #~ msgstr "_Filter" ������������zim-0.65/translations/zh_CN.po����������������������������������������������������������������������0000664�0001750�0001750�00000270130�12613750113�016201� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Simplified Chinese translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-12 07:30+0000\n" "Last-Translator: Zihao Wang <Unknown>\n" "Language-Team: Simplified Chinese <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "应用程序运行失败: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "返回非零的退出状态 %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "运行失败:%s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "默认" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "看起来你发现了一个Bug" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "无此文件:%s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "无法读取:%s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "这通常意味着文件包含无效字符" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "详细信息" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "文件不可写:%s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "文件已发生变化:%s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "自定义..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "未找到应用程序" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "使用 \"%s\" 打开" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "配置用于打开“%s”链接的程序" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "配置用于打开“%s”类型文件的程序" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "配置应用程序" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "添加应用程序" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "系统默认" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "名称" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "命令" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "设置默认程序" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "无法找到程序 \"%s\"" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "自定义工具" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "你可以设置自定义工具,\n" "它们会出现在菜单、工具栏和右键菜单中。" #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "编辑自定义工具" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "说明" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "图标" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "命令不修改数据" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "执行结果会替换当前所选" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "显示在工具栏中" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "程序执行中如下的参数会被替换为相应的内容:\n" "<tt>\n" "<b>%f</b> 临时的页面源码文件\n" "<b>%d</b> 当前页面的附件目录\n" "<b>%s</b> 真实的页面源文件(如果存在)\n" "<b>%n</b> 笔记本的位置(文件或目录)\n" "<b>%D</b> 文档根目录(如果存在)\n" "<b>%t</b> 光标所选择的文本或单词\n" "<b>%T</b> 所选的文本包含有wiki格式化\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "导出" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "更新索引" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "导出笔记本" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "文件夹已经存在: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "文件夹已存在且非空,导出到这个文件夹可能导致已存在的文件被覆盖。继续吗?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "文件已存在" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "这个文件已经存在。" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "选择要导出的页面" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "整个笔记本(_N)" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "单个页面(_p)" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "页面" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "包括子页面" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "选择导出的格式" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "其他..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "格式" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "模板" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "对文档目录下的文件使用完整路径链接" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "把文档根映射为URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "联网获取更多模板" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "选择输出文件或文件夹" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "每个页面分别导出至一个文件" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "所有页面导出至单个文件" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "输出文件夹" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "索引页" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "输出文件" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "出现了 %(n_error)i 个错误和 %(n_warning)i 个警告, 请查看日志" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "出现 %i 个错误" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "出现 %i 个警告, 请查看日志" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "导出成功" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "查看日志(_L)" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "文件(_F)" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "编辑(_E)" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "视图(_V)" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "插入(_I)" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "搜索(_S)" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "格式(_M)" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "工具(_T)" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "转到(_G)" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "帮助(_H)" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "路径栏(_A)" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "工具栏(_T)" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "新建页面(_N)" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "新建子页面(_U)" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "打开另一个笔记本(_O)" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "在新窗口中打开(_W)" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "导入页面(_I)" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "保存(_S)" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "另存为(_C)" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "导出(_X)" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "发送至...(_S)" #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "移动页面(_M)" #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "重命名页面(_R)" #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "删除页面(_R)" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "属性(_T)" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "关闭(_C)" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "退出(_Q)" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "搜索(_S)..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "搜索反向链接(_B)..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "最近更改..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "复制地址(_L)" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "模板(_T)" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "首选项(_E)" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "重新载入(_R)" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "打开附件目录(_F)" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "打开笔记本目录(_N)" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "打开文档根目录(_D)" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "打开文档目录(_D)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "添加附件(_F)" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "附加外部文件" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "编辑源码(_S)" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "启动Web服务器(_W)" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "更新索引" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "自定义_工具" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "后退(_B)" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "向后翻页" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "前进(_F)" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "向前翻页" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "父对象(_P)" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "转到上级页面" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "子对象(_C)" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "转到子页面" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "上一页(_P)" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "转到上一页" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "下一页(_N)" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "转到下一页" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "主页(_H)" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "主页" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "跳转到(_J)..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "内容(_C)" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "常见问题(_F)" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "快捷键(_K)" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "报告错误(_B)" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "关于(_A)" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "所有窗格(_A)" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "显示所有窗格" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "状态栏(_S)" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "侧窗格(_S)" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "显示侧窗格" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "全屏(_F)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "笔记本可编辑(_E)" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "切换笔记本编辑状态" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "无(_N)" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "最近页面(_R)" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "最近更改的页面(_C)..." #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "历史(_H)" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "页面(_P)结构" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "图标和文字(_A)" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "只显示图标(_I)" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "只显示文本(_T)" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "大图标(_L)" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "小图标(_S)" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "微图标(T)" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "为菜单增加剪切线" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "使用<Ctrl><Space>来切换侧面板" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "删除页面时移除链接" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "打开页面时光标始终置于上一次位置" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "指定的文件或文件夹不存在。\n" "请检查路径是否正确。" #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "没有这个文件或文件夹: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "页面尚未保存" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "升级笔记本?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "此笔记本是由一个旧版本的zim创建的\n" "你希望现在就将笔记本更新到最新版本吗?\n" "\n" "此升级需要花一点时间并且会对笔记本进行各种改动\n" "建议先备份再进行此升级\n" "\n" "如果不打算现在升级,一些功能可能会不能正常工作" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "正在升级笔记本" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "索引更新正在更新中。链接可能发生错误直到索引更新结束。执行此动作将破坏链接,你是否仍要继续?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "更新链接" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "正在删除链接" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "创建目录吗?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "文件夹 “%s” 不存在。\n" "您想现在创建它吗?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "不能打开:%s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "该页面不包含附件目录" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "正在编辑文件:%s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "您正在使用外部程序编辑文件,完成后你可以关闭对话框。" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "桌面wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Exaos Lee https://launchpad.net/~exaos\n" " Feng Chao https://launchpad.net/~chaofeng\n" " H https://launchpad.net/~zheng7fu2\n" " Harris https://launchpad.net/~huangchengzhi\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Jianhan Gao https://launchpad.net/~jhgao\n" " Junnan Wu https://launchpad.net/~mygoobox\n" " Qianqian Fang https://launchpad.net/~fangq\n" " Robin Lee https://launchpad.net/~cheeselee\n" " Saul Thomas https://launchpad.net/~stthomas\n" " Tolbkni Kao https://launchpad.net/~tolbkni\n" " Xhacker Liu https://launchpad.net/~xhacker\n" " Yang Li https://launchpad.net/~liyang-deepbrain\n" " Zihao Wang https://launchpad.net/~wzhd\n" " aosp https://launchpad.net/~aosp\n" " ben https://launchpad.net/~duyujie\n" " forget https://launchpad.net/~yangchguo\n" " hutushen222 https://launchpad.net/~hutushen222\n" " lhquark https://launchpad.net/~lhquark\n" " piugkni zhang https://launchpad.net/~flamefist-163\n" " quake0day https://launchpad.net/~quake0day\n" " rns https://launchpad.net/~remotenonsense\n" " sharpevo https://launchpad.net/~sharpevo\n" " snowdream https://launchpad.net/~yanghui\n" " stein https://launchpad.net/~zhoufei715\n" " 太和 https://launchpad.net/~tayhe\n" " 宝刀没开刃 https://launchpad.net/~xkhome" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "目录" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "只读" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "查找" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "搜索页面..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i 个反向链接..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "无法保存页面: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "你可以保存此页或放弃修改。如果保存失败,稍后还可以复原。" #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "放弃更改(_D)" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "保存副本(_S)" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "跳转到" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "跳转到页面" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "新子页面" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "新建页面" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "请注意,链接到一个不存在的页面\n" "将会自动创建一个新页。" #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "页面名称" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "页模板" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "页面已存在" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "保存副本" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "导入页面" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "文本文件" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "移动页面" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "移动页面 \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "更新从 %i 到本页的页面链接" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "章节" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "重命名页面" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "重命名页面 \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "更新此页的标题" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "删除页面" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "确定删除\"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "页面“%s”和所有它的子页面及附件都将被删除。" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "移除从第 %i 页到本页的链接" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i文件将被删除" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "附加文件" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "页面 \"%s\" 并没有用于摆放附件的文件夹" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "以链接方式插入图像" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "记事本" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "打开笔记本" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "默认记事本" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "添加笔记本" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "请给笔记选择一个名称和目录" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "文件夹" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "你需要选择一个空文件夹来创建新的笔记本.\n" "当然你也可以选择打开已有的笔记本.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "没有可用插件以显示这个对象" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "需要 %s 插件以显示这个对象" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "更新索引..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "撤销(_U)" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "重做(_R)" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "剪切(_T)" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "复制(_C)" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "粘贴(_P)" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "删除(_D)" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "切换复选框为“钩”" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "切换复选框为“叉”" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "编辑链接或对象(_E)..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "去除链接(_R)" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "日期与时间(_D)..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "图像(_I)..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "项目符号列表" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "顺序(_N)列表" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "可复选列表" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "来自文件(_F)..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "链接(_L)..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "插入链接" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "清除格式(_C)" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "查找(_F)..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "查找下一个(_X)" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "查找上一个(_V)" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "替换(_R)..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "字数统计..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "放大(_Z)" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "缩小(_O)" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "正常大小(_N)" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "新附件(_A)" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "文件模板(_T)" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "一级标题(_1)" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "标题 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "二级标题(_2)" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "标题 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "三级标题(_3)" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "标题 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "四级标题(_3)" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "标题 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "五级标题(_5)" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "标题 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "粗体(_S)" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "粗体" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "斜体(_E)" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "斜体" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "下划线(_M)" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "下划线" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "删除线(_S)" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "删除线" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "下标(_S)" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "上标(_S)" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "逐字(_V)" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "逐字" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "使用“回车键”跟进链接\n" "(如果禁用也可以使用“Alt + Enter”)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "不可编辑的文档仍然显示光标" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "自动将\"CamelCase\"词转换为链接" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "自动将路径转换为链接" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "当应用格式时自动选择当前词" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "使用“删除键”取消缩进\n" "(如果禁用也可以使用“Shift + Tab”)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "反复点击复选框会循环切换复选框的状态" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "缩进(或取消)一个列表时也缩进它的子列表" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "勾选复选框时也勾选它的子项" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "实时格式化 wiki 代码" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "复制到剪贴板文本的默认格式" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "包含附件文件模板的文件夹" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "该内部链接 %s 无效" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "拷贝为(_A)..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "移动已选文本..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_编辑属性" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "编辑链接(_E)" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "复制链接(_L)" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "复制电子邮件地址" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "打开目录" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "打开方式..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_打开" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "没有安装模板" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "文件夹\n" "%s\n" "不存在。\n" "您想现在创建它吗?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "插入日期与时间" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "日历(_C)" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "链接到日期(_L)" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "插入图片" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "先将图片添加为附件" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "不支持的文件类型: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "编辑图像" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "位置" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "链接到" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "宽度" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "高度" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "恢复大小(_R)" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "从文件插入文本" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "编辑链接" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "链接(_L)" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "文本" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "下一个(_N)" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "上一个(_P)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "匹配大小写(_C)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "整词查找(_W)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "正则表达式(_R)" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "高亮显示(_H)" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "查找" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "选项" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "查找替换" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "查找" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "替换为" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "替换(_R)" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "替换全部(_A)" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "字数统计" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "段落" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "选中区域" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "字数" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "行" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "字符数" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "字符数(不计空格)" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "移动文本到其它页面" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "移动(_M)" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "移动文本到" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "保留到新页面的链接" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "打开新页面" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "新建文件" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "界面" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "编辑" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "首选项" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "插件" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "应用程序" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "使用自定义字体" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "更多(_M)" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "配置(_O)" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "联网获取更多插件" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "依赖关系" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "无依赖关系" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "确定" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "失败" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "可选的" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "作者" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "已启用" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "插件" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "配置插件" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "插件 %s 的选项" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "设置默认文本编辑器" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "属性" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "笔记本属性" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "最近更改" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "今天" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "昨天" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "最后更改" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "你可以使用操作符 AND、OR 和 NOT 实现高级搜索功能。详细内容参见帮助页。" #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "只搜索该页面及其子页面" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "次数" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Web 服务器" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "服务器未开启" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "允许公开访问" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "端口" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "服务器已启动" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "服务器已停止" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "模板" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "浏览" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "复制模板" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "选择文件" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "展开所有(_A)内容" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "折叠所有(_C)内容" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "清除" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "选择文件夹" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "选择图片" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "左侧窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "右侧窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "底部窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "顶部窗格" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "左上角" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "左下角" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "右上角" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "右下角" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "提交错误时请包含以下文本框中的信息" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "所有文件" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "图片" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "日志" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "文件已存在" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "%s文件已存在" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "文件名" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "浏览(_B)" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "覆写" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "没有找到这个笔记本的文件或文件夹" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "请指定一个笔记本" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "无法找到笔记本: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "需要指定输出位置才能导出" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "输出文件夹已存在, 并且非空, 可以使用\"--overwrite\"以强制导出." #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "导出文件已存在, 可以使用\"--overwrite\"以强制导出" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "需要输出文件以导出MHTML" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "需要输出文件夹以导出整个笔记本" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "指定的页面不可用\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "不可用的页名 \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "索引更新中... \n" "请等待!\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "不能修改页面: %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "内部维基关键词" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "首页" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "文档根目录" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "属性" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "未知文件名的占位符" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "文件 %(file)s 的第%(line)i 行, 在 \"%(snippet)s\" 附近有错误" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "算术运算" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "此插件可在 zim 中嵌入算数计算。\n" "此插件基于\n" "http://pp.com.mx/python/arithmetic\n" "中的算数模块。\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "算术(_A)" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "未知状态" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "文件类型" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "大小" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "修改日期" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "移动到此处(_M)" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "复制到此处(_C)" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "取消" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "附件浏览器" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "这个插件会在底栏显示附件文件夹的图标\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "窗口中的位置" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "附件" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "显示附件浏览器" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i 个附件(_A)" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "反向链接窗格" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件会在窗口中添加一个小部件,\n" "显示链接到当前页面的所有页面列表。\n" "\n" "此插件为 zim 自带的核心插件。\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "反向链接" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "预览(_P)" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "生成图像失败。\n" "还是需要保存文件吗?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "书签栏" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\t这个插件显示书签栏\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "保存书签" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "新书签添加到书签栏最前" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "添加书签" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "书签" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "确定删除所有书签?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "显示完整页面名称" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "设置新名称" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "改回原名称" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "移除" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "移除全部" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "在新窗口中打开" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "设为当前页" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "日志" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "此插件将笔记本的一个章节设为日志,日志可以每天一页,每周一页, 或者每月一页。可以通过日历控件访问这些页面。\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "天" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "周" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "月" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "年" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "将日历作为侧边栏" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "每个一个页面" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "在索引列展开日志页面" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "今天(_D)" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "日历(_D)" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "显示日历" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%Y 年 %B 月 %d 日 %A" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "日历" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "今天(_T)" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "插入图形" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件提供一个基于 GraphViz 的图形编辑器。\n" "这是 zim 的核心插件。\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "图形(_G)..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "插入图形" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "编辑图形(_E)" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "免打扰编辑模式" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "此插件添加了部分设置以将 zim 作为免打扰编辑器使用。\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "全屏模式中隐藏菜单栏" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "全屏模式中隐藏工具栏" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "全屏模式中隐藏路径栏" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "在全屏模式下隐藏状态栏" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "最大页面宽度" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "垂直余量" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "文本背景颜色" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "文字的前景色" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "屏幕背景颜色" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "插入 ditaa 绘图" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "此插件为 zim 提供基于 Ditaa 的绘图。\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "编辑(_E) Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "插入公式" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件提供了一个基于 Latex 的公式编辑器。\n" "此插件是随 zim 一同分发的核心插件。\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "E_quation" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "编辑公式(_E)" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "插入Gnuplot绘图" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "该插件提供一个基于Gnuplot的绘图编辑器\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "编辑Gnuplot(_E)" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "插入 GNU R 绘图" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "此插件提供 zim 基于 GNU R 的绘图编辑器。\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU_R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "编辑 GNU R Plot(_E)" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "内置计算器无法计算鼠标指针所处位置的表达式" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "内置计算器" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "这个插件可以快速帮你确定一个数学表达式。\n" "这是一个核心插件。\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "不能解析表达式" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "执行计算" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "插入符号" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "该插件将添加“插入符号”对话框并允许\n" "可打印字符进行自动排列。\n" "\n" "这是一个由 zim 提供的核心插件。\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "符号(_m)" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "行排序" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "该插件按字母顺序对选定的行进行排序\n" "如果选定的行已经是有序的,则会逆序\n" "(A-Z 变成 Z-A)\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "排序行" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "请首先选择多于一行的文本" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "链接图" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件提供了一个记事本的图形化的链接结构描述对话框。\n" "他能用于类似于“Mind Map”这样的软件来展示页面间的关系。\n" "此插件是 zim 的核心插件。\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "显示链接图" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "打印至浏览器" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件给 zim 提供了一个更好打印解决方案。\n" "他可以将当前页导出到 HTML 页面并用浏览器打开。\n" "如果浏览器支持打印,则可以很容易的将页面打印出来。\n" "此插件是随 zim 一同分发的核心插件。\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "打印至浏览器(_P)" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "快速笔记" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件会显示一个对话框,可以将文本或剪切板内容快速的粘贴到 zim 页面中。\n" "此插件是随 zim 共同分发的核心插件。\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "快速笔记..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "页面段落" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "为每个笔记创建一个新页面" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "标题" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "打开页面(_P)" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "丢弃笔记?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "插入乐谱" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "此插件为 zim 提供一基于 GNU Lilypond 的乐谱编辑器。\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Common include header" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Common include footer" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "S_core" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "编辑乐谱(_E)" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "插入屏幕截图" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "这个插件可以获取屏幕快照并且插入到页面中。\n" "这是一个核心插件。\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "截图命令" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "屏幕截图(_S)..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "截取全屏" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "选中的窗口或区域" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "延迟" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "秒" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "运行\"%s\"时发生错误" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "插入时序图" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "此插件为zim提供一个基于seqdiag的时序图编辑器, 易于编辑时序图.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "时序图" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "编辑时序图(_E)" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Source View" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "此插件可在页面中插入\"代码块\", 以嵌入式组件的形式显示语法高亮, 行号等\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "自动缩进" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "智能Home键" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "高亮当前行" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "显示右边界" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "右边界位置" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Tab宽度" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "代码块" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "插入代码块" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "语法" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "显示行号" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "拼写检查器" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "使用 gtkspell 来增加拼写检查功能\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "拼写检查(_S)" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "无法载入拼写检查" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "你可能没有安装合适的词典" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "左对齐" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "居中" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "右对齐" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "未指定" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "表格编辑器" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "此插件在页面中显示篇目表. 使用GTK TreeView实现.\n" "支持导出为HTML或LaTeX格式.\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "使用行" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "不使用网格线" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "水平线" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "竖线" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "显示帮助栏" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "网格线" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "表" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "添加行" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "删除行" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "复制行" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "向上移动行" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "向下移动行" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "更改列名称" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "打开帮助" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "删除行" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "打开链接" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "表格必须至少包含一行.\n" " 未删除." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "点击按钮前请先选择一行." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "插入表格" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "编辑表格" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "管理表格的列" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "第 1 列" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "自动\n" "换行" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "对齐" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "增加列" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "移除列" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "向前移动列" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "向后移动列" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "表格必须至少包含一列." #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "目录" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件添加一个额外的控件来显示当面页面的目录。\n" "这是 zim 自带的核心插件。\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "浮动显示目录(代替侧面板)" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "在目录中显示页面标题" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "目录" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "降级" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "提升" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "标签" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "该插件依据标签云中的所选标签,生成页面索引\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "显示完整页面名称" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "按标签排序页面" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "无标签" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "按字母顺序排序" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "任务列表" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件将会用对话框来显示记事本里面所有的开放任务。\n" "开放任务包括所有的复选项和标记有“TODO”和“FIXME”标签的项目。\n" "此插件是 zim 的核心插件。\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "将所有选中项作为任务" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "将页面名称作为任务项的标签" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "您没有在日期页中设置任务的截止日期" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "将任务标记为在周末前的周一或周二到期" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "使用标签标注任务" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "下一个(Next)任务的标签" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "尚无法执行的任务标签" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "要索引的子树" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "要忽略的子树" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "需要对记事本做索引" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "这是第一次打开任务列表。\n" "因此需要重建索引。\n" "根据记事本大小的不同将会花费不同的时间。\n" "下次再打开任务列表时就不再需要重建索引。" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "过滤器" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "只显示可执行任务" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i 个打开的项目" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "所有任务" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "没有标签" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "任务" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "日期" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "系统托盘图标" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件会增加一个用以快速访问的托盘图标。\n" "这个插件依赖于 GTK+ 2.10以上版本。\n" "此插件是 zim 的核心插件。\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "经典托盘图标,\n" "不要在 Ubuntu 上使用新风格的状态图标" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "为每个笔记显示不同的图标" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "快速笔记...(_Q)" #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "其它(_O)..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "记事本" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim 桌面维基" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "版本控制" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "此插件为笔记本添加版本控制功能。\n" "此插件支持 Bazaar, Git 及 Mercurial 版本控制系统。\n" "这是 zim 自带的核心插件。\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "以常规时间间隔自动保存版本" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "zim 自动保存的版本" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "保存版本(_A)" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "所有版本(_V)" #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "自从上次保存之后到现在为止,记事本中没有做出任何修改" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "没有做出任何修改" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "启用版本控制?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "当前笔记本没有启用版本控制。\n" "需要在当前笔记本启用版本控制吗?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "后端" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "保存版本" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "请为此版本添加一个注释" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "zim 保存的版本" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "版本" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "页面(_P)" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "查看附加说明(_A)" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "选择一个或多个版本,用于查看这些版本与当前版本的区别。\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "备注" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "恢复版本(_R)" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "显示改动(_C)" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "并排比较" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "附注的页面源代码" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "从版本的恢复此页面" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "将要恢复此页面:%(page)s\n" "它来源于此版本:%(version)s\n" "你确定要这样吗?\n" "保存的所有改变都会丢失!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "改动" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "版本" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "使用 Zeitgeist 记录事件" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "向 Zeitgeist 守护进程推送事件信息。" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "维基页面:%s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "无法找到 \"%s\" 模板" #~ msgid "Text Editor" #~ msgstr "文本编辑器" #~ msgid "Email client" #~ msgstr "邮件客户端" #~ msgid "Web browser" #~ msgstr "网页浏览器" #~ msgid "Pages" #~ msgstr "页面" #~ msgid "Output" #~ msgstr "输出" #~ msgid "File browser" #~ msgstr "文件浏览器" #~ msgid "Match c_ase" #~ msgstr "匹配大小写(_A)" #~ msgid "Slow file system" #~ msgstr "慢文件系统" #~ msgid "Prio" #~ msgstr "优先级" #~ msgid "_Filter" #~ msgstr "过滤器(_F)" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/translations/nl.po�������������������������������������������������������������������������0000664�0001750�0001750�00000276722�12613750113�015626� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dutch translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-27 19:18+0000\n" "Last-Translator: Jaap Karssenberg <jaap.karssenberg@gmail.com>\n" "Language-Team: Dutch <nl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Fout opgetreden bij de excutie van: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "%(cmd)s\n" "gaf een exit code die niet nul is: %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Programma gefaald: %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Standaard" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "U heeft waarschijnlijk een bug gevonden" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Bestand niet gevonden: %s" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Kan bestand niet lezen: %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Dit treedt meestal op wanneer het bestand ongeldige karakters bevat" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Details" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Kan bestand niet schrijven: %s" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Bestand is veranderd: %s" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Aanpassen..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Geen programma's gevonden" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Openen met \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Configureer een programma om \"%s\" links to openen" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Configureer een programma om bestanden\n" "van type \"%s\" te openen" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Programma's configureren" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Programma toevoegen" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Systeemstandaard" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Naam" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Commando" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Maak standaard programma" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Kan programma \"%s\" niet vinden" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Extra Applicaties" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Hier kunt u extra applicaties configureren die in\n" "het \"extra\" menu en in de toolbar worden toegevoegd." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Extra applicatie wijzigen" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Omschrijving" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Pictogram" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Dit commando verandert geen bestanden" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Vervang geselecteerde text met programma output" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "In de werkbalk toevoegen" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "De volgende parameters worden vervangen bij\n" "het uitvoeren van het commando:\n" "<tt>\n" "<b>%f</b> de bron tekst van de pagina als tijdelijk bestand\n" "<b>%d</b> de folder voor aangehechte bestanden voor de huidige pagina\n" "<b>%s</b> het bestand met de bron teksts voor de huidige pagina (als deze er " "is)\n" "<b>%n</b> de locatie van het notitieboek (een bestand of een folder)\n" "<b>%D</b> de documenten folder (als deze er is)\n" "<b>%t</b> de geselecteerde tekst or het woord onder de cursor\n" "<b>%T</b> de geselecteerde tekst inclusief wiki opmaak\n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exporteren" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Index aan het herladen" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Bezig met notitieboek exporteren" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Map bestaat: %s" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Map bestaat al en bevat bestanden. Exporteren naar deze map kan bestaande " "bestanden overschrijven. Wilt u doorgaan?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Bestand bestaat al" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Dit bestand bestaat al.\n" "Wilt u het overschrijven?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Selecteer de pagina's" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Gehele _notitieboek" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Eén _pagina" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Pagina" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Inclusief sub-paginas" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Selecteer het formaat" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Andere..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Opmaak" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Template" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" "Bestanden in de document root folder met de volledige bestandsnaam linken" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Map de documentenroot naar een URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Download meer templates van internet" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Selecteer de locatie" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Exporteer elke pagina naar een apart bestand" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Exporteer alle paginas naar hetzelfde bestand" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Map" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Index pagina" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Uitvoerbestand" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" "Er zijn %(n_error)i fouten en %(n_warning)i waarschuwingen opgetreden, zie " "het logboek" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "%i fouten zijn opgetreden, zie log" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "%i waarschuwing zijn opgetreden, zie log" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Export compleet" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Bekijk _Log" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Bestand" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "Be_werken" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "Beel_d" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Invoegen" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Zoeken" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_Opmaak" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "E_xtra" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Ga naar" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Hulp" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "_Lokatiebalk" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Werkbalk" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nieuwe Pagina" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nieuwe S_ub Pagina..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Open ander notitieboek..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Openen in _Nieuw Venster" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "Pagina _Importeren..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Opslaan" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "_Kopie Opslaan..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xporteren…" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Versturen..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "Pagina Ver_plaatsten..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Pagina _Hernoemen..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "Pagina Ver_wijderen" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "Ei_genschappen" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "Sl_uiten" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Afsluiten" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Zoeken..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Zoek _Verwijzingen..." #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Recente wijzigingen..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "_Locatie kopiëren" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "_Sjablonen" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Voorkeuren" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Herladen" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Open Map Met Bijlagen" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Open _Notitieboek Map" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Open Documentenroot" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "_Documenten Map Openen" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Bestand _Aanhechten" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Bestand aanhechten" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Brontext Bewerken" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Start _Web Server" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Index bijwerken" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "E_xtra Applicaties" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Terug" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Ga pagina terug" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Vooruit" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Ga pagina vooruit" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "_Omhoog" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Ga pagina omhoog" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "Om_laag" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Ga pagina omlaag" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Vor_ige in de index" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Ga naar de vorige pagina" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "Vo_lgende in de index" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Ga naar de volgende pagina" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Start" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Ga naar start" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Pagina..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "I_nhoud" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Toetsen" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Bugs" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "In_fo" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "_Alle panelen" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Laat alle panelen zien" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Statusbalk" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Zijpanelen" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Laat zijpanelen zien" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Schermvullend" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Notitieboek _Wijzigen" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Notitieboek wijzigen aan/uit" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "_Geen" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Recente pagina's" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Recente gewijzigde paginas" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Geschiedenis" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Pagina Hierarchie" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Pictogrammen _En Tekst" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Enkel _Pictogrammen" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Alleen _Tekst" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Grote Pictogrammen" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Kleine Pictogrammen" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "K_leinere Pictogrammen" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Zet afscheurstrips boven de menus" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Gebruik <Ctrl><Spatie> om naar de index te switchen" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Verwijder snelkoppelingen bij het verwijderen van pagina's" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" "Altijd laatste cursor positie gebruiken bij het openen van een pagina" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Het bestand of de map die u heeft opgegeven\n" "bestaat niet. Controleer de bestandsnaam." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Bestand of map niet gevonden: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Pagina heeft on-opgeslagen wijzigingen" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Notitiebook aanpassen?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Dit notitieboek is met een oudere versie van zim gemaakt.\n" "Wilt u het nu aanpassed naar de laatste versie?\n" "\n" "Het aanpassen van een notitieboek neemt tijd en kan\n" "diverse aanpassingen maken. Voor de zekerheid is het\n" "aan te raden om eerst een backup to maken.\n" "\n" "Als u er niet voor kiest om het notitieboek nu aan\n" "te passen houd er dan rekening mee dat zim mogenlijk\n" "niet geheel werkt zoals verwacht." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Notitieboek aan het aanpassen" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "De applicatie is nog bezig met het bijwerken van de index. Vooraleer dit " "klaar is kunnen referenties niet correct bijgewerkt worden. Als u deze actie " "nu uitvoert, kunnen er referenties ongeldig worden. Wilt u toch doorgaan ?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Snelkoppelingen bijwerken" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Links worden verwijderd" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Map creëren?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "De folder \"%s\" bestaat niet.\n" "Wilt u deze nu aanmaken?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Kan bestand niet openen: %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Deze pagina heeft geen map met bijlagen" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Bestand open: %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "U hebt een bestand in een andere applicatie geopend om te bewerken. Deze " "dialoog kan gesloten worden als u klaar bent met dit bestand." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Een desktop wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Bart https://launchpad.net/~bartvanherck\n" " Bernard Decock https://launchpad.net/~decockbernard\n" " Christopher https://launchpad.net/~cstandaert\n" " Dasrakel https://launchpad.net/~e-meil-n\n" " Frits Salomons https://launchpad.net/~salomons\n" " Jaap Karssenberg https://launchpad.net/~jaap.karssenberg\n" " Jaap-Andre de Hoop https://launchpad.net/~j-dehoop\n" " Luc Roobrouck https://launchpad.net/~luc-roobrouck\n" " Vincent Gerritsen https://launchpad.net/~vgerrits\n" " Yentl https://launchpad.net/~yentlvt\n" " cumulus007 https://launchpad.net/~cumulus-007" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Index" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "alleen lezen" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Zoeken" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Zoek paginas..." #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i _Verwijzing..." msgstr[1] "%i _Verwijzingen..." #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Pagina kon niet worden opgeslagen: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Om verder te gaan kunt u of een kopie van deze pagina\n" "opslaan, of alle wijzigingen weggooien. Als u een kopie opslaat\n" "zullen wijzigingen ook worden weggegooid, maar kunt u die\n" "later herstellen door de pagina te importeren." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Wijzigingen wegwerpen" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "Kopie _Opslaan" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Ga naar" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Ga naar pagina" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nieuwe Sub Pagina" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nieuwe Pagina" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Tip: Als u een link maakt naar een niet bestaande pagina\n" "wordt er ook automatisch een nieuwe pagina aangemaakt." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Pagina naam" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Pagina Opmaak" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Pagina bestaat al" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Kopie Opslaan" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Pagina Importeren" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Tekst Bestanden" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Pagina Verplaatsen" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Pagina \"%s\" verplaatsen" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Update ook de %i pagina die naar deze pagina verwijst" msgstr[1] "Update ook de %i pagina's die naar deze pagina verwijzen" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Sectie" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Pagina Hernoemen" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Pagina \"%s\" hernoemen" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Wijzig de titel van deze pagina" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Pagina Verwijderen" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Pagina \"%s\" verwijderen?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "De pagina \"%s\" and alle\n" "subpagina's en bijgevoegde bestanden\n" "zullen worden verwijderd." #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Verwijder links naar deze pagina van %i pagina" msgstr[1] "Verwijder links naar deze pagina van %i pagina's" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i bestand zal verwijderd worden" msgstr[1] "%i bestanden zullen worden verwijderd" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Bijlage toevoegen" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Pagina \"%s\" heeft geen map voor de bijlagen" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Plaatjes als link invoegen" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Notitieboek" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Notitieboek Openen" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Standaard Notitieboek" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Notitieboek Toevoegen" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Kies een naam en een map voor dit notitieboek" #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Map" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "Om een nieuw notitieboek te maken moet u een lege folder\n" "selecteren of de folder van een bestaand zim notitieboek.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Geen plugin beschikbaar om dit object te tonen" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "Plugin \"%s\" is nodig om dit object te laten zien" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Index aan het updaten..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Ongedaan maken" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "Op_nieuw" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Knippen" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "K_opiëren" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Plakken" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Verwijderen" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Markeer checkbox 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Markeer checkbox 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "Link of Object _Wijzigen" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Link _Verwijderen" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Datum en Tijd" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Afbeelding..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Bulle_t Lijst" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Ge_nummerde lijst" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Checkbo_x Lijst" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Tekst Uit _Bestand" #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Link..." #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Link Invoegen" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "Opmaak _Verwijderen" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Vinden..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "_Volgende zoeken" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Zoek vo_rige" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "_Vervangen..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Woorden Tellen..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "In_zoomen" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Uitz_oomen" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normale grootte" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nieuwe _Bijlage" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Bestands _Sjablonen..." #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Kop _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Kop 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Kop _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Kop 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Kop _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Kop 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Kop _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Kop 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Kop _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Kop 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Vet" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Vet" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Nadruk" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Nadruk" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Markeren" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Markeren" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "_Doorhalen" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Doorhalen" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Subscript" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Superscript" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Letterlijk" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Letterlijk" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Gebruik de <Enter> toets om links te volgen.\n" "(Wanneer deze optie uitstaat kunt nog steeds \n" "<Alt><Enter> gebruiken om links te volgen.)" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Laat de cursor ook zien voor pagina's die niet kunnen worden bewerkt" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Link woorden in CamelCase automatisch tijden het typen" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Link bestandsnamen automatisch tijden het typen" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" "Selecteer automatisch het huidige woord voor het toepassen van opmaak" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Gebruik <BackSpace> om inspringen ongedaan te maken.\n" "(Als deze optie uitstaat kunt u nog steeds <Shift><Tab> gebruiken)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" "Bij herhaaldelijk klikken gaat de checkbox door alle mogenlijke opties" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" "Het laten inspringen van een bullet lijst item neemt ook sub-items mee" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Bij het afvinken van een checkbox ook alle sub-items afvinken" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Interpreteer wiki syntax direct" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Standaard formaat om te kopiëren" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Map met sjablonen voor bijlagen" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "De wiki bestaat niet: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopiëren _Als..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "Geselecteerde tekst verplaatsen" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Eigenschapen Wijzigen" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "Link be_werken" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "_Link Kopiëren" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Email Adres Kopiëren" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Map openen" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Openen met..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Openen" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Geen Sjablonen geïnstalleerd" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "De map\n" "%s\n" "bestaat niet.\n" "Wilt u deze map aanmaken?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Datum en Tijd Invoegen" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalender" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Link datum" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Afbeelding Invoegen" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Bestand eerst aanhechten" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Dit bestands type wordt niet ondersteund: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Afbeelding Bewerken" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Lokatie" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Link Naar" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Breedte" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Hoogte" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "Grootte He_rstellen" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Tekst Uit Bestand Invoegen" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Link Bewerken" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Link" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Tekst" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "Vo_lgende" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "Vo_rige" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Match _hoofdletters" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Alleen hele woorden" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Reguliere expressie" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Markeren" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Zoeken" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Voorkeuren" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Zoek en vervang" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Zoek dit" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Vervang door" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Vervang" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "_Alle Vervangen" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Woorden Tellen" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Alinea" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Selectie" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Woorden" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Regels" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Tekens" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Tekens exclusief spaties" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Tekst naar andere pagina verplaatsen" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Verplaatsen" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Verplaatsen naar" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Laat een referentie achter naar nieuwe pagina" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Nieuwe pagina openen" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Nieuw bestand" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Bediening" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Bewerken" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Voorkeuren" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Invoegtoepassingen" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Programmas" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Wijzig lettertype" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Meer" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "C_onfigureren" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Download meer plugins van internet" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Afhankelijkheden" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Geen afhankelijkheden" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Niet gevonden" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Optioneel" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Auteur" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "In Gebruik" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Invoegtoepassing" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Invoegtoepassing instellen" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Opties voor invoegtoepassing %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Standaard text editor" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Eigenschappen" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Notitieboek Eigenschappen" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Recente wijzigingen" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Vandaag" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Gisteren" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Laatst gewijzigd" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Voor geavanceerde zoek opdrachten kunnen termen\n" "zoals AND, OR en NOT worden gebruikt. Zie de hulp\n" "pagina voor meer details." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Beperk de zoekactie tot de huidige pagina en subpagina's" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Score" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Webserver" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Web server nog niet gestart" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Publieke toegang toelaten" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Poort" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Web server gestart" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Web server gestopt" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Sjablonen" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Bladeren" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Sjabloon Kopiëren" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Bestand Selecteren" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "_Alles uitvouwen" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "Alles _inklappen" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Wissen" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Map Selecteren" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Kies een afbeelding" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Top>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Linker zijpaneel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Rechter zijpaneel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Onderste paneel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Bovenste paneel" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Linksboven" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Linksonder" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Rechtsboven" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Rechtsonder" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Als u dit probleem rapporteert, voeg\n" "dan de onderstaande informatie toe" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Alle bestanden" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Afbeeldingen" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Logboek" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Bestand Bestaat Reeds" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Een bestand met de naam <b>\"%s\"</b> bestaat reeds.\n" "U kunt een andere naam opgeven of het bestaande bestand\n" "overschrijven." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Bestandsnaam" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Bladeren" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Overschrijf" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Map of bestand voor dit notitieboek niet gevonden." #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Geef een notitieboek op" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Kan notitieboek \"%s\" niet vinden" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Uitvoer lokatie nodig om te exporteren" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Uitvoer map bestaat en is niet leeg, gebruik \"--overwrite\" om te " "overschrijven" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "Uitvoer bestand bestaat, gebruik \"--overwrite\" om te overschrijven" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "Uitvoer bestand nodig om MHTML te exporteren" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Uitvoer map nodig om gehele notitieboek te exporteren" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Ongeldige pagina naam\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Ongeldige pagina naam \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "De index is nog bezig met updaten terwijl er een\n" "bewerking wordt gedaan die de index nodig heeft.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Kan pagina \"%s\" niet wijzigen" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "Interwiki Keyword" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Start Pagina" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Bestanden map" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profiel" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Onbekend>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Fout in %(file)s op regel %(line)i bij \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Arithmetic" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Deze plugin helpt met kleine berekeningen in\n" "zim paginas. Hij is gebaseerd op de \"arithmic\" module\n" "van http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Arithmetic" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Niet bekend" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Type" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Grootte" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Gewijzigd" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Hiernaar verplaatsen" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Hiernaar kopieren" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Annuleren" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Bijlagen-browser" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" "Deze plugin laat een folder met aangehechte bestanden\n" "zien voor de huidige pagina.\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Positie in het scherm" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Bijlagen" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Toon aangehechte bestanden" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i _Aangehechte bestand" msgstr[1] "%i _Bijlagen" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Referenties paneel" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze invoegtoepassing voegt een extra paneel toe met een\n" "lijst van pagina's die naar de huidige pagina refereren.\n" "\n" "Dit is een standaard invoegtoepassing voor zim.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Referenties" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Tonen" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Er is een fout opgetreden bij het genereren van de \n" "afbeelding. Wilt u de brontext toch opslaan?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "Bladwijzer balk" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\tDeze plugin voegt een balk met bladwijzers toe\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "Bladwijzers opslaan" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "Nieuwe bladwijzers aan het begin van de balk toevoegen" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "Bladwijzer toevoegen" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "Bladwijzers" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "Wilt u alle bladwijzers verwijderen?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "Laat volledige pagina naam zien" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "Naam veranderen" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "Orginele naam terug zetten" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "Verwijderen" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "Alles verwijderen" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "Openen in nieuw venster" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "Op huidige pagina instellen" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Journaal" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Deze plugin veranderd een sectie van een notitieboek in een logboek\n" "met een pagina per dag, per week of per maand.\n" "Het voegt ook een kalender toe om deze paginas te openen.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Dag" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Week" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Maand" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Jaar" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Kalender in zij-paneel tonen in plaats van in een apart venster" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Gebruik een pagina voor elke" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Logboek paginas uitvouwen in de index" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "Van_daag" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "Kalen_der" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Toon kalender" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Calender" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Vandaag" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Diagram Invoegen" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin geeft de mogelijkheid om diagrammen in de\n" "tekst op te nemen en te wijzigen gemaakt met GraphViz.\n" "\n" "Dit is een standaardplugin voor zim.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram" #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Diagram Invoegen" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "Diagram b_ewerken" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Afleiding vrij werken" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Deze plugin voegt settings toe om\n" "afleiding vrij te werken in zim.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "Verberg de menubalk in schermvullende modus" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "Verberg de werkbalk in schermvullende modus" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "Verberg de lokatiebalk in schermvullende modus" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "Verberg de statusbalk in schermvullende modus" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Maximale pagina breedte" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Verticale marge" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Tekst achtergrond kleur" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Tekst voorgrond kleur" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Scherm achtergrond kleur" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Insert Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt een diagram editor toe op basis van Ditaa.\n" "\n" "Dit is een standaard plugin voor zim.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "Ditaa Be_werken" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Vergelijking Invoegen" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin geeft de mogelijkheid om vergelijkingen in de\n" "tekst op te nemen en deze te bewerken. Vergelijkingen\n" "worden geschreven in latex en zijn in de editor als plaatje te zien.\n" "\n" "Dit is een standaardplugin voor zim.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "_Formule" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "Formule Be_werken" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Insert Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "" "Deze plugin voegt een editor toe om grafieken in te voegen gebaseerd op " "GNUplot\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "GNUplot Be_werken" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "GNU R plot invoegen" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "" "Deze plugin voegt de mogenlijkheid toe om plots te \n" "gebruiken gebaseerd op GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "GNU R plot be_werken" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "De rekenmachine plugin kan de vergelijking\n" "voor de cursor niet evalueren." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Rekenmachine" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze invoegtoepassing kan eenvoudige wiskundige vergelijkingen \n" "in de tekst evalueren.\n" "\n" "Dit is een standaard invoegtoepassing voor zim.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Kan de vergelijking niet goed interpreteren" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Evalueer _Vergelijking" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Symbool invoegen" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt een hulpvenster toe om symbolen en\n" "speciale tekens in te voegen.\n" "\n" "Dit is een standaardplugin voor zim.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbool" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Sorteren per regel" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Deze plugin voegt een functie toe om geselecteerde\n" "regels te sorteren op alfabetische volgorde.\n" "Als de lijst al gesorteerd is wordt de volgorde omgedraaid\n" "(A-Z naar Z-A).\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "Regels _Sorteren" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Selecteerd eerst meerdere regels text" #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Link Overzicht" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt een nieuw venster toe met een diagram\n" "van alle links en referenties rond de huidige pagina. Dit is\n" "bruikbaar als een overzicht van relaties tussen verschillende \n" "pagina's.\n" "\n" "Dit is een standaardplugin voor zim.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Toon Link Overzicht" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Printen naar webbrowser" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin stuurt de huidige pagina naar de \n" "webbrowser. Bij gebrek aan printer support\n" "in zim geeft dit de mogenlijkheid om de pagina \n" "vanuit de browser te printen.\n" "\n" "Dit is een standaard plugin voor zim.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Printen naar Webbrowser" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Korte Notitie" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt een dialoog toe om snel tekst of plakbord\n" "inhoud in een zim pagina te plakken.\n" "\n" "Dit is een hoofd plugin van zim.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "_Korte Notitie..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Pagina sectie" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Maak voor elke notitie een nieuwe pagina aan" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Titel" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Open _Pagina" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Notitie weggooien?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Notenbalk Invoegen" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze invoegtoepassing voegt de mogelijkheid toe om\n" "notenbalken in te voegen door gebruik te maken \n" "van GNU Lilypond.\n" "\n" "Dit is een standaard invoegtoepassing voor zim\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Standaard header" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Standaard footer" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "N_otenbalk" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Bewerk notenbalk" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Schermafdruk Invoegen" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze invoegtoepassing geeft de mogelijkheid een screenshot\n" "te nemen en deze direct in zim in te voegen.\n" "\n" "Dit is een standaard invoegtoepassing voor zim.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Screenshot applicatie" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Schermafdruk..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Hele scherm afdrukken" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Window of deel van het scherm selecteren" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Wachttijd" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "seconden" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Er is een fout opgetreden tijdens \"%s\"" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Volgorder diagram invoegen" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Deze plugin voegt een volgorde diagram toe gebasseerd op \"seqdiag\".\n" "Dit vergemakkelijkt het bewerken van volgorde diagrammen.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Volgorde diagram" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "B_ewerk volgorde diagram" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Codeblokken" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Deze plugin voegt functionaliteit toe om \"codeblokken\" in te voegen in " "paginas.\n" "Deze codeblokken worden getoont als objecten met syntax kleuren, " "regelnummers etc.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Automatisch inspringen" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Slimme \"home\" toets" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Huidige regel oplichten" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Toon rechter kantlijn" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Rechter kantlijn positie" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Tab-breedte" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Codeblok" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Codeblok invoegen" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Syntax" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Regelnummers weergeven" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Spellingscontrole" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt een spellingscontrole toe \n" "gebaseerd op gtkspell.\n" "\n" "Dit is een standaardplugin voor zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Controleer _spelling" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Kan spellingscontrole niet laden" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "Dit kan betekenen dat de juiste\n" "woordenboeken niet zijn geïnstalleerd." #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "Links" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Centreren" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "Rechts" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Onbepaald" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Tabelleneditor" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "Deze plugin voegt tabellen in paginas toe\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "met rasterlijnen" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "geen rasterlijnen" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "horizontale lijnen" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "verticale lijnen" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Laat balk met hulp functies zien" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Grid lijnen" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Tabel" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Voeg rij toe" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Rij verwijderen" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Rij copieren" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "Rij omhoog" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "Rij omlaag" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Kolommen veranderen" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Hulp openen" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Rij verwijderen" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Open link in cell" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "Rij niet verwijderd, de tabel moet minimaal één rij bevatten" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Selecteer een rij" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Tabel invoegen" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Tabel bewerken" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Tabel kolommen wijzigen" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Kolom 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "Automatische\n" "Terugloop" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Uitlijnen" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Kolom toevoegen" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Kolom verwijderen" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Kolom naar voren halen" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Kolom naar achteren verplaatsen" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Een tabel moet minstens één kolom hebben." #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Inhoudsopgave" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt een extra widget toe met\n" "een inhoudsopgave van de huidige pagina.\n" "\n" "Dit is een standaard plugin voor zim.\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Laat Inhoudsopgave als \"floating\" widget zien" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "Toon pagina title in de inhoudstabel" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Inhoud" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "Degraderen" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "Promoveren" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Labels" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Deze plugin voegt een index toe die gesorteerd is op label\n" "en gefilterd kan worden met behulp van een \"tag cloud\".\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Laat volledige pagina naam zien" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Sorteer pagina's op labels" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "Ongelabeld" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Op alfabet sorteren" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Takenlijst" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt een dialoog toe die alle open taken in \n" "dit notitieboek laat zien. Open taken kunnen checkboxen\n" "zijn of codes zoals \"TODO\" of \"FIXME\" in de text.\n" "\n" "Dit is een standaardplugin voor zim.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Beschouw alle checkboxen als taken" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Zet pagina namen om in labels voor de taken" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Automatische eind datum voor taken op een kalender pagina" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" "Markeer taken met een eind datum op Maandag of Dinsdag al voor het weekend" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Labels die taken markeren" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Label voor volgende taak" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Label voor (nog) niet actieve taken" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Sectie(s) om te indexeren" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Sectie(s) om te negeren" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Notitieboek moet worden geindexeerd" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Dit is de eerste keer dat de taken lijst wordt \n" "geopend. Daarom moet de index opnieuw \n" "worden opgebouwd. Dit een paar minuten\n" "duren afhankelijk van de grootte van dit \n" "notitieboek. De volgende keer dat de taken\n" "lijst wordt geopend is dit niet meer nodig." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Laat alleen taken zien die actief zijn" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i open taak" msgstr[1] "%i open taken" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Alle taken" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Zonder label" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Taak" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Datum" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Status Icoon" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin geeft snelle toegang tot zim \n" "door een icoon toe te voegen aan de status balk.\n" "\n" "Deze plugin vereist Gtk+ versie 2.10 of nieuwer.\n" "\n" "Dit is een standaardplugin voor zim.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klassiek status icoon,\n" "gebruik de nieuwe style status icoon voor Ubuntu niet" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Laat een apart status icoon zien voor elk notitieboek" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Korte Notitie..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Overige..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Notitieboeken" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Versiebeheer" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Deze plugin voegt versie controle toe voor notitieboeken.\n" "\n" "Deze plugin support de Bazaar, Git, en Mercurial versie controle systemen.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Autosave versie op regelmatige tijdstippen" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automatisch opgeslagen versie van zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "V_ersie Opslaan" #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Versies..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "Er zijn geen veranderingen in dit notitieboek sinds de laatste opgeslagen " "versie" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Geen veranderingen sinds laatste versie" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Versiebeheer inschakelen?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Versiebeheer is momenteel niet in gebruik voor dit notitieboek.\n" "Wilt u dit inschakelen?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Systeem" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Versie Opslaan" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Geef een korte omschrijving voor deze versie" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Versie opgeslagen vanuit zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Versies" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Pagina" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Bekijk Ge_annoteerde" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Selecteer een versie om de wijzigingen met die versie en de huidige staat \n" "te bekijken. Of selecteer meerdere versies om de verschillen ertussen te " "bekijken.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Beschrijving" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "He_rstel Versie" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Geef wijzigingen weer (_C)" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "Zij bij Zij (_S)" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Geannoteerde pagina bron" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Pagina herstellen naar opgeslagen versie?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Wil je pagina: %(page)s terugzetten\n" "naar de opgeslagen versie: %(version)s?\n" "\n" "Alle wijzigingen sinds de laatst opgeslagen versie zullen verloren gaan !" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Wijzingen" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Log events in Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Stuur events naar de Zeitgeist service" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Zim pagina: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Kan sjabloon niet vinden: \"%s\"" #~ msgid "Email client" #~ msgstr "Email programma" #~ msgid "Output" #~ msgstr "Formaat" #~ msgid "Slow file system" #~ msgstr "Langzaam bestands systeen" #~ msgid "File browser" #~ msgstr "Bestandsbrowser" #~ msgid "Web browser" #~ msgstr "Webbrowser" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "_Filter" #~ msgstr "_Filteren" #~ msgid "Text Editor" #~ msgstr "Tekst Editor" #~ msgid "Match c_ase" #~ msgstr "Check hoofdletters" #~ msgid "Pages" #~ msgstr "Pagina's" ����������������������������������������������zim-0.65/translations/sk.po�������������������������������������������������������������������������0000664�0001750�0001750�00000244771�12613750113�015631� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovak translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # Robert Hartl <hartl.robert@gmail.com>, 2010. msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2012-10-06 21:09+0000\n" "Last-Translator: Robert Hartl <robert@chami.sk>\n" "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" "X-Launchpad-Export-Date: 2015-10-27 19:21+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Nepodarilo sa spustiť aplikáciu: %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Predvolený" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Pravdepodobne ste narazili na chybu" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Súbor %s neexistuje" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Detaily" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "" #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Otvoriť pomocou \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Názov" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Príkaz" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "" #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Vlastné nástroje" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Upraviť vlastné nástroje" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Poznámka" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikona" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Príkaz nezmení dáta" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Zobraziť na paneli nástrojov" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportovať" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Aktualizácia indexu" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Export zápisníka" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Priečinok %s existuje" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Priečinok už existuje a obsahuje súbory, hrozí, že pri exporte budú " "prepísané. Chcete pokračovať?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Súbor existuje" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Tento súbor už existuje\n" "Chcete ho prepísať?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Vyberte stránky pre export" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Celý _zápisník" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Jednu _stránku" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Stránka" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Vyberte formát exportu" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Iné..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formát" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Šablóna" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Vyberte výstupný súbor alebo priečinok" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Výstupný priečinok" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Stránka s indexom" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Výstupný súbor" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Pozrieť _záznam" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Súbor" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "_Upraviť" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Zobraziť" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Vložiť" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Hľadať" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_Formát" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "_Nástroje" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Prejsť" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Pomocník" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Panel _umiestnenia" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "Panel _nástrojov" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nová stránka..." #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nová _podstránka..." #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Otvoriť ďalší zápisník..." #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Otvoriť v novom _okne" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importovať stránku..." #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Uložiť" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Uložiť kópiu..." #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "_Exportovať" #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "_Poslať na..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "Pre_sunúť stranu..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "_Premenovať stranu..." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Zmazať stranu" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "_Vlastnosti" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Zatvoriť" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "_Koniec" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Hľadať" #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Hľadať _spätné odkazy" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "" #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Možnosti" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "_Obnoviť" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Otvoriť priečinok s _prílohami" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Otvoriť priečinok _zápisníka" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "Pripojiť _súbor" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Pripojiť externý súbor" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "Upraviť _zdroj" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Spustiť _webový server" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Aktualizovať index" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "Vlastné _nástroje" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Späť" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Prejsť o stranu späť" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Dopredu" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Prejsť o stranu vpred" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "O úroveň _vyššie" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "O úroveň _nižšie" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Ísť na predchádzajúcu stranu" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Ísť na ďalšiu stranu" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Domov" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Prejsť domovskú stranu" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "_Skočiť na..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Obsah" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "_FAQ" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Klávesové skratky" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Chyby" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_O programe" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Stavový riadok" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "Na _celú obrazovku" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "_Upraviteľný zápisník" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Prepnúť úpravy zápisníka" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "Ž_iadny" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Posledné stránky" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_História" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikony _a text" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Len _ikony" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Len _text" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Veľké ikony" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Malé ikony" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "_Drobné ikony" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Aktivovat bočný panel pomocou <Ctrl><medzerník>" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Odstrániť odkazy pri mazaní stránok" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "" #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Aktualizácia odkazov" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Odstraňovanie odkazov" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Vytvoriť priečinok?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Desktopová wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " DAG Software https://launchpad.net/~dagsoftware\n" " Robert Hartl https://launchpad.net/~lesnyskriatok\n" " mirek https://launchpad.net/~bletvaska" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "len na čítanie" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Hľadať" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "" msgstr[1] "" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Nie je možné uložiť stranu: %s" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Zrušiť zmeny" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "_Uložiť kópiu" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Skočiť na" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Skočiť na stranu" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nová podstránka" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nová stránka" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Názov strany" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Šablóna strany" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Stránka existuje" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Uložiť kópiu" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importovať stranu" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Textové súbory" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Presunúť stranu" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Presunúť stranu \"%s\"" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "" msgstr[1] "" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Premenovať stranu" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Premenovať stranu \"%s\"" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Aktualizovať hlavičku tejto strany" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Zmazať stranu" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Zmazať stranu \"%s\"?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Strana \"%s\" a všetky jej\n" "podstránky a prílohy budú zmazané" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "" msgstr[1] "" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "" msgstr[1] "" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Pripojiť súbor" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Vložiť obrázky ako odkaz" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Zápisník" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Otvoriť zápisník" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Predvolený zápisník" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Pridať zápistník" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Zadajte, prosím, názov a umiestnenie priečinka pre zápisník." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Priečinok" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Aktualizácia indexu..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "_Späť" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "_Znova" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Vystrihnúť" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Koprírovať" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "_Prilepiť" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Zmazať" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Prepnúť zaškrtávacie políčko 'V'" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Prepnúť zaškrtávacie políčko 'X'" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Upraviť odkaz alebo objekt..." #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "_Odstrániť odkaz" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Dátum a čas..." #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Obrázok..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Od_rážkový zoznam" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Čí_slovaný zoznam" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Z_aškrtávací zoznam" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Text zo _súboru..." #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Odkaz" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Vložiť odkaz" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Vyčistiť formátovanie" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "_Nájsť..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Nájsť ď_alšie" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Nájsť _predchádzajúce" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "Na_hradiť..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Počet slov..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "_Priblížiť" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "_Vzdialiť" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "Normálna _veľkosť" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Nadpis _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Nadpis 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Nadpis _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Nadpis 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Nadpis _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Nadpis 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Nadpis _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Nadpis 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Nadpis _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Nadpis 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Tučné" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Tučné" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Kurzíva" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Kurzíva" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "_Podčiarknuté" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Podčiarknuté" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "P_reškrtnuté" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Preškrtnuté" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Dolný index" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Horný index" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "_Strojopis" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Strojopis" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Automaticky vytvárať odkazy zo ZloženýchSlov" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Preformátovať wiki značky za behu" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopírovať _ako..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "" #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Upraviť vlastnosti" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Upraviť odkaz" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Kopírovať _odkaz" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopírovať e-mailovú adresu" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Otvoriť priečinok" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Otvoriť pomocou..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Otvoriť" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Vložiť dátum a čas" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalendár" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Odkaz na dátum" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Vložiť obrázok" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Typ súboru nie je podporovaný: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Upraviť obrázok" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Miesto" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Odkaz na" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Šírka" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Výška" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Pôvodná veľkosť" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Vložiť text zo súboru" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Upraviť odkaz" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Odkaz" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Text" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "Ď_alšie" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Predošlé" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "_Rozlišovať veľkosť písma" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "Celé _slovo" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Regulárny výraz" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Zvýrazniť" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Hľadať" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Voľby" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Nájsť a nahradiť" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Nahradiť za" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "Na_hradiť" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Nahradiť _všetky" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Počet slov" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Odsek" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Výber" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Slov" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Riadkov" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Znaky" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Rozhranie" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Editovanie" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Nastavenia" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Zásuvné moduly" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Použiť vlastné písmo" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Viac" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Nastaviť" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Závislosti" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Bez závislostí" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Zlyhalo" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Povolené" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Zásuvný modul" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Nastavenie zásuvného modulu" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Voľby pre zásuvný modul %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Vlastnosti" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Vlastnosti zápisníka" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server nie je spustený" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server spustený" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server zastavený" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Vybrať súbor" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Vybrať priečinok" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Vybrať obrázok" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Všetky súbory" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Obrázky" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Súbor záznamu" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Súbor už existuje" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Názov súboru" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Prehliadať" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Prapísať" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Nie je možné nájsť súbor alebo priečinok tohoto zápisníka" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Nie je možné nájsť zápisník: %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Neplatný názov stránky \"%s\"" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "kľúčové slovo interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Domovská stránka" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Výpočty" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Výpočty" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Veľkosť" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Prehliadač príloh" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Prílohy" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "" msgstr[1] "" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Náhľad" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Deň" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Týždeň" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Mesiac" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Rok" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Zobraziť kalendár v bočnom paneli namiesto dialógového okna" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Použiť stránku pre každy" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Dnes" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Kalendár" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalendár" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Dnes" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Vložiť diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul poskytuje editor diagramov založený na GraphViz.\n" "\n" "Je to základný modul dodávaný so Zimom.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "_Diagram..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Vložiť diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Vložiť rovnicu" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul poskytuje editor rovníc založený na LaTeX.\n" "\n" "Je to základný modul dodávaný so Zimom.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Upraviť rovnicu" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Vložiť Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Modul poskytuje editor pre grafy založené na Gnuplote\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Upraviť Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Vložiť graf GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Tento modul poskytuje editor diagramov, schém a grafov v GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Upraviť graf GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Výraz je nezrozumiteľný" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Vložiť znak" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul pridáva dialóg 'Vložiť symbol' a umožňuje\n" "automaticky formátovať typografické znaky.\n" "\n" "Je to základní modul dodávaný so Zimom.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "_Znak..." #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Zoraďovač riadkov" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Modul zoradí označené riadky podľa abecedy.\n" "Ak je zoznam už zoradený, poradie sa obráti.\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "Zoradiť _riadky" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Vyberte najprv aspoň jeden riadok textu." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mapa odkazov" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Zobraziť mapu odkazov" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Tlačiť to prehliadača" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Tlačiť to prehliadača" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Rýchla poznámka" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul pridáva dialóg, pomocou ktorého môžete do stránky\n" "rýchlo pridať nejaký text alebo obsah schránky.\n" "\n" "Je to základný modul dodávaný so Zimom.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Rýchla poznámka..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Vytvoriť novú stránku pre každú poznámku" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Názov" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Vložiť snímok obrazovky" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Snímok obrazovky..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Zachytiť celú obrazovku" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Vybrať okno alebo oblasť" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Oneskorenie" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekúnd" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Kontrola pravopisu" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Pridá podporu pre kontrolu pravopisu pomocou gtkspell.\n" "\n" "Toto je základný zásuvný modul dodávaný so zim.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "Skontrolovať _pravopis" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Značky" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Zoradiť abecedne" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Zoznam úloh" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul pridáva dialógové okno zobrazujúce všetky\n" "otvorené úlohy v zápisníku. Otvorené úlohy sú buď\n" "nezaškrtnuté prepínače alebo položky označené\n" "slovami ako TODO alebo FIXME.\n" "\n" "Je to základní modul dodávaný so Zimom.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filter" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "" msgstr[1] "" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Úloha" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Dátum" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ikona v oznamovacej oblasti" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento zásuvný modul pridáva ikonu v oznamovacej oblasti pre rýchly prístup.\n" "\n" "Tento zásuvný modul závisí na Gtk+ verzie 2.10 alebo novšej.\n" "\n" "Je to základný modul dodávaný so Zimom.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Rýchla poznámka..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Ostatné..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Zápisníky" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Kontrola verzií" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Automatické uloženie verzie v pravidelných intervaloch" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Automaticky uložená verzia zo zim" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "U_ložiť verziu..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Verzie..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "" "V tomto zápisníku neboli vykonané žiadne zmeny od posledného uloženia verzie" #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Žiadne zmeny od poslednej verzie" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Povoliť kontrolu verzií?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Kontrola verzii nie je práve povolená pre tento zápisník.\n" "Chcete ju povoliť?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Uložiť verziu" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Zadajte prosím komentár pre túto verziu" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Uložená verzia zo zim" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Verzie" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Stránka" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Zobraziť _komentáre" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Vyberte verziu pre zobrazenie zmien medzi ňou a súčasným stavom.\n" "Alebo vyberte viac verzií pre zobrazenie zmien medzi týmito verziami.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Komentár" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "_Obnoviť verziu" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Zobraziť _zmeny" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Okomentovaný zdroj strany" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Zmeny" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "" #~ msgid "Text Editor" #~ msgstr "Textový editor" #~ msgid "Email client" #~ msgstr "Emailový klient" #~ msgid "Web browser" #~ msgstr "Web prehliadač" #~ msgid "File browser" #~ msgstr "Prehliadač súborov" #~ msgid "Pages" #~ msgstr "Stránky" #~ msgid "Prio" #~ msgstr "Prio" #~ msgid "Output" #~ msgstr "Výstup" #~ msgid "_Filter" #~ msgstr "_Filter" �������zim-0.65/translations/cs.po�������������������������������������������������������������������������0000664�0001750�0001750�00000276076�12613750113�015624� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Czech translation for zim # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the zim package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # msgid "" msgstr "" "Project-Id-Version: zim\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2015-10-08 20:31+0200\n" "PO-Revision-Date: 2015-10-18 18:17+0000\n" "Last-Translator: Vlastimil Ott <vlastimil@e-ott.info>\n" "Language-Team: Czech <cs@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2015-10-27 19:20+0000\n" "X-Generator: Launchpad (build 17833)\n" #. Error message when external application failed, %s is the command #: zim/applications.py:47 #, python-format msgid "Failed to run application: %s" msgstr "Nepodařilo se spustit aplikaci %s" #. Error message when external application failed, %(cmd)s is the command, %(code)i the exit code #: zim/applications.py:50 #, python-format msgid "" "%(cmd)s\n" "returned non-zero exit status %(code)i" msgstr "" "Příkaz %(cmd)s\n" "vrátil chybový kód %(code)i" #. error when application failed to start #: zim/applications.py:273 #, python-format msgid "Failed running: %s" msgstr "Nepodařilo se spustit %s" #. label for default webbrowser | #. label for default application #: zim/applications.py:294 zim/applications.py:335 zim/gui/applications.py:773 msgid "Default" msgstr "Výchozí" #. Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week #: zim/datetimetz.py:96 msgid "calendar:week_start:0" msgstr "calendar:week_start:1" #. generic error dialog #: zim/errors.py:47 msgid "Looks like you found a bug" msgstr "Pravděpodobně jste narazili na chybu" #. message for FileNotFoundError | #. Error message in template lookup #: zim/fs.py:476 zim/templates/__init__.py:125 #, python-format msgid "No such file: %s" msgstr "Soubor %s neexistuje" #. message for FileUnicodeError (%s is the file name) #: zim/fs.py:488 #, python-format msgid "Could not read: %s" msgstr "Nelze načíst %s" #. message for FileUnicodeError #: zim/fs.py:490 msgid "This usually means the file contains invalid characters" msgstr "Obvykle to znamená, že soubor obsahuje neplatné znaky" #. label for detailed error | #. section for version details in "save version" dialog #: zim/fs.py:492 zim/plugins/versioncontrol/__init__.py:897 msgid "Details" msgstr "Podrobnosti" #. Error message #: zim/fs.py:1463 #, python-format msgid "File is not writable: %s" msgstr "Soubor %s je chráněn proti zápisu" #. error message #: zim/fs.py:1640 #, python-format msgid "File changed on disk: %s" msgstr "Soubor %s se na disku změnil" #. label to customize 'open with' menu #: zim/gui/applications.py:678 msgid "Customize..." msgstr "Přizpůsobit..." #. message when no applications in "Open With" menu #: zim/gui/applications.py:704 msgid "No Applications Found" msgstr "Žádné aplikace" #. menu item to open a file with an application, %s is the app name #: zim/gui/applications.py:733 #, python-format msgid "Open with \"%s\"" msgstr "Otevřít pomocí \"%s\"" #. Text in the 'custom command' dialog, "%s" will be URL scheme like "http://" or "ssh://" #: zim/gui/applications.py:748 #, python-format msgid "Configure an application to open \"%s\" links" msgstr "Nastavit aplikaci pro otevírání odkazů %s" #. Text in the 'custom command' dialog, "%s" will be mimetype like "text/plain" #: zim/gui/applications.py:751 #, python-format msgid "" "Configure an application to open files\n" "of type \"%s\"" msgstr "" "Nastavit aplikaci pro otevírání souborů\n" "typu %s" #. Dialog title #: zim/gui/applications.py:763 msgid "Configure Applications" msgstr "Nastavit aplikace" #. Button for adding a new application to the 'open with' menu | #. Dialog title #: zim/gui/applications.py:777 zim/gui/applications.py:883 msgid "Add Application" msgstr "Přidat aplikaci" #. Label for default application handler #: zim/gui/applications.py:825 msgid "System Default" msgstr "Výchozí v systému" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog | #. Input label in the 'rename page' dialog for the new name | #. input field in 'Add Notebook' dialog | #. input for new file name | #. Heading in plugins tab of preferences dialog | #. Input label for the new name when copying a template | #. label for properties dialog | #. label for file name #: zim/gui/applications.py:887 zim/gui/customtools.py:157 #: zim/gui/__init__.py:3357 zim/gui/notebookdialog.py:413 #: zim/gui/pageview.py:7032 zim/gui/preferencesdialog.py:247 #: zim/gui/templateeditordialog.py:158 zim/notebook.py:838 #: zim/plugins/attachmentbrowser/filebrowser.py:366 msgid "Name" msgstr "Název" #. Field in 'custom command' dialog | #. Input in "Edit Custom Tool" dialog #: zim/gui/applications.py:888 zim/gui/customtools.py:159 msgid "Command" msgstr "Příkaz" #. Field in 'custom command' dialog #: zim/gui/applications.py:889 msgid "Make default application" msgstr "Nastavit jako výchozí" #. Error message for new commands in "open with" dialog #: zim/gui/applications.py:906 #, python-format msgid "Could not find executable \"%s\"" msgstr "Program \"%s\" nenalezen." #. Dialog title #: zim/gui/customtools.py:24 msgid "Custom Tools" msgstr "Vlastní nástroje" #. help text in "Custom Tools" dialog #: zim/gui/customtools.py:29 msgid "" "You can configure custom tools that will appear\n" "in the tool menu and in the tool bar or context menus." msgstr "" "Můžete si nastavit vlastní programy, zobrazí se v nabídce Nástroje,\n" " v nástrojové liště a v kontextové nabídce." #. Dialog title #: zim/gui/customtools.py:137 msgid "Edit Custom Tool" msgstr "Upravit vlastní nástroj" #. Input in "Edit Custom Tool" dialog | #. Heading in plugins tab of preferences dialog #: zim/gui/customtools.py:158 zim/gui/preferencesdialog.py:249 msgid "Description" msgstr "Popis" #. Input in "Edit Custom Tool" dialog | #. label for properties dialog #: zim/gui/customtools.py:173 zim/notebook.py:841 msgid "Icon" msgstr "Ikona" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:182 msgid "Command does not modify data" msgstr "Příkaz nezmění data" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:183 msgid "Output should replace current selection" msgstr "Výstupem se přepíše aktuální výběr" #. Input in "Edit Custom Tool" dialog #: zim/gui/customtools.py:184 msgid "Show in the toolbar" msgstr "Zobrazit v nástrojové liště" #. Short help text in "Edit Custom Tool" dialog. The "%" is literal - please include the html formatting #: zim/gui/customtools.py:192 msgid "" "The following parameters will be substituted\n" "in the command when it is executed:\n" "<tt>\n" "<b>%f</b> the page source as a temporary file\n" "<b>%d</b> the attachment directory of the current page\n" "<b>%s</b> the real page source file (if any)\n" "<b>%n</b> the notebook location (file or folder)\n" "<b>%D</b> the document root (if any)\n" "<b>%t</b> the selected text or word under cursor\n" "<b>%T</b> the selected text including wiki formatting\n" "</tt>\n" msgstr "" "Následující parametry budou při spuštění\n" "programu nahrazeny skutečnými hodnotami:\n" "<tt>\n" "<b>%f</b> zdrojový text stránky jako dočasný soubor\n" "<b>%d</b> adresář s přílohami současné stránky \n" "<b>%s</b> skutečný zdrojový text stránky (pokud existuje)\n" "<b>%n</b> umístění sešitu (soubor nebo adresář)\n" "<b>%D</b> kořen dokumentu (pokud je k dispozici)\n" "<b>%t</b> označený text nebo slovo pod kurzorem\n" "<b>%T</b> označený text včetně wiki formátování \n" "</tt>\n" #. dialog title #: zim/gui/exportdialog.py:31 msgid "Export" msgstr "Exportovat" #. Title of progressbar dialog #: zim/gui/exportdialog.py:51 zim/gui/__init__.py:2068 msgid "Updating index" msgstr "Probíhá aktualizace indexu" #. Title for progressbar window #: zim/gui/exportdialog.py:60 msgid "Exporting notebook" msgstr "Probíhá export sešitu" #. message heading #: zim/gui/exportdialog.py:146 #, python-format msgid "Folder exists: %s" msgstr "Adresář %s existuje" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:147 msgid "" "Folder already exists and has content, exporting to this folder may " "overwrite existing files. Do you want to continue?" msgstr "" "Složka již existuje a obsahuje soubory - hrozí, že při exportu budou " "přepsány. Chcete pokračovat?" #. message heading #: zim/gui/exportdialog.py:160 msgid "File exists" msgstr "Soubor existuje" #. detailed message, answers are Yes and No #: zim/gui/exportdialog.py:161 msgid "" "This file already exists.\n" "Do you want to overwrite it?" msgstr "" "Tento soubor už existuje.\n" "Chcete jej přepsat?" #. title of step in export dialog #: zim/gui/exportdialog.py:172 msgid "Select the pages to export" msgstr "Vyberte stránky k exportu" #. Option in export dialog to export complete notebook | #. Option in versions dialog to show version for complete notebook #: zim/gui/exportdialog.py:178 zim/plugins/versioncontrol/__init__.py:944 msgid "Complete _notebook" msgstr "Kompletní sešit" #. Option in export dialog to export selection #: zim/gui/exportdialog.py:183 msgid "Single _page" msgstr "Jednu _stránku" #. Input field in export dialog | #. label in word count dialog | #. Column header | #. Column header search dialog | #. Column header Task List dialog #: zim/gui/exportdialog.py:186 zim/gui/pageview.py:6929 #: zim/gui/recentchangesdialog.py:54 zim/gui/searchdialog.py:151 #: zim/plugins/quicknote.py:221 zim/plugins/tasklist.py:947 msgid "Page" msgstr "Stránka" #. Input field in export dialog #: zim/gui/exportdialog.py:187 msgid "Include subpages" msgstr "Zahrnout podstránky" #. title of step in export dialog #: zim/gui/exportdialog.py:214 msgid "Select the export format" msgstr "Vyberte exportovaný formát" #. Option in drop down menu to specify another file #: zim/gui/exportdialog.py:216 msgid "Other..." msgstr "Další..." #. Input label in the export dialog | #. label in "insert date" dialog #: zim/gui/exportdialog.py:228 zim/gui/pageview.py:6206 msgid "Format" msgstr "Formát" #. Input label in the export dialog #: zim/gui/exportdialog.py:229 msgid "Template" msgstr "Šablona" #. radio option in export dialog #: zim/gui/exportdialog.py:232 msgid "Link files under document root with full file path" msgstr "Odkazovat soubory v kořenové složce dokumentu absolutní cestou" #. radio option in export dialog #: zim/gui/exportdialog.py:233 msgid "Map document root to URL" msgstr "Převést kořen dokumentu na URL" #. label for button with URL #: zim/gui/exportdialog.py:244 zim/gui/templateeditordialog.py:71 msgid "Get more templates online" msgstr "Získejte více šablon online" #. title of step in export dialog #: zim/gui/exportdialog.py:318 msgid "Select the output file or folder" msgstr "Vyberte výstupní soubor nebo adresář" #. Label for option in export dialog #: zim/gui/exportdialog.py:324 msgid "Export each page to a separate file" msgstr "Exportovat stránky do oddělených souborů" #. Label for option in export dialog #: zim/gui/exportdialog.py:326 msgid "Export all pages to a single file" msgstr "Exportovat stránky do jednoho souboru" #. Label for folder selection in export dialog #: zim/gui/exportdialog.py:329 msgid "Output folder" msgstr "Výstupní složka" #. Label for setting a name for the index of exported pages #: zim/gui/exportdialog.py:331 msgid "Index page" msgstr "Stránka s indexem" #. Label for file selection in export dialog #: zim/gui/exportdialog.py:334 msgid "Output file" msgstr "Výstupní soubor" #. label in export dialog #: zim/gui/exportdialog.py:423 #, python-format msgid "%(n_error)i errors and %(n_warning)i warnings occurred, see log" msgstr "Nastalo %(n_error)i chyb a %(n_warning)i varování, více v logu" #. label in export dialog #: zim/gui/exportdialog.py:426 #, python-format msgid "%i errors occurred, see log" msgstr "počet objevených chyb: %i, viz log" #. label in export dialog #: zim/gui/exportdialog.py:429 #, python-format msgid "%i warnings occurred, see log" msgstr "počet objevených varování %i, viz log" #. label in export dialog #: zim/gui/exportdialog.py:434 msgid "Export completed" msgstr "Export dokončen" #. button in export dialog | #. button in e.g. equation editor dialog #: zim/gui/exportdialog.py:437 zim/plugins/base/imagegenerator.py:286 msgid "View _Log" msgstr "Zobrazit _záznam" #. Menu title #: zim/gui/__init__.py:63 msgid "_File" msgstr "_Soubor" #. Menu title #: zim/gui/__init__.py:64 msgid "_Edit" msgstr "Ú_pravy" #. Menu title | #. button label #: zim/gui/__init__.py:65 zim/gui/templateeditordialog.py:42 msgid "_View" msgstr "_Zobrazit" #. Menu title | #. Button label #: zim/gui/__init__.py:66 zim/gui/pageview.py:6196 #: zim/plugins/insertsymbol.py:138 msgid "_Insert" msgstr "_Vložit" #. Menu title #: zim/gui/__init__.py:67 msgid "_Search" msgstr "_Hledat" #. Menu title #: zim/gui/__init__.py:68 msgid "For_mat" msgstr "_Formát" #. Menu title #: zim/gui/__init__.py:69 msgid "_Tools" msgstr "Nás_troje" #. Menu title #: zim/gui/__init__.py:70 msgid "_Go" msgstr "_Přejít" #. Menu title #: zim/gui/__init__.py:71 msgid "_Help" msgstr "_Nápověda" #. Menu title #: zim/gui/__init__.py:72 msgid "P_athbar" msgstr "Ukazatel struktury" #. Menu title | #. Menu item #: zim/gui/__init__.py:73 zim/gui/__init__.py:143 zim/gui/__init__.py:153 msgid "_Toolbar" msgstr "_Nástrojová lišta" #. Menu item #: zim/gui/__init__.py:76 msgid "_New Page..." msgstr "_Nová stránka" #. Menu item #: zim/gui/__init__.py:77 msgid "New S_ub Page..." msgstr "Nová _podstránka" #. Menu item #: zim/gui/__init__.py:78 msgid "_Open Another Notebook..." msgstr "_Otevřít jiný sešit" #. Menu item | #. menu item to open a link #: zim/gui/__init__.py:79 zim/gui/pageview.py:5548 #: zim/plugins/backlinkpane.py:120 msgid "Open in New _Window" msgstr "Otevřít v novém _okně" #. Menu item #: zim/gui/__init__.py:80 msgid "_Import Page..." msgstr "_Importovat stránku" #. Menu item #: zim/gui/__init__.py:81 msgid "_Save" msgstr "_Uložit" #. Menu item #: zim/gui/__init__.py:82 msgid "Save A _Copy..." msgstr "Uložit _kopii" #. Menu item #: zim/gui/__init__.py:83 msgid "E_xport..." msgstr "E_xportovat..." #. Menu item #: zim/gui/__init__.py:84 msgid "_Send To..." msgstr "Odesla_t..." #. Menu item #: zim/gui/__init__.py:85 msgid "_Move Page..." msgstr "_Přesunout stránku..." #. Menu item #: zim/gui/__init__.py:86 msgid "_Rename Page..." msgstr "Pře_jmenovat stránku...." #. Menu item #: zim/gui/__init__.py:87 msgid "_Delete Page" msgstr "_Smazat stránku" #. Menu item #: zim/gui/__init__.py:88 msgid "Proper_ties" msgstr "V_lastnosti" #. Menu item #: zim/gui/__init__.py:89 msgid "_Close" msgstr "_Zavřít" #. Menu item | #. menu item in tray icon menu #: zim/gui/__init__.py:90 zim/plugins/trayicon.py:126 msgid "_Quit" msgstr "U_končit" #. Menu item #: zim/gui/__init__.py:91 msgid "_Search..." msgstr "_Hledat..." #. Menu item #: zim/gui/__init__.py:92 msgid "Search _Backlinks..." msgstr "Hledat _zpětné odkazy" #. Menu item #: zim/gui/__init__.py:93 msgid "Recent Changes..." msgstr "Nedávné změny..." #. Menu item #: zim/gui/__init__.py:94 msgid "Copy _Location" msgstr "Kopírovat _umístění" #. Menu item #: zim/gui/__init__.py:95 msgid "_Templates" msgstr "Ša_blony" #. Menu item #: zim/gui/__init__.py:96 msgid "Pr_eferences" msgstr "_Nastavení" #. Menu item #: zim/gui/__init__.py:97 msgid "_Reload" msgstr "Z_novu načíst" #. Menu item #: zim/gui/__init__.py:98 msgid "Open Attachments _Folder" msgstr "Otevřít složku s _přílohami" #. Menu item #: zim/gui/__init__.py:99 msgid "Open _Notebook Folder" msgstr "Otevřít složku se _sešitem" #. Menu item #: zim/gui/__init__.py:100 msgid "Open _Document Root" msgstr "Otevřít _kořenovou složku dokumentu" #. Menu item #: zim/gui/__init__.py:101 msgid "Open _Document Folder" msgstr "Otevřít složku _dokumentu" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach _File" msgstr "_Připojit soubor" #. Menu item #: zim/gui/__init__.py:102 msgid "Attach external file" msgstr "Připojit externí soubor" #. Menu item #: zim/gui/__init__.py:103 msgid "Edit _Source" msgstr "_Upravit zdrojový kód" #. Menu item #: zim/gui/__init__.py:104 msgid "Start _Web Server" msgstr "Spustit _webový server" #. Menu item #: zim/gui/__init__.py:105 msgid "Update Index" msgstr "Aktualizovat index" #. Menu item #: zim/gui/__init__.py:106 msgid "Custom _Tools" msgstr "_Vlastní nástroje" #. Menu item #: zim/gui/__init__.py:107 msgid "_Back" msgstr "_Zpět" #. Menu item #: zim/gui/__init__.py:107 msgid "Go page back" msgstr "Přejít o stranu zpět" #. Menu item #: zim/gui/__init__.py:108 msgid "_Forward" msgstr "_Vpřed" #. Menu item #: zim/gui/__init__.py:108 msgid "Go page forward" msgstr "Přejít o stranu vpřed" #. Menu item #: zim/gui/__init__.py:109 msgid "_Parent" msgstr "O úroveň _výš" #. Menu item #: zim/gui/__init__.py:109 msgid "Go to parent page" msgstr "Přejít na nadřazenou stránku" #. Menu item #: zim/gui/__init__.py:110 msgid "_Child" msgstr "O úroveň _níž" #. Menu item #: zim/gui/__init__.py:110 msgid "Go to child page" msgstr "Přejít na podřízenou stránku" #. Menu item #: zim/gui/__init__.py:111 msgid "_Previous in index" msgstr "Pře_dchozí v indexu" #. Menu item #: zim/gui/__init__.py:111 msgid "Go to previous page" msgstr "Přejít na předchozí stránku" #. Menu item #: zim/gui/__init__.py:112 msgid "_Next in index" msgstr "_Následující v indexu" #. Menu item #: zim/gui/__init__.py:112 msgid "Go to next page" msgstr "Přejít na následující stránku" #. Menu item #: zim/gui/__init__.py:113 msgid "_Home" msgstr "_Domů" #. Menu item #: zim/gui/__init__.py:113 msgid "Go home" msgstr "Přejít na startovní stránku" #. Menu item #: zim/gui/__init__.py:114 msgid "_Jump To..." msgstr "Skočit na..." #. Menu item #: zim/gui/__init__.py:115 msgid "_Contents" msgstr "_Obsah" #. Menu item #: zim/gui/__init__.py:116 msgid "_FAQ" msgstr "Časté _otázky" #. Menu item #: zim/gui/__init__.py:117 msgid "_Keybindings" msgstr "_Klávesové zkratky" #. Menu item #: zim/gui/__init__.py:118 msgid "_Bugs" msgstr "_Chyby" #. Menu item #: zim/gui/__init__.py:119 msgid "_About" msgstr "_O programu" #. Menu item #: zim/gui/__init__.py:137 msgid "_All Panes" msgstr "Všechny _panely" #. Menu item #: zim/gui/__init__.py:137 msgid "Show All Panes" msgstr "Zobrazit všechny panely" #. Menu item #: zim/gui/__init__.py:144 zim/gui/__init__.py:154 msgid "_Statusbar" msgstr "_Stavový řádek" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "_Side Panes" msgstr "_Postranní panely" #. Menu item # FIXME review text #: zim/gui/__init__.py:145 zim/gui/__init__.py:155 msgid "Show Side Panes" msgstr "Zobrazit postranní panely" #. Menu item #: zim/gui/__init__.py:146 zim/gui/__init__.py:156 msgid "_Fullscreen" msgstr "_Celoobrazovkový režim" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Notebook _Editable" msgstr "Sešit lze _upravovat" #. menu item #: zim/gui/__init__.py:147 zim/gui/__init__.py:157 msgid "Toggle notebook editable" msgstr "Přepnout: sešit lze upravovat" #. Menu item #: zim/gui/__init__.py:163 msgid "_None" msgstr "Žá_dný" #. Menu item #: zim/gui/__init__.py:164 msgid "_Recent pages" msgstr "_Nedávné stránky" #. Menu item #: zim/gui/__init__.py:165 msgid "Recently _Changed pages" msgstr "Nedávno změněné stránky" #. Menu item #: zim/gui/__init__.py:166 msgid "_History" msgstr "_Historie" #. Menu item #: zim/gui/__init__.py:167 msgid "_Page Hierarchy" msgstr "_Hierarchie stránek" #. Menu item #: zim/gui/__init__.py:180 msgid "Icons _And Text" msgstr "Ikony a _text" #. Menu item #: zim/gui/__init__.py:181 msgid "_Icons Only" msgstr "Pouze ik_ony" #. Menu item #: zim/gui/__init__.py:182 msgid "_Text Only" msgstr "Pouze t_ext" #. Menu item #: zim/gui/__init__.py:188 msgid "_Large Icons" msgstr "_Velké ikony" #. Menu item #: zim/gui/__init__.py:189 msgid "_Small Icons" msgstr "_Malé ikony" #. Menu item #: zim/gui/__init__.py:190 msgid "_Tiny Icons" msgstr "D_robné ikony" #. Option in the preferences dialog #: zim/gui/__init__.py:204 msgid "Add 'tearoff' strips to the menus" msgstr "Připojit k nabídkám odtrhávací proužky" #. Option in the preferences dialog #: zim/gui/__init__.py:206 msgid "Use <Ctrl><Space> to switch to the side pane" msgstr "Aktivovat boční panel pomocí Ctrl-mezerník" #. Option in the preferences dialog #: zim/gui/__init__.py:210 msgid "Remove links when deleting pages" msgstr "Odstranit odkazy při mazání stránek" #. Option in the preferences dialog #: zim/gui/__init__.py:212 msgid "Always use last cursor position when opening a page" msgstr "Při otevření stránky umístit kurzor na poslední známou pozici" #. Error description for "no such file or folder" #: zim/gui/__init__.py:274 msgid "" "The file or folder you specified does not exist.\n" "Please check if you the path is correct." msgstr "" "Soubor nebo složka, kterou jste zadali, neexistuje.\n" "Ověřte prosím, že je cesta správná." #. Error message, %s will be the file path #: zim/gui/__init__.py:281 #, python-format msgid "No such file or folder: %s" msgstr "Soubor nebo složka neexistuje: %s" #. Error description #: zim/gui/__init__.py:293 msgid "Page has un-saved changes" msgstr "Stránka obsahuje neuložené změny." #. Short question for question prompt #: zim/gui/__init__.py:614 msgid "Upgrade Notebook?" msgstr "Povýšit verzi sešitu?" #. Explanation for question to upgrade notebook #: zim/gui/__init__.py:615 msgid "" "This notebook was created by an older of version of zim.\n" "Do you want to upgrade it to the latest version now?\n" "\n" "Upgrading will take some time and may make various changes\n" "to the notebook. In general it is a good idea to make a\n" "backup before doing this.\n" "\n" "If you choose not to upgrade now, some features\n" "may not work as expected" msgstr "" "Tento sešit byl vytvořen starší verzí Zimu.\n" "Chcete jej aktualizovat na aktuální verzi?\n" "\n" "Aktualizace bude chvíli trvat a může se na obsahu sešitu projevit.\n" "Měli byste si určitě udělat zálohu sešitu.\n" "\n" "Pokud se rozhodnete, že aktualizovat nebudete,\n" "některé funkce nebudou pracovat tak, jak očekáváte." #. Title of progressbar dialog #: zim/gui/__init__.py:627 msgid "Upgrading notebook" msgstr "Probíhá změna verze sešitu" #. question dialog text #: zim/gui/__init__.py:1639 msgid "" "The index is still busy updating. Until this is finished links can not be " "updated correctly. Performing this action now could break links, do you want " "to continue anyway?" msgstr "" "Index se stále ještě sestavuje. Dokud proces neskončí, nelze aktualizovat " "odkazy. Pokud budete pokračovat, může se stát, že budou odkazy neplatné. " "Pokračovat?" #. Title of progressbar dialog #: zim/gui/__init__.py:1650 msgid "Updating Links" msgstr "Probíhá aktualizace odkazů" #. Title of progressbar dialog #: zim/gui/__init__.py:1677 zim/gui/__init__.py:3456 msgid "Removing Links" msgstr "Odstranit odkazy" #. Heading in a question dialog for creating a folder #: zim/gui/__init__.py:1785 zim/gui/pageview.py:5861 msgid "Create folder?" msgstr "Vytvořit složku?" #. Text in a question dialog for creating a folder, %s will be the folder base name #: zim/gui/__init__.py:1787 #, python-format msgid "" "The folder \"%s\" does not yet exist.\n" "Do you want to create it now?" msgstr "" "Složka \"%s\" zatím neexistuje.\n" "Chcete ji nyní vytvořit?" #. error when external application fails #: zim/gui/__init__.py:1907 zim/gui/__init__.py:2025 #, python-format msgid "Could not open: %s" msgstr "Nelze otevřít %s" #. Error message #: zim/gui/__init__.py:1922 msgid "This page does not have an attachments folder" msgstr "Stránka nemá složku s přílohami" #. main text for dialog for editing external files #: zim/gui/__init__.py:2016 #, python-format msgid "Editing file: %s" msgstr "Úpravy souboru %s" #. description for dialog for editing external files #: zim/gui/__init__.py:2018 msgid "" "You are editing a file in an external application. You can close this dialog " "when you are done" msgstr "" "Upravujete soubor v externí aplikaci. Až budete hotovi, můžete tohle okno " "zavřít." #. General description of zim itself #: zim/gui/__init__.py:2222 msgid "A desktop wiki" msgstr "Desktopová wiki" #. This string needs to be translated with names of the translators for this language #: zim/gui/__init__.py:2230 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " 1.John@seznam.cz https://launchpad.net/~neozvuck\n" " Jakub Kozisek https://launchpad.net/~kozisek-j\n" " Konki https://launchpad.net/~pavel-konkol\n" " Radek Tříška https://launchpad.net/~radek-fastlinux\n" " Tomas Sara https://launchpad.net/~tomas-sara\n" " Vlastimil Ott https://launchpad.net/~vlastimil\n" " Vlastimil Ott https://launchpad.net/~vlastimil-e-ott\n" " aloisam https://launchpad.net/~a-musil" #. Label for pageindex tab #: zim/gui/__init__.py:2328 msgid "Index" msgstr "Rejstřík" #. page status in statusbar #: zim/gui/__init__.py:2403 msgid "readonly" msgstr "jen ke čtení" #. Dialog title | #. input label #: zim/gui/__init__.py:2891 zim/gui/searchdialog.py:24 #: zim/gui/searchdialog.py:31 msgid "Search" msgstr "Hledat" #. label in search entry #: zim/gui/__init__.py:2896 msgid "Search Pages..." msgstr "Hledat stránky" #. Label for button with backlinks in statusbar #: zim/gui/__init__.py:2966 #, python-format msgid "%i _Backlink..." msgid_plural "%i _Backlinks..." msgstr[0] "%i zpětný odkaz" msgstr[1] "%i zpětné odkazy" msgstr[2] "%i zpětných odkazů" #. Heading of error dialog #: zim/gui/__init__.py:3077 #, python-format msgid "Could not save page: %s" msgstr "Stránku %s nelze uložit" #. text in error dialog when saving page failed #: zim/gui/__init__.py:3081 msgid "" "To continue you can save a copy of this page or discard\n" "any changes. If you save a copy changes will be also\n" "discarded, but you can restore the copy later." msgstr "" "Můžete uložit kopii stránky, nebo všechny změny zahodit.\n" "Pokud uložíte kopii, změny budou sice také zahozeny, \n" "ale kopii můžete později obnovit." #. Button in error dialog #: zim/gui/__init__.py:3112 msgid "_Discard Changes" msgstr "_Zahodit změny" #. Button in error dialog #: zim/gui/__init__.py:3117 msgid "_Save Copy" msgstr "Uložit _kopii" #. Dialog title #: zim/gui/__init__.py:3155 msgid "Jump to" msgstr "Skočit na" #. Label for page input #: zim/gui/__init__.py:3160 msgid "Jump to Page" msgstr "Skočit na stránku" #. Dialog title #: zim/gui/__init__.py:3179 msgid "New Sub Page" msgstr "Nová podstránka" #. Dialog title #: zim/gui/__init__.py:3180 msgid "New Page" msgstr "Nová stránka" #. Dialog text in 'new page' dialog #: zim/gui/__init__.py:3184 msgid "" "Please note that linking to a non-existing page\n" "also creates a new page automatically." msgstr "" "Pamatujte na to, že pokud odkážete na stránku, která dosud neexistuje, \n" "bude automaticky vytvořena." #. Input label #: zim/gui/__init__.py:3199 msgid "Page Name" msgstr "Název stránky" #. Choice label #: zim/gui/__init__.py:3200 msgid "Page Template" msgstr "Šablona stránky" #. Error when creating new page #: zim/gui/__init__.py:3218 msgid "Page exists" msgstr "Stránka již existuje" #. Dialog title of file save dialog #: zim/gui/__init__.py:3233 msgid "Save Copy" msgstr "Uložit kopii" #. Dialog title #: zim/gui/__init__.py:3257 msgid "Import Page" msgstr "Importovat stránku" #. File filter for '*.txt' #: zim/gui/__init__.py:3258 msgid "Text Files" msgstr "Textové soubory" #. Dialog title #: zim/gui/__init__.py:3286 msgid "Move Page" msgstr "Přesunout stránku" #. Heading in 'move page' dialog - %s is the page name #: zim/gui/__init__.py:3291 #, python-format msgid "Move page \"%s\"" msgstr "Přesunout stránku %s" #. label in MovePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3302 zim/gui/__init__.py:3351 #, python-format msgid "Update %i page linking to this page" msgid_plural "Update %i pages linking to this page" msgstr[0] "Aktualizovat %i stránku, která sem odkazuje" msgstr[1] "Aktualizovat %i stránky, které sem odkazují" msgstr[2] "Aktualizovat %i stránek, které sem odkazují" #. Input label for the section to move a page to | #. input label #: zim/gui/__init__.py:3307 zim/plugins/calendar.py:107 msgid "Section" msgstr "Sekce" #. Dialog title #: zim/gui/__init__.py:3336 msgid "Rename Page" msgstr "Přejmenovat stránku" #. label in 'rename page' dialog - %s is the page name #: zim/gui/__init__.py:3340 #, python-format msgid "Rename page \"%s\"" msgstr "Přejmenovat stránku %s" #. Option in the 'rename page' dialog #: zim/gui/__init__.py:3359 msgid "Update the heading of this page" msgstr "Aktualizovat záhlaví stránky" #. Dialog title #: zim/gui/__init__.py:3394 msgid "Delete Page" msgstr "Smazat stránku" #. Heading in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3407 #, python-format msgid "Delete page \"%s\"?" msgstr "Smazat stránku %s?" #. Text in 'delete page' dialog - %s is the page name #: zim/gui/__init__.py:3409 #, python-format msgid "" "Page \"%s\" and all of it's\n" "sub-pages and attachments will be deleted" msgstr "" "Stránka \"%s\"a všechny\n" "její podstránky a přílohy budou smazány" #. label in DeletePage dialog - %i is number of backlinks #: zim/gui/__init__.py:3422 #, python-format msgid "Remove links from %i page linking to this page" msgid_plural "Remove links from %i pages linking to this page" msgstr[0] "Odstranit odkazy z %i stránky, které sem odkazuje" msgstr[1] "Odstranit odkazy z %i stránek, které sem odkazují" msgstr[2] "Odstranit odkazy z %i stránek, které sem odkazují" #. label in the DeletePage dialog to warn user of attachments being deleted #: zim/gui/__init__.py:3441 #, python-format msgid "%i file will be deleted" msgid_plural "%i files will be deleted" msgstr[0] "%i soubor bude smazán" msgstr[1] "%i soubory budou smazány" msgstr[2] "%i souborů bude smazáno" #. Dialog title #: zim/gui/__init__.py:3470 msgid "Attach File" msgstr "Připojit soubor" #. Error dialog - %s is the full page name #: zim/gui/__init__.py:3477 #, python-format msgid "Page \"%s\" does not have a folder for attachments" msgstr "Stránka %s nemá složku pro přílohy" #. checkbox in the "Attach File" dialog #: zim/gui/__init__.py:3482 msgid "Insert images as link" msgstr "Vložit obrázky jako odkaz" #. Column heading in 'open notebook' dialog | #. Field in web server gui | #. Field to select Notebook from drop down list #: zim/gui/notebookdialog.py:175 zim/gui/server.py:98 #: zim/plugins/quicknote.py:428 msgid "Notebook" msgstr "Sešit" #. dialog title #: zim/gui/notebookdialog.py:281 msgid "Open Notebook" msgstr "Otevřít sešit" #. Input label in 'open notebook' dialog #: zim/gui/notebookdialog.py:330 msgid "Default notebook" msgstr "Výchozí sešit" #. Dialog window title #: zim/gui/notebookdialog.py:393 msgid "Add Notebook" msgstr "Přidat sešit" #. Label in Add Notebook dialog #: zim/gui/notebookdialog.py:395 msgid "Please select a name and a folder for the notebook." msgstr "Vyberte prosím název a složku pro sešit." #. input field in 'Add Notebook' dialog #: zim/gui/notebookdialog.py:414 msgid "Folder" msgstr "Složka" #. help text in the 'Add Notebook' dialog #: zim/gui/notebookdialog.py:420 msgid "" "To create a new notebook you need to select an empty folder.\n" "Of course you can also select an existing zim notebook folder.\n" msgstr "" "K vytvoření nového sešitu musíte vybrat prázdnou složku.\n" "Samozřejmě můžete vybrat také složku existujícího sešitu.\n" #. Label for object manager #: zim/gui/objectmanager.py:141 msgid "No plugin is available to display this object." msgstr "Pro zobrazení tohoto objektu nelze použít žádný zásuvný modul" #. Label for object manager #: zim/gui/objectmanager.py:148 #, python-format msgid "Plugin %s is required to display this object." msgstr "K zobrazení objektu je vyžadován plugin %s" #. statusbar message #: zim/gui/pageindex.py:746 msgid "Updating index..." msgstr "Aktualizace indexu..." #. Menu item #: zim/gui/pageview.py:119 msgid "_Undo" msgstr "V_rátit" #. Menu item #: zim/gui/pageview.py:120 msgid "_Redo" msgstr "Zrušit v_rácení" #. Menu item #: zim/gui/pageview.py:122 msgid "Cu_t" msgstr "_Vyjmout" #. Menu item #: zim/gui/pageview.py:123 msgid "_Copy" msgstr "_Kopírovat" #. Menu item #: zim/gui/pageview.py:124 msgid "_Paste" msgstr "V_ložit" #. Menu item #: zim/gui/pageview.py:125 msgid "_Delete" msgstr "_Smazat" #. Menu item #: zim/gui/pageview.py:126 msgid "Toggle Checkbox 'V'" msgstr "Zatrhnout přepínač kladně" #. Menu item #: zim/gui/pageview.py:127 msgid "Toggle Checkbox 'X'" msgstr "Zatrhnout přepínač záporně" #. Menu item #: zim/gui/pageview.py:128 msgid "_Edit Link or Object..." msgstr "_Upravit odkaz nebo objekt" #. Menu item #: zim/gui/pageview.py:129 zim/gui/pageview.py:5470 msgid "_Remove Link" msgstr "Odst_ranit odkaz" #. Menu item #: zim/gui/pageview.py:130 msgid "_Date and Time..." msgstr "_Datum a čas" #. Menu item #: zim/gui/pageview.py:131 msgid "_Image..." msgstr "_Obrázek..." #. Menu item | #. Menu item, #: zim/gui/pageview.py:132 zim/gui/pageview.py:135 msgid "Bulle_t List" msgstr "Odráž_kový seznam" #. Menu item | #. Menu item, #: zim/gui/pageview.py:133 zim/gui/pageview.py:136 msgid "_Numbered List" msgstr "Čís_lovaný seznam" #. Menu item, #: zim/gui/pageview.py:134 zim/gui/pageview.py:137 msgid "Checkbo_x List" msgstr "Zašk_rtávací seznam" #. Menu item #: zim/gui/pageview.py:138 msgid "Text From _File..." msgstr "Text ze _souboru" #. Menu item #: zim/gui/pageview.py:139 msgid "_Link..." msgstr "_Odkaz" #. Menu item | #. Dialog title #: zim/gui/pageview.py:139 zim/gui/pageview.py:6529 msgid "Insert Link" msgstr "Vložit odkaz" #. Menu item #: zim/gui/pageview.py:140 msgid "_Clear Formatting" msgstr "_Vymazat formátování" #. Menu item #: zim/gui/pageview.py:141 msgid "_Find..." msgstr "N_ajít..." #. Menu item #: zim/gui/pageview.py:143 msgid "Find Ne_xt" msgstr "Najít _následující" #. Menu item #: zim/gui/pageview.py:145 msgid "Find Pre_vious" msgstr "Najít _předchozí" #. Menu item #: zim/gui/pageview.py:147 msgid "_Replace..." msgstr "Nah_radit..." #. Menu item #: zim/gui/pageview.py:148 msgid "Word Count..." msgstr "Počet slov..." #. Menu item #: zim/gui/pageview.py:149 msgid "_Zoom In" msgstr "Z_většit" #. Menu item #: zim/gui/pageview.py:151 msgid "Zoom _Out" msgstr "Z_menšit" #. Menu item to reset zoom #: zim/gui/pageview.py:152 msgid "_Normal Size" msgstr "_Normální velikost" #. Menu title #: zim/gui/pageview.py:155 msgid "New _Attachment" msgstr "Nová _příloha" #. Menu item in "Insert > New File Attachment" submenu #: zim/gui/pageview.py:158 msgid "File _Templates..." msgstr "Šablony _souborů" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading _1" msgstr "Nadpis _1" #. Menu item #: zim/gui/pageview.py:163 msgid "Heading 1" msgstr "Nadpis 1" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading _2" msgstr "Nadpis _2" #. Menu item #: zim/gui/pageview.py:164 msgid "Heading 2" msgstr "Nadpis 2" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading _3" msgstr "Nadpis _3" #. Menu item #: zim/gui/pageview.py:165 msgid "Heading 3" msgstr "Nadpis 3" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading _4" msgstr "Nadpis _4" #. Menu item #: zim/gui/pageview.py:166 msgid "Heading 4" msgstr "Nadpis 4" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading _5" msgstr "Nadpis _5" #. Menu item #: zim/gui/pageview.py:167 msgid "Heading 5" msgstr "Nadpis 5" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "_Strong" msgstr "_Tučně" #. Menu item #: zim/gui/pageview.py:168 zim/gui/pageview.py:179 msgid "Strong" msgstr "Tučně" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "_Emphasis" msgstr "_Kurziva" #. Menu item #: zim/gui/pageview.py:169 zim/gui/pageview.py:180 msgid "Emphasis" msgstr "Kurziva" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "_Mark" msgstr "O_značit" #. Menu item #: zim/gui/pageview.py:170 zim/gui/pageview.py:181 msgid "Mark" msgstr "Zvýraznit" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "_Strike" msgstr "Proškr_tnout" #. Menu item #: zim/gui/pageview.py:171 zim/gui/pageview.py:182 msgid "Strike" msgstr "Proškrtnuté" #. Menu item #: zim/gui/pageview.py:172 msgid "_Subscript" msgstr "_Dolní index" #. Menu item #: zim/gui/pageview.py:173 msgid "_Superscript" msgstr "_Horní index" #. Menu item #: zim/gui/pageview.py:174 msgid "_Verbatim" msgstr "Stro_jopis" #. Menu item #: zim/gui/pageview.py:174 msgid "Verbatim" msgstr "Strojopis" #. option in preferences dialog #: zim/gui/pageview.py:189 msgid "" "Use the <Enter> key to follow links\n" "(If disabled you can still use <Alt><Enter>)" msgstr "" "Pomocí klávesy Enter můžete přejít na cíl odkazu\n" "(pokud to nefunguje, použijte Alt-Enter)." #. option in preferences dialog #: zim/gui/pageview.py:192 msgid "Show the cursor also for pages that can not be edited" msgstr "Zobrazit kurzor také na stránkách, které nelze upravovat." #. option in preferences dialog #: zim/gui/pageview.py:195 msgid "Automatically turn \"CamelCase\" words into links" msgstr "Automaticky vytvářet odkazy ze SloženýchSlov" #. option in preferences dialog #: zim/gui/pageview.py:198 msgid "Automatically turn file paths into links" msgstr "Automaticky vytvářet odkazy z adresářových cest" #. option in preferences dialog #: zim/gui/pageview.py:201 msgid "Automatically select the current word when you apply formatting" msgstr "Při formátování automaticky vybrat aktuální slovo" #. option in preferences dialog #: zim/gui/pageview.py:204 msgid "" "Unindent on <BackSpace>\n" "(If disabled you can still use <Shift><Tab>)" msgstr "" "Smazat odsazení při stisku Backspace\n" "(pokud to nefunguje, použijte Shift-Tab)" #. option in preferences dialog #: zim/gui/pageview.py:207 msgid "Repeated clicking a checkbox cyles through the checkbox states" msgstr "Opakované klepnutí na přepínač mění jeho stavy" #. option in preferences dialog #: zim/gui/pageview.py:210 msgid "(Un-)Indenting a list item also change any sub-items" msgstr "Odsazení položky seznamu ovlivní i podpoložky" #. option in preferences dialog #: zim/gui/pageview.py:213 msgid "Checking a checkbox also change any sub-items" msgstr "Zatržení přepínače změní také jeho podpoložky" #. option in preferences dialog #: zim/gui/pageview.py:216 msgid "Reformat wiki markup on the fly" msgstr "Přeformátovat wiki značky za běhu" #. option in preferences dialog #: zim/gui/pageview.py:219 msgid "Default format for copying text to the clipboard" msgstr "Výchozí formát pro kopírování textu do schránky" #. option in preferences dialog #: zim/gui/pageview.py:222 msgid "Folder with templates for attachment files" msgstr "Složka se šablonami příloh" #. error when unknown interwiki link is clicked #: zim/gui/pageview.py:5359 #, python-format msgid "No such wiki defined: %s" msgstr "Takový odkaz na wiki není definován: %s" #. menu item for context menu of editor #: zim/gui/pageview.py:5412 msgid "Copy _As..." msgstr "Kopírovat _jako..." #. Context menu item for pageview to move selected text to new/other page #: zim/gui/pageview.py:5419 msgid "Move Selected Text..." msgstr "_Přesunout vybraný text..." #. menu item in context menu for image #: zim/gui/pageview.py:5477 msgid "_Edit Properties" msgstr "_Upravit vlastnosti" #. menu item in context menu #: zim/gui/pageview.py:5479 msgid "_Edit Link" msgstr "_Upravit odkaz" #. context menu item #: zim/gui/pageview.py:5499 zim/gui/pageview.py:5503 zim/gui/pageview.py:5510 msgid "Copy _Link" msgstr "Kopírovat _odkaz" #. context menu item #: zim/gui/pageview.py:5507 msgid "Copy Email Address" msgstr "Kopírovat e-mailovou adresu" #. menu item to open containing folder of files #: zim/gui/pageview.py:5518 msgid "Open Folder" msgstr "Otevřít složku" #. menu item for sub menu with applications | #. menu item #: zim/gui/pageview.py:5527 zim/gui/pageview.py:5538 #: zim/plugins/attachmentbrowser/filebrowser.py:327 msgid "Open With..." msgstr "Otevřít pomocí..." #. menu item to open a link or file | #. menu item to open file or folder #: zim/gui/pageview.py:5558 zim/plugins/attachmentbrowser/filebrowser.py:334 msgid "_Open" msgstr "_Otevřít" #. message when no file templates are found in ~/Templates #: zim/gui/pageview.py:5800 msgid "No templates installed" msgstr "Nenainstalovány žádné šablony" #. Text in a question dialog for creating a folder, %s is the folder path #: zim/gui/pageview.py:5863 #, python-format msgid "" "The folder\n" "%s\n" "does not yet exist.\n" "Do you want to create it now?" msgstr "" "Složka\n" "%s\n" "neexistuje. Má se vytvořit?" #. Dialog title #: zim/gui/pageview.py:6195 msgid "Insert Date and Time" msgstr "Vložit datum a čas" #. expander label in "insert date" dialog #: zim/gui/pageview.py:6224 msgid "_Calendar" msgstr "_Kalendář" #. check box in InsertDate dialog #: zim/gui/pageview.py:6238 msgid "_Link to date" msgstr "_Odkaz na datum" #. Dialog title #: zim/gui/pageview.py:6331 msgid "Insert Image" msgstr "Vložit obrázek" #. checkbox in the "Insert Image" dialog #: zim/gui/pageview.py:6338 msgid "Attach image first" msgstr "Nejprve připojit obrázek" #. Error message when trying to insert a not supported file as image #: zim/gui/pageview.py:6353 #, python-format msgid "File type not supported: %s" msgstr "Typ souboru není podporován: %s" #. Dialog title #: zim/gui/pageview.py:6381 msgid "Edit Image" msgstr "Upravit obrázek" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6400 msgid "Location" msgstr "Umístění" #. Input in 'edit image' dialog | #. Input in 'insert link' dialog #: zim/gui/pageview.py:6401 zim/gui/pageview.py:6535 msgid "Link to" msgstr "Odkaz na" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6402 msgid "Width" msgstr "Šířka" #. Input in 'edit image' dialog #: zim/gui/pageview.py:6403 msgid "Height" msgstr "Výška" #. Button in 'edit image' dialog #: zim/gui/pageview.py:6411 msgid "_Reset Size" msgstr "_Původní velikost" #. Dialog title #: zim/gui/pageview.py:6506 msgid "Insert Text From File" msgstr "Vložit text ze souboru" #. Dialog title #: zim/gui/pageview.py:6528 msgid "Edit Link" msgstr "Upravit odkaz" #. Dialog button #: zim/gui/pageview.py:6532 msgid "_Link" msgstr "_Odkaz" #. Input in 'insert link' dialog #: zim/gui/pageview.py:6536 msgid "Text" msgstr "Text" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6635 msgid "_Next" msgstr "_Další" #. button in find bar and find & replace dialog #: zim/gui/pageview.py:6641 msgid "_Previous" msgstr "_Předchozí" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6647 msgid "Match _case" msgstr "Rozlišovat _velikost" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6652 msgid "Whole _word" msgstr "_Celá slova" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6657 msgid "_Regular expression" msgstr "_Regulární výraz" #. checkbox option in find bar and find & replace dialog #: zim/gui/pageview.py:6662 msgid "_Highlight" msgstr "_Zvýraznění" #. label for input in find bar on bottom of page #: zim/gui/pageview.py:6748 msgid "Find" msgstr "Najít" #. Options button #: zim/gui/pageview.py:6778 msgid "Options" msgstr "Možnosti" #. Dialog title #: zim/gui/pageview.py:6823 msgid "Find and Replace" msgstr "Najít a zaměnit" #. input label in find & replace dialog #: zim/gui/pageview.py:6833 msgid "Find what" msgstr "Najít výraz" #. input label in find & replace dialog #: zim/gui/pageview.py:6843 msgid "Replace with" msgstr "Nahradit výrazem" #. Button in search & replace dialog #: zim/gui/pageview.py:6855 msgid "_Replace" msgstr "_Nahradit" #. Button in search & replace dialog #: zim/gui/pageview.py:6860 msgid "Replace _All" msgstr "Nahradit _vše" #. Dialog title #: zim/gui/pageview.py:6887 msgid "Word Count" msgstr "Počet slov" #. label in word count dialog #: zim/gui/pageview.py:6930 msgid "Paragraph" msgstr "Odstavec" #. label in word count dialog #: zim/gui/pageview.py:6931 msgid "Selection" msgstr "Výběr" #. label in word count dialog #: zim/gui/pageview.py:6932 msgid "Words" msgstr "Slov" #. label in word count dialog #: zim/gui/pageview.py:6933 msgid "Lines" msgstr "Řádků" #. label in word count dialog #: zim/gui/pageview.py:6934 msgid "Characters" msgstr "Znaky" #. label in word count dialog #: zim/gui/pageview.py:6935 msgid "Characters excluding spaces" msgstr "Znaků bez mezer" #. Dialog title #: zim/gui/pageview.py:6974 msgid "Move Text to Other Page" msgstr "Přesunout text na jinou stránku" #. Button label #: zim/gui/pageview.py:6975 msgid "_Move" msgstr "_Přesunout" #. Input in 'move text' dialog #: zim/gui/pageview.py:6990 msgid "Move text to" msgstr "Přesunout text na:" #. Input in 'move text' dialog #: zim/gui/pageview.py:6991 msgid "Leave link to new page" msgstr "Vložit odkaz na novou stránku" #. Input in 'move text' dialog #: zim/gui/pageview.py:6992 msgid "Open new page" msgstr "Otevřít novou stránku" #. Dialog title #: zim/gui/pageview.py:7030 msgid "New File" msgstr "Nový soubor" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:20 msgid "Interface" msgstr "Rozhraní" #. Tab in preferences dialog #: zim/gui/preferencesdialog.py:21 msgid "Editing" msgstr "Úpravy" #. Dialog title #: zim/gui/preferencesdialog.py:31 msgid "Preferences" msgstr "Nastavení" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:77 msgid "Plugins" msgstr "Moduly" #. Heading in preferences dialog #: zim/gui/preferencesdialog.py:87 msgid "Applications" msgstr "Aplikace" #. option in preferences dialog #: zim/gui/preferencesdialog.py:94 msgid "Use a custom font" msgstr "Použít vlastní písmo" #. Button in plugin tab #: zim/gui/preferencesdialog.py:208 msgid "_More" msgstr "_Více" #. Button in plugin tab #: zim/gui/preferencesdialog.py:213 msgid "C_onfigure" msgstr "_Nastavit" #. label for button with URL #: zim/gui/preferencesdialog.py:226 msgid "Get more plugins online" msgstr "Získejte více modulů online" #. Heading in plugins tab of preferences dialog #: zim/gui/preferencesdialog.py:251 msgid "Dependencies" msgstr "Závislosti" #. label in plugin info in preferences dialog #: zim/gui/preferencesdialog.py:255 msgid "No dependencies" msgstr "Bez závislostí" #. dependency is OK #: zim/gui/preferencesdialog.py:261 msgid "OK" msgstr "OK" #. dependency failed #: zim/gui/preferencesdialog.py:263 zim/gui/preferencesdialog.py:266 msgid "Failed" msgstr "Nevyřešeny" #. optional dependency #: zim/gui/preferencesdialog.py:267 msgid "Optional" msgstr "Volitelné" #. Heading in plugins tab of preferences dialog | #. Column header versions dialog #: zim/gui/preferencesdialog.py:271 #: zim/plugins/versioncontrol/__init__.py:1190 msgid "Author" msgstr "Autor" #. Column in plugin tab #: zim/gui/preferencesdialog.py:353 msgid "Enabled" msgstr "Povoleno" #. Column in plugin tab #: zim/gui/preferencesdialog.py:356 msgid "Plugin" msgstr "Zásuvný modul" #. Dialog title #: zim/gui/preferencesdialog.py:363 msgid "Configure Plugin" msgstr "Nastavit zásuvný modul" #. Heading for 'configure plugin' dialog - %s is the plugin name #: zim/gui/preferencesdialog.py:368 #, python-format msgid "Options for plugin %s" msgstr "Možnosti zásuvného modulu %s" #. button in preferences dialog to change default text editor #: zim/gui/preferencesdialog.py:402 msgid "Set default text editor" msgstr "Nastavit výchozí textový editor" #. Dialog title #: zim/gui/propertiesdialog.py:11 msgid "Properties" msgstr "Vlastnosti" #. Section in notebook dialog #: zim/gui/propertiesdialog.py:13 msgid "Notebook Properties" msgstr "Vlastnosti sešitu" #. Dialog title #: zim/gui/recentchangesdialog.py:21 msgid "Recent Changes" msgstr "Nedávné změny" #. label for modified time #: zim/gui/recentchangesdialog.py:68 msgid "Today" msgstr "Dnes" #. label for modified time #: zim/gui/recentchangesdialog.py:71 msgid "Yesterday" msgstr "Včera" #. Column header #: zim/gui/recentchangesdialog.py:84 msgid "Last Modified" msgstr "Naposledy upraveno" #. help text for the search dialog #: zim/gui/searchdialog.py:49 msgid "" "For advanced search you can use operators like\n" "AND, OR and NOT. See the help page for more details." msgstr "" "Pro pokročilé vyhledávání můžete použít operátory\n" "AND, OR a NOT. Více informace v nápovědě." #. checkbox option in search dialog #: zim/gui/searchdialog.py:59 msgid "Limit search to the current page and sub-pages" msgstr "Hledat jen v aktuální stránce a podstránkách" #. Column header search dialog #: zim/gui/searchdialog.py:152 msgid "Score" msgstr "Skóre" #. Window title #: zim/gui/server.py:48 msgid "Web Server" msgstr "Webový server" #. Status in web server gui #: zim/gui/server.py:57 msgid "Server not started" msgstr "Server neběží" #. Checkbox in web server gui #: zim/gui/server.py:82 msgid "Allow public access" msgstr "Povolit veřejný přístup" #. Field in web server gui for HTTP port (e.g. port 80) #: zim/gui/server.py:100 msgid "Port" msgstr "Port" #. Status in web server gui #: zim/gui/server.py:159 msgid "Server started" msgstr "Server spuštěn" #. Status in web server gui #: zim/gui/server.py:200 msgid "Server stopped" msgstr "Server zastaven" #. Dialog title | #. Section in dialog #: zim/gui/templateeditordialog.py:21 zim/gui/templateeditordialog.py:26 msgid "Templates" msgstr "Šablony" #. button label #: zim/gui/templateeditordialog.py:58 msgid "Browse" msgstr "Procházet" #. Dialog title #: zim/gui/templateeditordialog.py:156 msgid "Copy Template" msgstr "Kopírovat šablonu" #. dialog title #: zim/gui/widgets.py:580 zim/gui/widgets.py:1766 msgid "Select File" msgstr "Vybrat soubor" #. menu item in context menu #: zim/gui/widgets.py:719 msgid "Expand _All" msgstr "_Rozbalit vše" #. menu item in context menu #: zim/gui/widgets.py:721 msgid "_Collapse All" msgstr "S_balit vše" #. tooltip for the inline icon to clear a text entry widget #: zim/gui/widgets.py:1568 msgid "Clear" msgstr "Vymazat" #. dialog title #: zim/gui/widgets.py:1762 msgid "Select Folder" msgstr "Vybrat složku" #. dialog title #: zim/gui/widgets.py:1764 msgid "Select Image" msgstr "Vyberte obrázek" #. default text for empty page section selection #: zim/gui/widgets.py:1897 msgid "<Top>" msgstr "<Vrchol>" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2212 msgid "Left Side Pane" msgstr "Panel vlevo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2213 msgid "Right Side Pane" msgstr "Panel vpravo" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2214 msgid "Bottom Pane" msgstr "Panel dole" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2215 msgid "Top Pane" msgstr "Panel nahoře" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2219 msgid "Top Left" msgstr "Vlevo nahoře" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2220 msgid "Bottom Left" msgstr "Vlevo dole" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2221 msgid "Top Right" msgstr "Vpravo nahoře" #. Option for placement of plugin widgets #: zim/gui/widgets.py:2222 msgid "Bottom Right" msgstr "Vpravo dole" #. generic error dialog text #: zim/gui/widgets.py:3269 msgid "" "When reporting this bug please include\n" "the information from the text box below" msgstr "" "Pokud budete hlásit chybu, přiložte,\n" "prosím, níže uvedené informace" #. Filter in open file dialog, shows all files (*) #: zim/gui/widgets.py:3590 msgid "All Files" msgstr "Všechny soubory" #. Filter in open file dialog, shows image files only #: zim/gui/widgets.py:3617 msgid "Images" msgstr "Obrázky" #. dialog title for log view dialog - e.g. for Equation Editor #: zim/gui/widgets.py:3813 msgid "Log file" msgstr "Soubor se záznamem" #. Dialog title #: zim/gui/widgets.py:4285 msgid "File Exists" msgstr "Soubor existuje" #. Dialog text in 'new filename' dialog #: zim/gui/widgets.py:4286 #, python-format msgid "" "A file with the name <b>\"%s\"</b> already exists.\n" "You can use another name or overwrite the existing file." msgstr "" "Soubor jménem <b>\"%s\"</b> už existuje.\n" "Vyberte jiné jméno, nebo soubor přepište." #. Input label #: zim/gui/widgets.py:4295 msgid "Filename" msgstr "Jméno souboru" #. Button label #: zim/gui/widgets.py:4304 msgid "_Browse" msgstr "_Procházet" #. Button label #: zim/gui/widgets.py:4309 msgid "Overwrite" msgstr "Přepsat" #. Error verbose description #: zim/main.py:102 msgid "Could not find the file or folder for this notebook" msgstr "Nelze najít soubor nebo složku pro tento sešit" #. Error when looking up a notebook #: zim/main.py:136 zim/main.py:167 msgid "Please specify a notebook" msgstr "Vyberte prosím sešit" #. error message #: zim/main.py:143 #, python-format msgid "Could not find notebook: %s" msgstr "Nelze najít sešit %s" #. error in export command #: zim/main.py:310 msgid "Output location needed for export" msgstr "Pro výstup z exportu je nutné zadat umístění" #. error message for export #: zim/main.py:319 msgid "" "Output folder exists and not empty, specify \"--overwrite\" to force export" msgstr "" "Výstupní adresář už existuje a není prázdný, použijte parametr \"--" "overwrite\" k přepsání" #. error message for export #: zim/main.py:323 msgid "Output file exists, specify \"--overwrite\" to force export" msgstr "" "Výstupní soubor už existuje, použijte parametr \"--overwrite\" k přepsání" #. error message for export #: zim/main.py:328 msgid "Need output file to export MHTML" msgstr "K exportu do MHTML je potřeba zadat výstupní soubor" #. error message for export #: zim/main.py:354 msgid "Need output folder to export full notebook" msgstr "Pro export celého sešitu je potřeba zadat výstupní adresář" #. error description #: zim/notebook.py:694 msgid "The given page name is not valid.\n" msgstr "Zadaný název stránky není platný.\n" #. error message #: zim/notebook.py:700 #, python-format msgid "Invalid page name \"%s\"" msgstr "Neplatný název stránky %s" #. error message #: zim/notebook.py:715 msgid "" "Index is still busy updating while we try to do an\n" "operation that needs the index.\n" msgstr "" "Není možné pracovat s indexem stránek,\n" "protože stále probíhá jeho aktualizace.\n" #. error message for read-only pages #: zim/notebook.py:733 #, python-format msgid "Can not modify page: %s" msgstr "Nelze upravit stránku %s" #. label for properties dialog #: zim/notebook.py:839 msgid "Interwiki Keyword" msgstr "klíčové slovo interwiki" #. label for properties dialog #: zim/notebook.py:840 msgid "Home Page" msgstr "Domovská stránka" #. label for properties dialog #: zim/notebook.py:842 msgid "Document Root" msgstr "Kořen dokumentu" #. label for properties dialog #: zim/notebook.py:844 msgid "Profile" msgstr "Profil" #. placeholder for unknown file name #: zim/parser.py:275 msgid "<Unknown>" msgstr "<Neznámý>" #. Extended error message while parsing a file, gives file name, line number and words where error occurred #: zim/parser.py:281 #, python-format msgid "Error in %(file)s at line %(line)i near \"%(snippet)s\"" msgstr "Chyba v souboru %(file)s na řádku %(line)i blízko \"%(snippet)s\"" #. plugin name #: zim/plugins/arithmetic.py:14 msgid "Arithmetic" msgstr "Výpočty" #. plugin description #: zim/plugins/arithmetic.py:15 msgid "" "This plugin allows you to embed arithmetic calculations in zim.\n" "It is based on the arithmetic module from\n" "http://pp.com.mx/python/arithmetic.\n" msgstr "" "Tento modul umožňuje zahrnout do zimu aritmetické výpočty.\n" "Je založen na výpočetním modulu z\n" " http://pp.com.mx/python/arithmetic.\n" #. menu item #: zim/plugins/arithmetic.py:44 msgid "_Arithmetic" msgstr "_Výpočty" #. unspecified value for file modification time #: zim/plugins/attachmentbrowser/filebrowser.py:354 msgid "Unknown" msgstr "Neznámé" #. label for file type #: zim/plugins/attachmentbrowser/filebrowser.py:367 msgid "Type" msgstr "Typ" #. label for file size #: zim/plugins/attachmentbrowser/filebrowser.py:368 msgid "Size" msgstr "Velikost" #. label for file modification date #: zim/plugins/attachmentbrowser/filebrowser.py:369 msgid "Modified" msgstr "Změněn" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:405 msgid "_Move Here" msgstr "_Přesunout sem" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:409 msgid "_Copy Here" msgstr "_Kopírovat sem" #. popup menu action on drag-drop of a file #: zim/plugins/attachmentbrowser/filebrowser.py:414 msgid "Cancel" msgstr "Zrušit" #. plugin name | #. Menu item #: zim/plugins/attachmentbrowser/__init__.py:67 #: zim/plugins/attachmentbrowser/__init__.py:161 msgid "Attachment Browser" msgstr "Prohlížeč příloh" #. plugin description #: zim/plugins/attachmentbrowser/__init__.py:68 msgid "" "This plugin shows the attachments folder of the current page as an\n" "icon view at bottom pane.\n" msgstr "" "Tento plugin zobrazuje složku s přílohami současné stránky jako ikonu \n" "na dolním panelu.\n" #. option for plugin preferences | #. preferences option #: zim/plugins/attachmentbrowser/__init__.py:78 zim/plugins/backlinkpane.py:33 #: zim/plugins/calendar.py:105 zim/plugins/tableofcontents.py:80 #: zim/plugins/tags.py:40 msgid "Position in the window" msgstr "Pozice uvnitř okna" #. label for attachment browser pane #: zim/plugins/attachmentbrowser/__init__.py:94 msgid "Attachments" msgstr "Přílohy" #. Toolbar item tooltip #: zim/plugins/attachmentbrowser/__init__.py:163 msgid "Show Attachment Browser" msgstr "Ukázat přiřazený prohlížeč" #. Label for the statusbar, %i is the number of attachments for the current page #: zim/plugins/attachmentbrowser/__init__.py:205 #, python-format msgid "%i _Attachment" msgid_plural "%i _Attachments" msgstr[0] "%i přílo_ha" msgstr[1] "%i přílo_hy" msgstr[2] "%i přílo_h" #. plugin name #: zim/plugins/backlinkpane.py:20 msgid "BackLinks Pane" msgstr "Panel zpětných odkazů" #. plugin description #: zim/plugins/backlinkpane.py:21 msgid "" "This plugin adds an extra widget showing a list of pages\n" "linking to the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul zobrazuje widget se seznamem stránek,\n" "které odkazují na aktuální stránku.\n" "\n" "Základní modul dodávaný se Zimem.\n" #. widget label #: zim/plugins/backlinkpane.py:64 msgid "BackLinks" msgstr "Zpětné odkazy" #. button in e.g. equation editor dialog #: zim/plugins/base/imagegenerator.py:276 msgid "_Preview" msgstr "_Náhled" #. Question prompt when e.g. equation editor encountered an error generating the image to insert #: zim/plugins/base/imagegenerator.py:365 msgid "" "An error occurred while generating the image.\n" "Do you want to save the source text anyway?" msgstr "" "Při vytváření obrázku došlo k chybě.\n" "Přejete si zdrojový text přesto uložit?" #. plugin name #: zim/plugins/bookmarksbar.py:34 msgid "BookmarksBar" msgstr "Panel záložek" #. plugin description #: zim/plugins/bookmarksbar.py:35 msgid "" "\t\tThis plugin provides bar for bookmarks.\n" "\t\t" msgstr "" "\t\tPlugin zobrazuje panel se záložkami.\n" "\t\t" #. preferences option #: zim/plugins/bookmarksbar.py:43 msgid "Save bookmarks" msgstr "Uložit záložky" #. preferences option #: zim/plugins/bookmarksbar.py:44 msgid "Add new bookmarks to the beginning of the bar" msgstr "Přidávat nové záložky na začátek panelu" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:115 zim/plugins/bookmarksbar.py:134 msgid "Add Bookmark" msgstr "Přidat záložku" #. menu item bookmark plugin #: zim/plugins/bookmarksbar.py:122 msgid "Bookmarks" msgstr "Záložky" #. message for bookmark plugin #: zim/plugins/bookmarksbar.py:266 msgid "Do you want to delete all bookmarks?" msgstr "Chcete smazat všechny záložky?" #. menu item for context menu #: zim/plugins/bookmarksbar.py:342 msgid "Show full Page Name" msgstr "Zobrazit celý název stránky" #. button label #: zim/plugins/bookmarksbar.py:364 msgid "Set New Name" msgstr "Nastavit nový název" #. button label #: zim/plugins/bookmarksbar.py:366 msgid "Back to Original Name" msgstr "Zpět k původnímu názvu" #. menu item #: zim/plugins/bookmarksbar.py:371 msgid "Remove" msgstr "Odstranit" #. menu item #: zim/plugins/bookmarksbar.py:372 msgid "Remove All" msgstr "Odstranit vše" #. menu item #: zim/plugins/bookmarksbar.py:374 msgid "Open in New Window" msgstr "Otevřít v novém okně" #. menu item #: zim/plugins/bookmarksbar.py:381 msgid "Set to Current Page" msgstr "Nastavit na aktuální stránku" #. plugin name #: zim/plugins/calendar.py:85 msgid "Journal" msgstr "Deník" #. plugin description #: zim/plugins/calendar.py:86 msgid "" "This plugin turns one section of the notebook into a journal\n" "with a page per day, week or month.\n" "Also adds a calendar widget to access these pages.\n" msgstr "" "Tento modul upraví jednu sekci v sešitu na deník\n" "s jednou stránkou na den, týden nebo měsíc.\n" "Také přidává kalendář pro přístup k těmto stránkám.\n" #. option value #: zim/plugins/calendar.py:97 msgid "Day" msgstr "Den" #. option value #: zim/plugins/calendar.py:98 msgid "Week" msgstr "Týden" #. option value #: zim/plugins/calendar.py:99 msgid "Month" msgstr "Měsíc" #. option value #: zim/plugins/calendar.py:100 msgid "Year" msgstr "Rok" #. preferences option #: zim/plugins/calendar.py:104 msgid "Show calendar in sidepane instead of as dialog" msgstr "Zobrazit kalendář v bočním panelu místo dialogového okna" #. preferences option, values will be "Day", "Month", ... #: zim/plugins/calendar.py:106 msgid "Use a page for each" msgstr "Použít pro každý stránku" #. preferences option #: zim/plugins/calendar.py:108 msgid "Expand journal page in index when opened" msgstr "Zobrazit žurnálovací stránku v indexu" #. menu item #: zim/plugins/calendar.py:238 msgid "To_day" msgstr "_Dnešek" #. menu item #: zim/plugins/calendar.py:275 msgid "Calen_dar" msgstr "_Kalendář" #. menu item #: zim/plugins/calendar.py:275 msgid "Show calendar" msgstr "Zobrazit kalendář" #. strftime format for current date label #: zim/plugins/calendar.py:447 msgid "%A %d %B %Y" msgstr "%A, %d. %B %Y" #. dialog title #: zim/plugins/calendar.py:498 msgid "Calendar" msgstr "Kalendář" #. button label #: zim/plugins/calendar.py:508 msgid "_Today" msgstr "_Dnes" #. plugin name #: zim/plugins/diagrameditor.py:18 msgid "Insert Diagram" msgstr "Vložit diagram" #. plugin description #: zim/plugins/diagrameditor.py:19 msgid "" "This plugin provides a diagram editor for zim based on GraphViz.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul poskytuje editor diagramů založený na GraphViz.\n" "\n" "Základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/diagrameditor.py:29 msgid "Dia_gram..." msgstr "Dia_gram..." #. menu item #: zim/plugins/diagrameditor.py:30 msgid "Insert diagram" msgstr "Vložit diagram" #. menu item #: zim/plugins/diagrameditor.py:31 msgid "_Edit diagram" msgstr "Upravit dia_gram" #. plugin name #: zim/plugins/distractionfree.py:23 msgid "Distraction Free Editing" msgstr "Nerušivé psaní" #. plugin description #: zim/plugins/distractionfree.py:25 msgid "" "This plugin adds settings that help using zim\n" "as a distraction free editor.\n" msgstr "" "Tento modul přidává nastavení, která ze Zimu\n" "vytvoří nerušivý editor.\n" #. plugin preference #: zim/plugins/distractionfree.py:34 msgid "Hide menubar in fullscreen mode" msgstr "V režimu celé obrazovky skrýt hlavní nabídku" #. plugin preference #: zim/plugins/distractionfree.py:35 msgid "Hide toolbar in fullscreen mode" msgstr "V režimu celé obrazovky skrýt nástrojovou lištu" #. plugin preference #: zim/plugins/distractionfree.py:36 msgid "Hide pathbar in fullscreen mode" msgstr "V režimu celé obrazovky skrýt ukazatel struktury" #. plugin preference #: zim/plugins/distractionfree.py:37 msgid "Hide statusbar in fullscreen mode" msgstr "V režimu celé obrazovky skrýt stavový řádek" #. plugin preference #: zim/plugins/distractionfree.py:38 msgid "Maximum page width" msgstr "Maximální šířka strany" #. plugin preference #: zim/plugins/distractionfree.py:39 msgid "Vertical margin" msgstr "Horní okraj" #. plugin preference #: zim/plugins/distractionfree.py:40 msgid "Text background color" msgstr "Barva pozadí textu" #. plugin preference #: zim/plugins/distractionfree.py:41 msgid "Text foreground color" msgstr "Barva textu" #. plugin preference #: zim/plugins/distractionfree.py:42 msgid "Screen background color" msgstr "Barva pozadí obrazovky" #. plugin name | #. menu item #: zim/plugins/ditaaeditor.py:28 zim/plugins/ditaaeditor.py:40 msgid "Insert Ditaa" msgstr "Vložit Ditaa" #. plugin description #: zim/plugins/ditaaeditor.py:29 msgid "" "This plugin provides a diagram editor for zim based on Ditaa.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul poskytuje editor diagramů založených na Ditaa.\n" "Základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/ditaaeditor.py:39 msgid "Ditaa" msgstr "Ditaa" #. menu item #: zim/plugins/ditaaeditor.py:41 msgid "_Edit Ditaa" msgstr "_Upravit Ditaa" #. plugin name | #. menu item #: zim/plugins/equationeditor.py:21 zim/plugins/equationeditor.py:33 msgid "Insert Equation" msgstr "Vložit rovnici" #. plugin description #: zim/plugins/equationeditor.py:22 msgid "" "This plugin provides an equation editor for zim based on latex.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul poskytuje editor rovnic založený na LaTeX.\n" "\n" "Základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/equationeditor.py:32 msgid "E_quation" msgstr "Ro_vnice" #. menu item #: zim/plugins/equationeditor.py:34 msgid "_Edit Equation" msgstr "_Upravit rovnici" #. plugin name | #. menu item #: zim/plugins/gnuplot_ploteditor.py:31 zim/plugins/gnuplot_ploteditor.py:41 msgid "Insert Gnuplot" msgstr "Vložit Gnuplot" #. plugin description #: zim/plugins/gnuplot_ploteditor.py:32 msgid "This plugin provides a plot editor for zim based on Gnuplot.\n" msgstr "Modul poskytuje editor pro grafy založené na Gnuplotu.\n" #. menu item #: zim/plugins/gnuplot_ploteditor.py:40 msgid "Gnuplot" msgstr "Gnuplot" #. menu item #: zim/plugins/gnuplot_ploteditor.py:42 msgid "_Edit Gnuplot" msgstr "_Upravit Gnuplot" #. plugin name | #. menu item #: zim/plugins/gnu_r_ploteditor.py:33 zim/plugins/gnu_r_ploteditor.py:43 msgid "Insert GNU R Plot" msgstr "Vložit graf GNU R" #. plugin description #: zim/plugins/gnu_r_ploteditor.py:34 msgid "This plugin provides a plot editor for zim based on GNU R.\n" msgstr "Tento modul nabízí editor diagramů, schémat a grafů v GNU R.\n" #. menu item #: zim/plugins/gnu_r_ploteditor.py:42 msgid "GNU _R Plot" msgstr "GNU _R Plot" #. menu item #: zim/plugins/gnu_r_ploteditor.py:44 msgid "_Edit GNU R Plot" msgstr "_Upravit graf GNU R" #. error description #: zim/plugins/inlinecalculator.py:191 msgid "" "The inline calculator plugin was not able\n" "to evaluate the expression at the cursor." msgstr "" "Zabudovaná kalkulačka nedokázala\n" "vyhodnotit výraz na pozici kurzoru." #. plugin name #: zim/plugins/inlinecalculator.py:203 msgid "Inline Calculator" msgstr "Zabudovaná kalkulačka" #. plugin description #: zim/plugins/inlinecalculator.py:204 msgid "" "This plugin allows you to quickly evaluate simple\n" "mathematical expressions in zim.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul vám umožní rychle vyhodnotit\n" "jednoduché matematické výrazy.\n" "\n" "Jde o základní modul dodávaný se Zimem.\n" #. error message #: zim/plugins/inlinecalculator.py:270 msgid "Could not parse expression" msgstr "Výraz je nesrozumitelný" #. menu item #: zim/plugins/inlinecalculator.py:305 msgid "Evaluate _Math" msgstr "Vyhodnotit _matematiku" #. plugin name | #. Dialog title #: zim/plugins/insertsymbol.py:23 zim/plugins/insertsymbol.py:137 msgid "Insert Symbol" msgstr "Vložit symbol" #. plugin description #: zim/plugins/insertsymbol.py:24 msgid "" "This plugin adds the 'Insert Symbol' dialog and allows\n" "auto-formatting typographic characters.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul přidává dialog 'Vložit symbol' a umožňuje\n" "automaticky formátovat typografické znaky.\n" "\n" "Základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/insertsymbol.py:87 msgid "Sy_mbol..." msgstr "Sy_mbol" #. plugin name #: zim/plugins/linesorter.py:25 msgid "Line Sorter" msgstr "Setřídit řádky" #. plugin description #: zim/plugins/linesorter.py:26 msgid "" "This plugin sorts selected lines in alphabetical order.\n" "If the list is already sorted the order will be reversed\n" "(A-Z to Z-A).\n" msgstr "" "Modul seřadí označené řádky podle abecedy.\n" "Pokud je seznam už setříděný, pořadí se obrátí.\n" #. menu item #: zim/plugins/linesorter.py:51 msgid "_Sort lines" msgstr "_Setřídit řádky" #. Error message in "" dialog, %s will be replaced by application name #: zim/plugins/linesorter.py:58 msgid "Please select more than one line of text, first." msgstr "Vyberte nejprve aspoň jeden řádek textu." #. plugin name #: zim/plugins/linkmap.py:23 msgid "Link Map" msgstr "Mapa odkazů" #. plugin description #: zim/plugins/linkmap.py:24 msgid "" "This plugin provides a dialog with a graphical\n" "representation of the linking structure of the\n" "notebook. It can be used as a kind of \"mind map\"\n" "showing how pages relate.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul zobrazuje okno se strukturou sešitu. Můžete ho použít jako \n" "myšlenkovou mapu - zobrazuje vztahy mezi stránkami.\n" "\n" "Základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/linkmap.py:116 msgid "Show Link Map" msgstr "Zobrazit mapu odkazů" #. plugin name #: zim/plugins/printtobrowser.py:26 msgid "Print to Browser" msgstr "Zobrazit v prohlížeči" #. plugin description #: zim/plugins/printtobrowser.py:27 msgid "" "This plugin provides a workaround for the lack of\n" "printing support in zim. It exports the current page\n" "to html and opens a browser. Assuming the browser\n" "does have printing support this will get your\n" "data to the printer in two steps.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul poskytuje dočasné řešení pro tisk,\n" "jehož podpora v Zimu chybí. Exportuje stránku \n" "do HTML a spustí webový prohlížeč, v němž ji \n" "pak lze snadno vytisknout.\n" "\n" "Tohle je základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/printtobrowser.py:72 msgid "_Print to Browser" msgstr "_Zobrazit v prohlížeči" #. plugin name #: zim/plugins/quicknote.py:150 zim/plugins/quicknote.py:196 #: zim/plugins/quicknote.py:410 msgid "Quick Note" msgstr "Rychlá poznámka" #. plugin description #: zim/plugins/quicknote.py:151 msgid "" "This plugin adds a dialog to quickly drop some text or clipboard\n" "content into a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul přidává dialog, pomocí něhož můžete do stránky \n" "rychle přidat nějaký text nebo obsah schránky.\n" "\n" "Je to základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/quicknote.py:181 msgid "Quick Note..." msgstr "Rychlá poznámka..." #. text entry field #: zim/plugins/quicknote.py:222 msgid "Page section" msgstr "Sekce stránky" #. checkbox in Quick Note dialog #: zim/plugins/quicknote.py:223 msgid "Create a new page for each note" msgstr "Vytvořit pro každou poznámku novou stránku" #. text entry field #: zim/plugins/quicknote.py:224 zim/plugins/tableeditor.py:999 msgid "Title" msgstr "Nadpis" #. Option in quicknote dialog #: zim/plugins/quicknote.py:261 msgid "Open _Page" msgstr "Otevřít _stránku" #. confirm closing quick note dialog #: zim/plugins/quicknote.py:296 msgid "Discard note?" msgstr "Odstranit poznámku?" #. plugin name | #. menu item #: zim/plugins/scoreeditor.py:43 zim/plugins/scoreeditor.py:61 msgid "Insert Score" msgstr "Vložit notový zápis" #. plugin description #: zim/plugins/scoreeditor.py:44 msgid "" "This plugin provides an score editor for zim based on GNU Lilypond.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul poskytuje editor pro vytváření notových zápisů \n" "(založený na GNU Lilypond).\n" "\n" "Základní modul dodávaný se Zimem.\n" #. plugin preference #: zim/plugins/scoreeditor.py:55 msgid "Common include header" msgstr "Společné záhlaví" #. plugin preference #: zim/plugins/scoreeditor.py:56 msgid "Common include footer" msgstr "Společné zápatí" #. menu item #: zim/plugins/scoreeditor.py:60 msgid "S_core" msgstr "_Score" #. menu item #: zim/plugins/scoreeditor.py:62 msgid "_Edit Score" msgstr "_Upravit notový zápis" #. plugin name | #. dialog title #: zim/plugins/screenshot.py:102 zim/plugins/screenshot.py:180 msgid "Insert Screenshot" msgstr "Vložit snímek obrazovky" #. plugin description #: zim/plugins/screenshot.py:103 msgid "" "This plugin allows taking a screenshot and directly insert it\n" "in a zim page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Tento modul umožní vytvořit snímek obrazovky\n" "a vložit jej přímo do stránky.\n" "\n" "Jde o základní modul dodávaný se Zimem.\n" #. plugin preference #: zim/plugins/screenshot.py:114 msgid "Screenshot Command" msgstr "Příkaz pro snímek obrazovky" #. menu item for insert screenshot plugin #: zim/plugins/screenshot.py:167 msgid "_Screenshot..." msgstr "_Snímek obrazovky..." #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:184 msgid "Capture whole screen" msgstr "Sejmout celou obrazovku" #. option in 'insert screenshot' dialog #: zim/plugins/screenshot.py:186 msgid "Select window or region" msgstr "Vybrat okno nebo oblast" #. input in 'insert screenshot' dialog #: zim/plugins/screenshot.py:195 msgid "Delay" msgstr "Prodleva" #. label behind timer #: zim/plugins/screenshot.py:201 msgid "seconds" msgstr "sekund" #. Error message in "insert screenshot" dialog, %s will be replaced by application name #: zim/plugins/screenshot.py:226 #, python-format msgid "Some error occurred while running \"%s\"" msgstr "Při běhu %s došlo k chybě" #. plugin name | #. menu item #: zim/plugins/sequencediagrameditor.py:21 #: zim/plugins/sequencediagrameditor.py:32 msgid "Insert Sequence Diagram" msgstr "Vložit sekvenční diagram" #. plugin description #: zim/plugins/sequencediagrameditor.py:22 msgid "" "This plugin provides a sequence diagram editor for zim based on seqdiag.\n" "It allows easy editing of sequence diagrams.\n" msgstr "" "Tento modul poskytuje editor sekvenčních diagramů založený na seqdiag.\n" "Díky němu je snadné tyto diagramy upravovat.\n" #. menu item #: zim/plugins/sequencediagrameditor.py:31 msgid "Sequence Diagram" msgstr "Sekvenční diagram" #. menu item #: zim/plugins/sequencediagrameditor.py:33 msgid "_Edit Sequence Diagram" msgstr "_Upravit sekvenční diagram" #. plugin name #: zim/plugins/sourceview.py:43 msgid "Source View" msgstr "Zobrazit zdroj" #. plugin description #: zim/plugins/sourceview.py:44 msgid "" "This plugin allows inserting 'Code Blocks' in the page. These will be\n" "shown as emdedded widgets with syntax highlighting, line numbers etc.\n" msgstr "" "Tento modul umožňuje vkládat do stránek bloky zdrojového kódu.\n" "Budou zobrazeny se zvýrazněním syntaxe, číslováním řádek apod.\n" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:55 msgid "Auto indenting" msgstr "Automatické odsazování" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:57 msgid "Smart Home key" msgstr "Chytrá klávesa Home" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:59 msgid "Highlight current line" msgstr "Zvýraznit aktuální řádek" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:61 msgid "Show right margin" msgstr "Zobrazit pravý okraj" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:63 msgid "Right margin position" msgstr "Pozice pravého okraje" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:65 msgid "Tab width" msgstr "Šířka tabulátoru" #. menu item #: zim/plugins/sourceview.py:112 msgid "Code Block" msgstr "Blok zdrojového kódu" #. dialog title #: zim/plugins/sourceview.py:127 msgid "Insert Code Block" msgstr "Vložit blok zdrojového kódu" #. input label #: zim/plugins/sourceview.py:130 zim/plugins/sourceview.py:346 msgid "Syntax" msgstr "Syntaxe" #. preference option for sourceview plugin #: zim/plugins/sourceview.py:336 msgid "Show Line Numbers" msgstr "Zobrazit čísla řádků" #. plugin name #: zim/plugins/spell.py:66 msgid "Spell Checker" msgstr "Kontrola překlepů" #. plugin description #: zim/plugins/spell.py:67 msgid "" "Adds spell checking support using gtkspell.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul zajišťuje kontrolu překlepů pomocí GtkSpell.\n" "\n" "Základní modul dodávaný se Zimem.\n" #. menu item #: zim/plugins/spell.py:117 msgid "Check _spelling" msgstr "_Kontrola překlepů" #. error message #: zim/plugins/spell.py:150 msgid "Could not load spell checking" msgstr "Nelze načíst kontrolu překlepů" #. error message explanation #: zim/plugins/spell.py:152 msgid "" "This could mean you don't have the proper\n" "dictionaries installed" msgstr "" "To může znamenat, že nemáte nainstalované\n" "odpovídající slovníky" #. alignment option #: zim/plugins/tableeditor.py:56 zim/plugins/tableeditor.py:943 msgid "Left" msgstr "Vlevo" #. alignment option #: zim/plugins/tableeditor.py:57 msgid "Center" msgstr "Na střed" #. alignment option #: zim/plugins/tableeditor.py:58 msgid "Right" msgstr "Vpravo" #. alignment option #: zim/plugins/tableeditor.py:59 msgid "Unspecified" msgstr "Neurčeno" #. plugin name #: zim/plugins/tableeditor.py:90 msgid "Table Editor" msgstr "Editor tabulek" #. plugin description #: zim/plugins/tableeditor.py:91 msgid "" "With this plugin you can embed a 'Table' into the wiki page. Tables will be " "shown as GTK TreeView widgets.\n" "Exporting them to various formats (i.e. HTML/LaTeX) completes the feature " "set.\n" msgstr "" "Pomocí tohoto pluginu můžete do stránky vložit tabulku. Tabulky se zobrazují " "jako GTK prvky TreeView.\n" "Mezi jejich možnosti patří také export do různých formátů (např. " "HTML/LaTeX).\n" #. option value #: zim/plugins/tableeditor.py:101 msgid "with lines" msgstr "s ohraničením" #. option value #: zim/plugins/tableeditor.py:102 msgid "no grid lines" msgstr "bez ohraničení" #. option value #: zim/plugins/tableeditor.py:103 msgid "horizontal lines" msgstr "vodorovné ohraničení" #. option value #: zim/plugins/tableeditor.py:104 msgid "vertical lines" msgstr "svislé ohraničení" #. preference description #: zim/plugins/tableeditor.py:110 msgid "Show helper toolbar" msgstr "Zobrazit pomocný panel" #. preference description #: zim/plugins/tableeditor.py:113 msgid "Grid lines" msgstr "Ohraničení" #. menu item #: zim/plugins/tableeditor.py:252 msgid "Table" msgstr "Tabulka" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:547 zim/plugins/tableeditor.py:759 msgid "Add row" msgstr "Přidat řádek" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:548 msgid "Remove row" msgstr "Odstranit řádek" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:549 zim/plugins/tableeditor.py:761 msgid "Clone row" msgstr "Duplikovat řádek" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:551 zim/plugins/tableeditor.py:765 msgid "Row up" msgstr "O řádek výš" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:552 zim/plugins/tableeditor.py:766 msgid "Row down" msgstr "O řádek níž" #. tooltip on mouse hover | #. menu item #: zim/plugins/tableeditor.py:554 zim/plugins/tableeditor.py:768 msgid "Change columns" msgstr "Změnit sloupce" #. tooltip on mouse hover #: zim/plugins/tableeditor.py:556 msgid "Open help" msgstr "Otevřít nápovědu" #. menu item #: zim/plugins/tableeditor.py:760 msgid "Delete row" msgstr "Odstranit řádek" #. menu item #: zim/plugins/tableeditor.py:763 msgid "Open cell content link" msgstr "Otevřít odkaz v buňce" #. Popup dialog #: zim/plugins/tableeditor.py:826 msgid "" "The table must consist of at least on row!\n" " No deletion done." msgstr "" "Tabulka musí obsahovat aspoň jeden řádek. \n" " Nic nebylo smazáno." #. Popup dialog #: zim/plugins/tableeditor.py:909 zim/plugins/tableeditor.py:1157 msgid "Please select a row, before you push the button." msgstr "Vyberte prosím nejprve řádek." #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Insert Table" msgstr "Vložit tabulku" #. Dialog title #: zim/plugins/tableeditor.py:938 msgid "Edit Table" msgstr "Upravit tabulku" #. Description of "Table-Insert" Dialog #: zim/plugins/tableeditor.py:948 msgid "Managing table columns" msgstr "Správa sloupců v tabulce" #. Initial data for column title in table #: zim/plugins/tableeditor.py:974 msgid "Column 1" msgstr "Sloupec 1" #. table header #: zim/plugins/tableeditor.py:1008 msgid "" "Auto\n" "Wrap" msgstr "" "Automatické\n" "zalamování" #. table header #: zim/plugins/tableeditor.py:1018 msgid "Align" msgstr "Zarovnání" #. hoover tooltip #: zim/plugins/tableeditor.py:1046 msgid "Add column" msgstr "Přidat sloupec" #. hoover tooltip #: zim/plugins/tableeditor.py:1047 msgid "Remove column" msgstr "Odstranit sloupec" #. hoover tooltip #: zim/plugins/tableeditor.py:1048 msgid "Move column ahead" msgstr "Posunout sloupec dopředu" #. hoover tooltip #: zim/plugins/tableeditor.py:1049 msgid "Move column backward" msgstr "Posunout sloupec dozadu" #. popup dialog #: zim/plugins/tableeditor.py:1131 msgid "A table needs to have at least one column." msgstr "Tabulka musí obsahovat aspoň jeden sloupec" #. plugin name #: zim/plugins/tableofcontents.py:66 msgid "Table of Contents" msgstr "Obsah stránky" #. plugin description #: zim/plugins/tableofcontents.py:67 msgid "" "This plugin adds an extra widget showing a table of\n" "contents for the current page.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul zobrazuje osnovu na aktuální stránce osnovu\n" "z nadpisů (obsah).\n" #. option for plugin preferences #: zim/plugins/tableofcontents.py:82 msgid "Show ToC as floating widget instead of in sidepane" msgstr "Obsah stránky jako plovoucí prvek místo v bočním panelu" #. option for plugin preferences #: zim/plugins/tableofcontents.py:84 msgid "Show the page title heading in the ToC" msgstr "V souhrnném obsahu zobrazit název stránky" #. widget label #: zim/plugins/tableofcontents.py:121 zim/plugins/tableofcontents.py:418 msgid "ToC" msgstr "Obsah" #. action to lower level of heading in the text #: zim/plugins/tableofcontents.py:298 msgid "Demote" msgstr "O úroveň níž" #. action to raise level of heading in the text #: zim/plugins/tableofcontents.py:300 msgid "Promote" msgstr "O úroveň výš" #. plugin name | #. Column header for tag list in Task List dialog #: zim/plugins/tags.py:30 zim/plugins/tags.py:70 zim/plugins/tasklist.py:739 msgid "Tags" msgstr "Štítky" #. plugin description #: zim/plugins/tags.py:31 msgid "" "This plugin provides a page index filtered by means of selecting tags in a " "cloud.\n" msgstr "" "Modul poskytuje seznam stránek filtrovaný na základě vybraných štítků.\n" #. menu option #: zim/plugins/tags.py:144 msgid "Show full page name" msgstr "Zobrazit celý název stránky" #. menu option #: zim/plugins/tags.py:149 msgid "Sort pages by tags" msgstr "Seřadit stránky podle štítků" #. label for untagged pages in side pane #: zim/plugins/tags.py:275 msgid "untagged" msgstr "bez štítku" #. Context menu item for tag cloud #: zim/plugins/tags.py:1016 msgid "Sort alphabetically" msgstr "Seřadit abecedně" #. plugin name | #. menu item | #. dialog title #: zim/plugins/tasklist.py:82 zim/plugins/tasklist.py:408 #: zim/plugins/tasklist.py:634 msgid "Task List" msgstr "Seznam úkolů" #. plugin description #: zim/plugins/tasklist.py:83 msgid "" "This plugin adds a dialog showing all open tasks in\n" "this notebook. Open tasks can be either open checkboxes\n" "or items marked with tags like \"TODO\" or \"FIXME\".\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul přidává dialogové okno zobrazující všechny \n" "otevřené úkoly v sešitu. Otevřené úkoly jsou buď\n" "nezatržené přepínače nebo položky označené\n" "slovy jako TODO nebo FIXME.\n" "\n" "Základní modul dodávaný se zimem.\n" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:96 msgid "Consider all checkboxes as tasks" msgstr "Považovat všechny přepínače za úlohy" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:98 msgid "Turn page name into tags for task items" msgstr "Názvy stránek jako štítky v úkolech" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:100 msgid "Implicit due date for task items in calendar pages" msgstr "Uzávěrka úkolů v kalendáři podle data stránky" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:102 msgid "Flag tasks due on Monday or Tuesday before the weekend" msgstr "Úkoly s uzávěrkou v pondělí nebo úterý označit před víkendem" #. label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" #: zim/plugins/tasklist.py:104 msgid "Labels marking tasks" msgstr "Značky pro označení úloh" #. label for plugin preferences dialog - label is by default "Next" #: zim/plugins/tasklist.py:106 msgid "Label for next task" msgstr "Štítek pro další úkol" #. label for plugin preferences dialog #: zim/plugins/tasklist.py:108 msgid "Tags for non-actionable tasks" msgstr "Štítky pro nesplnitelné úkoly" #. subtree to search for tasks - default is the whole tree (empty string means everything) #: zim/plugins/tasklist.py:110 msgid "Subtree(s) to index" msgstr "Podstromy pro indexování" #. subtrees of the included subtrees to *not* search for tasks - default is none #: zim/plugins/tasklist.py:112 msgid "Subtree(s) to ignore" msgstr "Ignorovat podstromy" #. Short message text on first time use of task list plugin #: zim/plugins/tasklist.py:412 msgid "Need to index the notebook" msgstr "Sešit je potřeba indexovat" #. Long message text on first time use of task list plugin #: zim/plugins/tasklist.py:414 msgid "" "This is the first time the task list is opened.\n" "Therefore the index needs to be rebuild.\n" "Depending on the size of the notebook this can\n" "take up to several minutes. Next time you use the\n" "task list this will not be needed again." msgstr "" "Seznam úloh je otevřen poprvé.\n" "Je potřeba znovu sestavit index.\n" "Tato operace může v závislosti na\n" "velikosti sešitu trvat i několik minut.\n" "Až seznam úloh otevřete příště,\n" "tato operace již nebude potřeba." #. Input label #: zim/plugins/tasklist.py:664 msgid "Filter" msgstr "Filtr" #. Checkbox in task list #: zim/plugins/tasklist.py:684 msgid "Only Show Actionable Tasks" msgstr "Zobrazit pouze proveditelné úkoly" #. Label for statistics in Task List, %i is the number of tasks #: zim/plugins/tasklist.py:697 #, python-format msgid "%i open item" msgid_plural "%i open items" msgstr[0] "%i otevřená položka" msgstr[1] "%i otevřené položky" msgstr[2] "%i otevřených položek" #. "tag" for showing all tasks #: zim/plugins/tasklist.py:798 msgid "All Tasks" msgstr "Všechny úkoly" #. label in tasklist plugins for tasks without a tag #: zim/plugins/tasklist.py:809 msgid "Untagged" msgstr "Beze štítku" #. Column header Task List dialog #: zim/plugins/tasklist.py:893 msgid "Task" msgstr "Úkol" #. Column header Task List dialog | #. Column header versions dialog #: zim/plugins/tasklist.py:939 zim/plugins/versioncontrol/__init__.py:1189 msgid "Date" msgstr "Datum" #. plugin name #: zim/plugins/trayicon.py:52 msgid "Tray Icon" msgstr "Ikona v systémové oblasti" #. plugin description #: zim/plugins/trayicon.py:53 msgid "" "This plugin adds a tray icon for quick access.\n" "\n" "This plugin depends on Gtk+ version 2.10 or newer.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul zajišťuje ikonu v systémové oblasti.\n" "Závisí na Gtk+ verze 2.10 nebo novější.\n" "Základní modul dodávaný se zimem.\n" #. preferences option #: zim/plugins/trayicon.py:66 msgid "" "Classic trayicon,\n" "do not use new style status icon on Ubuntu" msgstr "" "Klasická ikona do systémového panelu,\n" "ikona v novém pojetí se nehodí pro Ubuntu" #. preferences option #: zim/plugins/trayicon.py:67 msgid "Show a separate icon for each notebook" msgstr "Pro každý sešit zobrazit samostatnou ikonu" #. menu item in tray icon menu #: zim/plugins/trayicon.py:110 msgid "_Quick Note..." msgstr "_Rychlá poznámka..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:119 msgid "_Other..." msgstr "_Další..." #. menu item in tray icon menu #: zim/plugins/trayicon.py:172 msgid "Notebooks" msgstr "Sešity" #. tooltip for tray icon | #. short description of zim #: zim/plugins/trayicon.py:231 zim/plugins/zeitgeist-logger.py:43 msgid "Zim Desktop Wiki" msgstr "Zim Desktop Wiki" #. plugin name #: zim/plugins/versioncontrol/__init__.py:47 msgid "Version Control" msgstr "Správa verzí" #. plugin description #: zim/plugins/versioncontrol/__init__.py:48 msgid "" "This plugin adds version control for notebooks.\n" "\n" "This plugin supports the Bazaar, Git and Mercurial version control systems.\n" "\n" "This is a core plugin shipping with zim.\n" msgstr "" "Modul přidává sešitům možnost správy verzí.\n" "Podporuje systémy Bazaar, Git a Mercurial.\n" "Základní modul dodávaný se Zimem.\n" #. Label for plugin preference #: zim/plugins/versioncontrol/__init__.py:60 msgid "Autosave version on regular intervals" msgstr "Automaticky ukládat verze v pravidelných intervalech" #. default version comment for auto-saved versions #: zim/plugins/versioncontrol/__init__.py:194 msgid "Automatically saved version from zim" msgstr "Verze uložená automaticky zimem" #. menu item #: zim/plugins/versioncontrol/__init__.py:203 msgid "S_ave Version..." msgstr "Uložit v_erzi..." #. menu item #: zim/plugins/versioncontrol/__init__.py:220 msgid "_Versions..." msgstr "_Verze..." #. verbose error description #: zim/plugins/versioncontrol/__init__.py:234 msgid "" "There are no changes in this notebook since the last version that was saved" msgstr "Od poslední uložené verze nevznikly v sešitě žádné změny." #. Short error descriotion #: zim/plugins/versioncontrol/__init__.py:237 msgid "No changes since last version" msgstr "Žádné změny od poslední verze" #. option value #: zim/plugins/versioncontrol/__init__.py:253 msgid "Bazaar" msgstr "Bazaar" #. option value #: zim/plugins/versioncontrol/__init__.py:254 msgid "Mercurial" msgstr "Mercurial" #. option value #: zim/plugins/versioncontrol/__init__.py:255 msgid "Git" msgstr "Git" #. option value #: zim/plugins/versioncontrol/__init__.py:256 msgid "Fossil" msgstr "Fossil" #. Question dialog #: zim/plugins/versioncontrol/__init__.py:850 msgid "Enable Version Control?" msgstr "Povolit správu verzí?" #. Detailed question #: zim/plugins/versioncontrol/__init__.py:851 msgid "" "Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" msgstr "" "Správa verzí není pro tento sešit aktuálně povolena.\n" "Chcete ji povolit?" #. option to chose versioncontrol backend #: zim/plugins/versioncontrol/__init__.py:863 msgid "Backend" msgstr "Systém" #. dialog title #: zim/plugins/versioncontrol/__init__.py:878 msgid "Save Version" msgstr "Uložit verzi" #. Dialog text #: zim/plugins/versioncontrol/__init__.py:884 msgid "Please enter a comment for this version" msgstr "Vložte prosím k této verzi komentář" #. default version comment in the "save version" dialog #: zim/plugins/versioncontrol/__init__.py:889 msgid "Saved version from zim" msgstr "Verze uložená zimem" #. dialog title #: zim/plugins/versioncontrol/__init__.py:922 #: zim/plugins/versioncontrol/__init__.py:939 msgid "Versions" msgstr "Verze" #. Option in versions dialog to show version for single page #: zim/plugins/versioncontrol/__init__.py:946 msgid "_Page" msgstr "_Stránku" #. Button label #: zim/plugins/versioncontrol/__init__.py:961 msgid "View _Annotated" msgstr "Zobrazit _komentované" #. Help text in versions dialog #: zim/plugins/versioncontrol/__init__.py:966 msgid "" "Select a version to see changes between that version and the current\n" "state. Or select multiple versions to see changes between those versions.\n" msgstr "" "Vyberte verzi, abyste mohli srovnat rozdíly mezi touto verzí a aktuální " "verzí.\n" "Nebo vyberte více verzí a uvidíte rozdíly mezi nimi.\n" #. version details #: zim/plugins/versioncontrol/__init__.py:991 msgid "Comment" msgstr "Komentář" #. Button label #: zim/plugins/versioncontrol/__init__.py:1006 msgid "_Restore Version" msgstr "O_bnovit verzi" #. button in versions dialog for diff #: zim/plugins/versioncontrol/__init__.py:1011 msgid "Show _Changes" msgstr "Zobrazit _změny" #. button in versions dialog for side by side comparison #: zim/plugins/versioncontrol/__init__.py:1017 msgid "_Side by Side" msgstr "_Jedna ku jedné" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1106 msgid "Annotated Page Source" msgstr "Komentovaný zdroj stránky" #. Confirmation question #: zim/plugins/versioncontrol/__init__.py:1115 msgid "Restore page to saved version?" msgstr "Obnovit stránku na uloženou verzi?" #. Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id #: zim/plugins/versioncontrol/__init__.py:1116 #, python-format msgid "" "Do you want to restore page: %(page)s\n" "to saved version: %(version)s ?\n" "\n" "All changes since the last saved version will be lost !" msgstr "" "Přejete si obnovit stránku %(page)s\n" "na uloženou verzi %(version)s?\n" "Všechny změny od poslední uložené verze budou ztraceny!" #. dialog title #: zim/plugins/versioncontrol/__init__.py:1131 msgid "Changes" msgstr "Změny" #. Column header versions dialog #: zim/plugins/versioncontrol/__init__.py:1188 msgid "Rev" msgstr "Rev" #. plugin name #: zim/plugins/zeitgeist-logger.py:27 msgid "Log events with Zeitgeist" msgstr "Ukládat záznamy pomocí Zeitgeist" #. plugin description #: zim/plugins/zeitgeist-logger.py:28 msgid "Pushes events to the Zeitgeist daemon." msgstr "Zaznamenává události pomocí démonu Zeitgeist" #. label for how zim pages show up in the recent files menu, %s is the page name #: zim/plugins/zeitgeist-logger.py:58 #, python-format msgid "Wiki page: %s" msgstr "Wiki stránka: %s" #. Error message in template lookup #: zim/templates/__init__.py:121 #, python-format msgid "Could not find template \"%s\"" msgstr "Nelze načíst šablonu \"%s\"" #~ msgid "Text Editor" #~ msgstr "Textový wiki editor" #~ msgid "File browser" #~ msgstr "Správce souborů" #~ msgid "Email client" #~ msgstr "E-mailový klient" #~ msgid "Web browser" #~ msgstr "Webový prohlížeč" #~ msgid "Pages" #~ msgstr "Stránky" #~ msgid "Output" #~ msgstr "Výstup" #~ msgid "Match c_ase" #~ msgstr "Rozlišovat ve_likost" #~ msgid "Slow file system" #~ msgstr "Pomalý souborový systém" #~ msgid "Prio" #~ msgstr "Priorita" #~ msgid "_Filter" #~ msgstr "_Filtr" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/CHANGELOG.txt������������������������������������������������������������������������������0000664�0001750�0001750�00000061646�12615421430�014160� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������===== Changes for zim ===== Jaap Karssenberg <jaap.karssenberg@gmail.com> This branch is the Python rewrite and starts with version 0.42. Earlier version numbers for zim correspond to the Perl branch. === 0.65 - Sun 01 Nov 2015 === This release fixes two critical bugs in version 0.64: * <Control> keybindings fail for older gtk versions, and in particular for the <Control><Space> keybinding * The table editor tends to drop columns of content in the precences of empty cells === 0.64 - Tue 27 Oct 2015 === * Bookmark plugin - by Pavel M * Updated spell plugin to allow using gtkspellcheck as backend * Updated attachmentbrowser plugin with new thumbnailing logic * Speed up of sqlite indexing * Updated support for OS X - by Brecht Machiels * Bug fixes for the Fossil version control support * Bug fixes for locale in strftime and strxfrm functions * Bug fix to avoid overwriting the accelmap config file === 0.63 - Sat 13 Jun 2015 === * Table plugin - by Tobias Haupenthal * Support for Fossil version control - by Stas Bushuev ... Many bug fixes === 0.62 - Tue 30 Sep 2014 === Bug fix release * Fixed broken Source View plugin * Fixed Tray Icon plugin for Ubuntu * Fixed bug with Caps Lock on windows * Fixed behavior of New Page dialog * Fixed status parsing for Git backend * Fixed bug with CamelCase parsing for Persian & Arabic script * Fixed parsing of numbered list character to be robust for Chinese characters * Fixed bug with www server dialog * Fixed bug in Go Child Page action * Fixed export using the S5 slideshow template - now splits by heading * Fixed bug in indexing for python 2.6 * Fixed bug in Open Notebook dialog when selecting current notebook * Changed lookup path for 3rd party plugin modules - now uses XDG path * Merged patch to support more screenshot tools in the Insert Screenshot plugin - Andri Kusumah * Updated Sort Lines plugin to use natural sorting for unicode * Added control for handling of line breaks in HTML export * Changed rendering of checkboxes in HTML export * Merged patch to set image size for GNU R plugin - Olivier Scholder * Added control to toggle full page name in Tag index view * Added handling of SIGTERM signal === 0.61 - Thu 31 Jul 2014 === * Full refactoring of code for parsing and processing wiki syntax making parser easier to extend and document interface more scalable * Full refactoring of code for plugin framework making plugins more flexible by defining decorators for specific application objects * Full refactoring of code for exporting pages from zim - Now supports MHTML export format - Supports exporting multiple pages to a single file - Supports recursive export of a page and all it's sub-pages - Templates now support many more instructions and expressions * Full refactoring of the code for parsing commandline commands and initializing the application * New config manager code to make parsing and handling of config files more robust * Merged new plugin for editing sequence diagrams by Greg Warner * Improved the ToC plugin with floating widget * Fixed unicode issue when calling external applications, and in particular for the hg and git commands * Fixed support for unicode CamelCase word detection * Fixed bug on windows with unicode user names in background process connection * Changed "tags" plugin to show full page paths in the pre-tag view * Added option for custom commands to replace the current selection * Added keybindings for XF86Back and XF86Forward * Many small fixes & patches from various persons that I forgot about *sorry* * Added Finnish translation === 0.60 - Tue 30 Apr 2013 === * In this release the required python version is changed from 2.5 to 2.6 ! * Added a Recent Changes dialog and a Recent Changes pathbar option * Added search entry to toolbar * Added function to attachment browser plugin to zoom icon size * Added new template by Robert Welch * Critical bug fix for using templates that have a resources folder * Fix for week number in Journal plugin page template (again) * Fix for focus switching with distraction free editing plugin * Fix for handling BOM character at start of file * Fixed quicknote dialog to ask for confirmation on discard * Fix to allow calling executables that do not end in .exe on windows * Fix for various typos in the manual by Stéphane Aulery * Removed custom zim.www.Server class in favor of standard library version * New translations for Korean and Norwegian Bokmal === 0.59 - Wed 23 Jan 2012 === * Critical bug fix in pageview serialization * Fix for inheritance of tags in tasklist - Epinull * Fix for customtools dialog - Epinull * Fix for week number in Journal plugin page template === 0.58 - Sat 15 Dec 2012 === * Added new plugin for distraction free fullscreen mode * Added options to limit tasklist plugin to certain namespaces - Pierre-Antoine Champin * Added option to tasklist plugin to flag non-actionable tasks by a special tag * Added prompt for filename for Insert New File action * Added template option to list attachments in export * Added class attributes to links in HTML output * Added two more commandline options to quicknote plugin * Made sidepanes more compact by embedding close buttons in widgets * Critical fix for restarting zim after a crash (cleaning up socket) * Bug fix for search queries with quoted arguments * Bug fix for use of tags in the tasklist plugin * Bug fix for wiki format to be more robust for bad links * Bug fix for latex format to not use file URIs in \includegraphics{} * Bug fix for including latex equations in latex export * Bug fix list behavior checkboxes and numbered lists * Fix first day of week locale for calendar plugin - based on patch by Leopold Schabel * Fix for handling "file:/" and "file://" URIs in links - see manual for details * Fix for windows to not open consoles for each external application - klo uo * Fix for windows to put config files under %APPDATA% - klo uo * Fix to have "update heading" toggle in rename dialog more intelligent - Virgil Dupras * Fix to make template errors report relevant error dialogs * Fix for search and replace whitespace in pageview * Various small fixes === 0.57 - Mon 8 Oct 2012 === * Ported zim background process to use the multiprocessing module - this fixes app-indicator issues under Ubuntu Unity - adds support for quicknote and other plugins on Windows * Reworked application framework and "open with" dialog, now also allows to set applications per URL scheme * New plugin for using GNU Lilypond to render music scores - Shoban Preeth * New Zeitgeist plugin - Marcel Stimberg * Added template method to iterate days of the week for a calendar page * Added pythonic syntax to access dicts to template modules * Added tasklist option to take into account a Mon-Fri work week * Fixed start of week and week number first week of the year for calendar plugin * Added "untagged" category to task list * Fixed strike out TODO label showing up in task list * Added template editor dialog * Added support for "forward" and "back" mouse buttons * Added support for exporting to ReST - Yao-Po Wang * Added new option to create and insert new attachments based on file template * Added an argument to the quicknote plugin to import attachments * Added icons per mimetype to the attachmentbrowser * Added statusbar button for attachment browser * Added monitors to watch attachment folder for updates * Fix drag&drop on non-existing folder in attachment browser * Fix drag&drop for attachment folder on windows * Made location of plugin widgets in side panes configurable and reworked key bindings for accessing side panes and toggling them * Made tags plugin to revert to standard index if no tag is selected * Page completion now matches anywhere in the basename -- patch by Mat * Patch to use sourceview in imagegenerator dialog - Kevin Chabowski * Fix for insert symbol dialog to insert without typing a space * Made image data pasted as bmp convert to png to make it more compact * Critical bug fix for version control plugin * Critical bug fix for xml.etree.TreeBuilder API for python 2.7.3 * Bug fix for exceptions in index - Fabian Moser * Bug fix for interwiki links * On windows fix for bug when home folder or user name contain non-ascii characters * Fixed help manual opens in compiled windows version * Fixed locale support on windows * Added translations for Brazilian Portuguese and Romanian === 0.56 - Mon 2 Apr 2012 === * Merged support for Git and Mercurial version control backends - Damien Accorsi & John Drinkwater * Merged plugin for "ditaa" diagrams - YPWang * Merged patch for different configuration profiles, allowing per notebook configuration of plugins, font etc. - Mariano Draghi * Added drag & drop support for the Attachment Browser plugin * Made sidepane and tagcloud remember state * Fixed critical bug for opening email adresses without "mailto:" prefix * Fixed bug where context menu for page index applied to the current page instead of the selected page * Added a Serbian translation === 0.55 - Tue 28 Feb 2012 === * Numbered lists are now supported * The index now has "natural" sorting, so "9" goes before "10" * Added new plugin to show a Table Of Contents per page, and allows modifying the outline * Added Markdown (with pandoc extensions) as an export format * New context menu item "move text" for refactoring text to a new page * Tasklist now supports a "next:" keyword to indicate dependencies, and it can hide tasks that are not yet actionable * Made zim taskbar icons and trayicon overloadable in theme - Andrei * Fixed behavior of Recent Pages pathbar in cases where part of the history is dropped * Fixed behavior of the Search dialog, it no longer hangs and also allows cancelling the search * Fixed bug where replacing a word (e.g spell correction) could drop formatting * Fixed behavior of case-sensitive rename on a case-insensitive file system (windows) === 0.54 - Thu 22 Dec 2011 === Bug fix release with minor feature enhancements * Added mono icons for the Ubuntu Unity panel * Tasklist plugin now supports hierarchic nested tasks * Added "automount" plugin to automatically mount notebook folders * Interwiki lookup now goes over all urls.list files in the path * Fixed bug that prevented clicking links in read-only mode * Fixed bug for parsing relative paths to parent pages e.g. in drag and drop * Fixed bug causing the index to jump with every page selection * Fixed bug causing the icon for custom tools to be missing in the toolbar * Fixed bug for drag and drop of files on windows * Fixed bug causing task list to reset when page is saved * Fixed autocomplete for page entry in quicknote * Fixed error in "you found a bug" error dialogs :S * Fixed issue in test suite for loading pixbufs * Added translation for Galician === 0.53 - Mon 19 Sep 2011 === * Cosmetic updates to entry widgets, the page index, the insert date dialog, and the tasklist dialog * Updated the find function to properly switch focus and highlight current match even when text does not have focus - Oliver Joos * Added function to remember the position of the main window across sessions and the position of dialog within a session - Oliver Joos * Added "interwiki keyword" to give shorthand for linking notebooks - Jiří Janoušek * Added template function to create a page index - Jiří Janoušek * Added support to include additional files with a template - Jiří Janoušek * Added preference for always setting the cursor position based on history or not * Added feature so images now can have a link target as well - Jiří Janoušek * Refactored index to do much less database commit actions, resulting in performance gain on slow storage media * Added "print to browser" button in the tasklist dialog * Added "--search" commandline option * Added feature for calendar plugin to use one page per week, month, or year instead of one page per day - Jose Orlando Pereira * Added feature to have implicit deadline for tasks defined on a calendar page - Jose Orlando Pereira * Added new plugin for evaluating inline arithmetic expressions - Patricio Paez * Added support for plugins to have optional dependencies - John Drinkwater * Added hook so plugins can register handlers for specific URL schemes * Upgraded test suite to unittest support shipped with python 2.7 * Increased test coverage for main window, dialogs, and image generator plugins * Many small typo fixes and code cleanup - Oliver Joos * Extensive updates for the developer API documentation - now using epydoc * Made file paths in config file relative to home dir where possible in order to facilitate portable version (e.g. home dir mapped to USB drive) * Build code updated to build new windows installer and support for portable install - Brendan Kidwell * Fixed build process to hardcode platform on build time (maemo version) * Fixed bug in notebook list, causing compiled version to be unable to set a default notebook (windows version) * Fixed bug with copy-pasting and drag-n-drop using relative paths * Fixed bug allowing to click checkboxes in read-only mode * Fixed several possible exceptions when moving pages * Fixed execution of python scripts on windows - Chris Liechti * Fix to preserve file attributes (like mtime) when copying attachments - Oliver Joos * Fixed path of checkbox images in html export - Jiří Janoušek * Fix for indexing error in scenario with external syncing (e.g. dropbox) * Fix for latex output to use "\textless{}" and "\textgreater{}" * Fixed Maemo window class, and python 2.5 compatibility - Miguel Angel Alvarez * Fixed unicode usage in template module - Jiří Janoušek * Fixed error handling for errors from bzr in versioncontrol plugin * Fixed error handling for errors due to non-utf-8 encoded text in pages === 0.52 - Thu 28 Apr 2011 === Bug fix release * Fixed a critical bug in the "Add Notebook" prompt for the first notebook on a fresh install and two minor bugs with the ntoebook list - Jiří Janoušek === 0.51 - Tue 19 Apr 2011 === * Fixed critical bug with resizing images - Stefan Muthers * Fixed bug preventing resizing of text entries in dialogs * Fixed bug disabling auto-completion for page names in dialogs * Fix so cancelling the preferences dialog will also reset plugins - Lisa Vitolo * Fix to switch sensitivity of items in the Edit menu on cursor position - Konstantin Baierer * Fix to handle case where document_root is inside notebook folder - Jiří Janoušek * Fixed support for interwiki links in export * Fixed "Link Map" plugin to actually support clicking on page names in the map * Fixed copy pasting to use plain text by default for external applications added preference to revert to old behavior * Disable <Alt><Space> keybinding due to conflicts with internationalization added hidden preference to get it back if desired * Added support for organizing pages by tags - Fabian Moser * Added feature to zoom font size of the page view on <Ctrl>+ / <Ctrl>- - Konstantin Baierer * Added support for system Trash (using gio if available) * Added Calendar widget to the "Insert Date" dialog * Added plugin to sort selected lines - NorfCran * Added plugin for GNUplot plots - Alessandro Magni === 0.50 - Mon 14 Feb 2011 === Maintenance release with many bug fixes. Biggest change is the refactoring of input forms and dialogs, but this is not very visible to the user. * Added custom tool option to get wiki formatted text * Added option to Task List plugin to mix page name elements with tags * Added style config for linespacing * Cursor is now only set from history when page is accessed through history * Updated latex export for verbatim blocks and underline format * Added basic framework for plugins to add widgets to the main window * Notebook list now shows folder path and icon - Stefan Muthers * Folder last inserted image is now remembered - Stefan Muthers * Preview is now shown when selecting icons files - Stefan Muthers * Image paths are now made relative when pasting image an file - Jiří Janoušek * Image data is now accepted on the clipboard directly - Stefan Muthers * Added overview of files to be deleted to Delete Page dialog to avoid acidental deletes * Added traceback log to "You found a bug" error dialog * Fixed critical bug for windows where zim tries to write log file to a non-existing folder * Fixed critical bug where text below the page title goes missing on rename * Fixed behavior when attaching files, will no longer automatically overwrite existing file, prompt user instead - Stefan Muthers * Fixed bug when opening notebooks through an inter-wiki link * Fixed support for month and year pages in Calendar namespace * Fixed support for wiki syntax in Quick Note dialog when inserting in page * Fixed bug in Task List plugin where it did not parse checkbox lists with a label above it as documented in the manual * Fixed bug with custom template in export dialog - Jiří Janoušek * Fixed bug with style config for tab size * Fixed many more smaller bugs * Rewrote logic for indented text and bullet lists, fixes remaining glitches in indent rendering and now allow formatting per bullet type * Refactored part of the Attachment Browser plugin, no longer depends on Image Magick for thumbnailing and added action buttons * Refactored code for input forms and decoupled from Dialog class * Refactore History class to use proper Path objects * Added significants amount of test coverage for dialog and other interface elements * Package description of zim was rewritten to be more readable * Added translation for Danish === 0.49 - Tue 2 Nov 2010 === * Added experimental Attachment Browser plugin - by Thorsten Hackbarth * Added Inline Calculator plugin * Made file writing logic on windows more robust to avoid conflicts * Fixed bug with unicode characters in notebook path * Fixed 'shared' property for notebooks * Patch to update history when pages are deleted or moved - by Yelve Yakut * Patch backporting per-user site-packages dir for python 2.5 - by Jiří Janoušek * Fix for bug with spaces in links in exported HTML - by Jiří Janoušek * Fixed bug forcing empty lines after an indented section * Patch for indenting in verbatim paragraphs - by Fabian Moser * Fixed bug with unicode handling for file paths * Added names for pageindex and pageview widgets for use in gtkrc * Patch to jump to task within page - by Thomas Liebertraut * Added option for setting custom applications in the preferences * Fixed printtobrowser plugin to use proper preference for web browser * Added default application /usr/bin/open for Mac * Imporved behavior of 'Edit Source' * Added checkbox to quicknote dialog to open the new page or not * Added support for outlook:// urls and special cased mid: and cid: uris * Added translations for Hungarian, Italian and Slovak === 0.48 - Thu 22 Jul 2010 === * Added support for sub- and superscript format - by Michael Mulqueen * Updated the export dialog to an Assistant interface * Renamed "Create Note" plugin to "Quick Note" * Improved the "Quick Note" plugin to support appending to pages and support templates * Fixed webserver to be available from remote hosts and to support files and attachments * Merged support for Maemo platform with fixes for zim on a small screen - by Miguel Angel Alvarez * Updated zim icon and artwork * Several fixes for latex export - by Johannes Reinhardt * Fixed inconsistency in formatting buttons for selections * Fixed bug that prevented adding custom tools without icon * Fixed bug with deleting directories on windows * Added translations for Catalan, Croatian and Slovak === 0.47 - Sun 6 Jun 2010 === Big release with lots of new functionality but also many bug fixes * Significant performance improvements for the page index widget * Task list plugin now uses the index database to store tasks, this makes opening the dialog much faster. Also the dialog is updated on synchronous as soon as changes in the current page are saved. * Added support for "TODO" and "FIXME" tags in task list plugin, as a special case headers above checkbox lists are supported as well * Added "create note" dialog to quickly paste text into any zim notebook, it is available from the trayicon menu and can be called by a commandline switch * Support added for new "app-indicator" trayicon for Ubuntu 10.4 * Added support to start trayicon by a commandline switch * Option added to reformat wiki text on the fly (Johannes Reinhardt) * Attach file dialog can now handle multiple files at once (Johannes Reinhardt) * Layout for linkmap improved by switching to the 'fdp' renderer * Added new plugin "Insert Symbols" for inserting e.g. unicode characters * Added new plugin to insert and edit plots using GNU R (Lee Braiden) * Added scripts needed to build a windows installer and fixed various issues relating to proper operation of zim when compiled as windows executable * Added option to delete links when deleting a page or placeholder * Added option to "move" placeholder by updating links * Fixed bug with interwiki links to other notebooks * Fixed various bugs due to unicode file names on windows and non-utf8 filesystems on other platforms * Fixed bug with non-utf8 unicode in urls * Fixed bugs with calendar plugin when embedded in side pane * Fixed support for icons for custom tools * Fixed bug with indented verbatim blocks (Fabian Moser) * Added translation for Traditional Chinese === 0.46 - Wed 24 Mar 2010 === Bug fix release * Fixed critical bug preventing the creation of new pages. === 0.45 - Tue 23 Mar 2010 === This release adds several new features as well as many bug fixes. * Added possiblility to add external applications to the menu as "custom tools" * Added Latex as export format - patch by Johannes Reinhardt * Improved dependency checks for plugins - patch by Johannes Reinhardt * Improved application responsiveness by using threading for asynchronous i/o * Fixed memory leak in the index pane for large notebooks * Fixed drag-n-drop support for images * Fixed index, previous and next pages in export templates * Fixed backlinks in export templates * Improved fallback for determining mimetype without XDG support * Added translations for Hebrew, Japanese and Turkish === 0.44 - Wed 17 Feb 2010 === This release adds improved query syntax for search and several bug fixes * Implemented more advanced search syntax - see manual for details * Implemented recursive checkbox usage and recursive indenting bullet lists * Merged "Insert Link" and "Insert External Link" dialogs * Added options to insert attached images and attach inserted images * Support for recognizing image attachment on windows * Fixed bug for lower case drive letters in windows paths * Fixed bug with non-date links in the calendar namespace * Fixed bug with invalid page names during move page * Fixed bugs with unicode in search, find, task list tags, auto-linking pages and in url encoding * Several fixes in behavior of the page index widget * Added translations for Russian and Swedish === 0.43 - Sun 17 Jan 2010 === This is a bug fix release with fixes for most important issues found in 0.42 * Added update method for data format for older notebooks * Fixed bug with duplicates showing in the index * Fixed bug with indexing on first time opening a notebook * Fixed bug with format toggle buttons in the toolbar * Fixed bug with permissions for files created by zim * Fixed bug with selection for remove_link * Fixed bug with default path for document_root * Fixed bug with updating links to children of moved pages * Added strict check for illegal characters in page names * Improved PageEntry to highlight illegal page names * Improved user interaction for Edit Link and Insert Link dialogs * Trigger Find when a page is opened from the Search dialog * Allow selecting multiple tags in Task List plugin * Allow negative queries in Task List, like "not @waiting" * Checkbox icons are now included in export * Fixed import of simplejson for pyton 2.5 specific * Translations added for: English (United Kingdom), Greek and Polish === 0.42 - Sun 10 Jan 2010 === This is the first release after a complete re-write of zim in python. Functionality should be more or less similar to Perl branch version 0.28, but details may vary. Additional issues addressed in this release: * Moving a page also moves sub-pages and attachments * Deleting a page also deletes sub-pages and attachments * After deleting a page the user is moved away from that page * Wrapped lines in bullet lists are indented properly * Better desktop integration using the default webbrowser and email client * Added a web-based interface to read zim notebooks * Task List now supports tags * Distinguishing between "move page" and "rename page" * Menu actions like "Rename Page (F2)" now follow the focus and work in the side pane as well * Page title can be updated automatically when moving a page * "Link" action behaves more like inserting an object instead of applying formatting * File links are now inserted showing only the basename of the file * Dialogs spawned from another dialog will pop over it * Dialogs remember their window size * Allow user to quit individual notebooks even when the tray icon is in effect * Check for pages that are changed offline now employs MD5 sum to be more robust Translations available for: Dutch, Estonian, Czech, French, German, Korean, Ukrainian, Simplified Chinese and Spanish ������������������������������������������������������������������������������������������zim-0.65/makeman.py���������������������������������������������������������������������������������0000664�0001750�0001750�00000003150�12374655231�014107� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg <jaap.karssenberg@gmail.com> import os from time import strftime from zim import __version__, __url__, \ __author__, __copyright__, __license__ from zim.main import HelpCommand def get_about(): '''Get the tagline and short description from the README''' readme = open('README.txt') lines = [] for line in readme: if line.startswith('===') and 'ABOUT' in line: for line in readme: if line.startswith('==='): break else: lines.append(line) break lines = ''.join(lines).strip().splitlines(True) assert lines and lines[0].startswith('Zim - ') tagline = lines[0][6:].strip() about = ''.join(lines[1:]).strip() return tagline, about def make(): '''Generate man page for zim''' tagline, about = get_about() try: os.mkdir('man') except OSError: pass # dir already exists manpage = open('man/zim.1', 'w') manpage.write('.TH ZIM "1" "%s" "zim %s" "User Commands"\n' % (strftime('%B %Y'), __version__)) manpage.write('.SH NAME\nzim \\- %s\n\n' % tagline) manpage.write('.SH SYNOPSIS\n%s\n' % HelpCommand.usagehelp.replace('-', r'\-')) manpage.write('.SH DESCRIPTION\n%s\n' % about) manpage.write('.SH OPTIONS\n%s\n' % HelpCommand.optionhelp.replace('-', r'\-')) manpage.write('.SH AUTHOR\n%s\n\n' % __author__) manpage.write( '''\ .SH "SEE ALSO" The full documentation for .B zim is maintained as a zim notebook. The command .IP .B zim --manual .PP should give you access to the complete manual. The website for .B zim can be found at .I %s ''' % __url__) manpage.close() if __name__ == '__main__': make() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/�����������������������������������������������������������������������������������0000775�0001750�0001750�00000000000�12615422672�013170� 5����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/Gtk_and_GObject_and_signals.txt����������������������������������������������������0000664�0001750�0001750�00000005001�12374655231�021234� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2014-07-31T21:07:55+02:00 ====== Gtk and GObject and signals ====== Zim is build on top of pygtk and pygobject. However, the classes outside the 'gui' namespace are not allowed to use the gtk libraries, and should work when only gobject is available. This potentially allows zim to run without a graphical interface, also it gives a strict boundry between UI and data layers in the class hierarchy. The exception are modules in the 'plugin' namespace, which can of course package their own UI components. However, these should check on initialization if we are running in graphical mode or not. Zim should be able to run at systems with at least Gtk+ version 2.6, however up to date systems can be expected to have at least Gtk+ version 2.20 or newer. Therefore Gtk+ 2.20 is required to use all functionality. This means that you can use features not available for Gtk < 2.20 but you should wrap them in a block that checks the Gtk version first. Critical functions that can not be disabled should not rely on Gtk > 2.6. Note that the Gtk API documentation specifies what version a function was introduced (if not specified it can be assumed to be present in all 2.x versions). ===== Signals ===== Keep in mind that with each "**connect()**" an object reference is created. The reference is kept by the object that is being connected to and is only broken when that object is being destroyed. So if you do object_A.connect('some-signal', object_B.some_method) then object_B will not be destroyed as long as object_A is alive. On the other hand, if object_A is destroyed, object_B simply doesn't get any signals anymore. This seems not to be a problem when you e.g. connect a button signal within a dialog object. Reason is probably that the circular reference is broken when the dialog is destroyed. But it is a problem when e.g. a dialog connects to an external object, or a plugin connect to the main interface objects. In those cases signals need to be explicitly disconnected when you close the dialog or remove the plugin. See the **ConnectorMixin** class in zim.signals for some convenience methods for dealing with this. A special not about **connect_object()**. In the Python API it looks like this method is only intended to swap the object argument when calling the callback, however in the C API it is mentioned that this method also results in an additional object reference and it has a bug in current versions with cleaning up those references. So it is better avoided. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/objects.dot������������������������������������������������������������������������0000664�0001750�0001750�00000000740�12374655231�015333� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������digraph g { node [shape = box] main [shape = diamond] cgibin [label = "cgi-bin" shape = diamond] main -> GUIClient GUIClient -> GUIDeamon -> GtkInterface GtkInterface -> Notebook Notebook -> Page Notebook -> Namespace GtkInterface -> MainWindow MainWindow -> PageView MainWindow -> PageIndex main -> Server [label = "--server"] cgibin -> Handler -> WWWInterface Server -> WWWInterface WWWInterface -> Notebook Server -> ServerWindow [label ="--gui"] } ��������������������������������zim-0.65/HACKING/Test_Suite.txt���������������������������������������������������������������������0000664�0001750�0001750�00000003671�12374655231�016031� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2011-05-13T23:18:07+02:00 ====== Test Suite ====== Zim comes with a full test suite, it can be executed using the "''test.py''" script. See "''test.py --help''" for it's commandline options. It is good practice to run the full suite before committing to a development branch and especially before generating a merge request. This should ensures the new patch doesn't break any existing code. For any but the most trivial fixes test cases should be written to ensure the functionality works as designed and to avoid breaking it again at a later time. You'll surprise how often the same bug comes back after some time if there is now test case is in place to detect it. Some bugs are just waiting to happen again and again. For writing tests have a look at the existing test code or check the documentation for the "unittest" module in the python library. (For python versions < 2.7 we use the "unittest2" module, which backports some new features for older python versions.) A most useful tool for developing tests is looking at test **coverage**. When you run "''test.py''" with the "''--coverage''" option the "coverage" module will be loaded and a set of html pages will be generated in "''./coverage''". In these pages you can see line by line what code is called during the test run and what lines of code go untested. It is hard to really get to 100% coverage, but the target should be to get the coverage above at least 80% for each module. If you added e.g. a new class and wrote a test case for it have a look at the coverage to see what additional tests are needed to cover all code. Of course having full coverage is no guarantee we cover all possible inputs, but looking at coverage combined with writing tests for reported bugs makes a strong test suite. Even if the test suite only catches the most simple bugs that users would see when first using the application it is worth the effort. �����������������������������������������������������������������������zim-0.65/HACKING/Writing_plugins.txt����������������������������������������������������������������0000664�0001750�0001750�00000003615�12403654473�017123� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: Wed, 24 Jun 2009 23:42:30 +0200 ====== Writing plugins ====== This page collects random notes on writing plugins. **NOTE:** Under the GPL license used for distributing this program all plugins should also be licensed under the GPL. A closed source plugin extension is not allowed. A plugin is allowed to call any non-GPL program as long as the plugin itself is under GPL and the non-GPL program runs as a separate process with a clearly defined inter process communication interface. ===== Writing a new plugin ===== See the module documentation in ''zim.plugins'' for documentation of the plugin framework. ===== How to package ===== Plugins are simply sub-modules of the "zim.plugins" python package. So installing your plugin module in the same folder as the zim modules would do the trick to have zim find the plugin. However to make it easier to install local plugins, also the ''$XDG_DATA_HOME/zim/plugins'' folder and all ''$XDG_DATA_DIRS/zim/plugins'' are add to the search path. By default the home folder would be ''~/.local/share/zim/plugins''. The best for packaging is then is to organize your plugin as a folder with a "''__init__.py''" containing the main plugin class. Users can then directly unpack this folder to "''~/.local/share/zim/plugins''" or directly branch your github or bazaar branch to this location. ===== Manual page ===== Each plugin should have it's own page in the user manual that explains what it does and how to use it. Please write it before proposing your plugin to be included in the main package. ===== Unit testing ===== As stated in the guidelines [[Test Suite|unittesting]] is good. Please try to write some test cases for your plugin before proposing it to be included in the main package. Other developers may not use your plugin, so if it breaks later on it may go undetected unless there is a test case for it. �������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/Translation_Guidelines.txt���������������������������������������������������������0000664�0001750�0001750�00000001147�12374655231�020403� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2012-09-30T13:08:38+02:00 ====== Translation Guidelines ====== ===== Italian ===== A few remarks for Italian contributors. Please notice that these choices were made earlier and we should respect them in order to assure consistency. It doesn't mean that they're better than others. It's a just matter of stop discussing and choosing one option instead of another. :) plugin = estensione Please... = si elimina sempre pane = pannello (non riquadro) zim = lo mettiamo sempre in maiuscolo, Zim //Mailing list post by Marco Cevoli, Aug 29, 2012// �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/.zim/������������������������������������������������������������������������������0000775�0001750�0001750�00000000000�12615422672�014045� 5����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/.zim/index.db����������������������������������������������������������������������0000644�0001750�0001750�00000044000�12615420657�015460� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������SQLite format 3���@ �����������������Q��������������������������������������������������-������� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������  ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#localeen_US.UTF-8#zim_version0.64 [��s�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �3u ����Working with Bazaar221a1d1614191222141f130d0c250c0c1d0109090909090909090909090909090909090109090909090909090909090909090909090108350535A֦y1�����������������������m �%% ����Coding Tools0e1a0f1419121f1a1a171e010909090909090909090909010909090909090909090909010735AՍkᔁP �CM ����Gtk and GObject and signals121f160c190f121a0d15100e1f0c190f1e1412190c171e010909090909090909090909090909090909090909090909010909090909090909090909090909090909090909090909010435043508350435A֦y1I �i ����HACKING130c0e1614191201090909090909090109090909090909A֦y1������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������  �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���� m��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@etablemetametaCREATE TABLE meta ( key TEXT, value TEXT )ktablepagespagesCREATE TABLE pages ( id INTEGER PRIMARY KEY, basename TEXT, sortkey TEXT, parent INTEGER DEFAULT '0', hascontent BOOLEAN, haschildren BOOLEAN, type INTEGER, ctime TIMESTAMP, mtime TIMESTAMP, contentkey FLOAT, childrenkey FLOAT )^ tablepagetypespagetypesCREATE TABLE pagetypes ( id INTEGER PRIMARY KEY, label TEXT )tablelinkslinksCREATE TABLE links ( source INTEGER, href INTEGER, type INTEGER, CONSTRAINT uc_LinkOnce UNIQUE (source, href, type) ) S� ��WA}�H�������������������������������������������������������������������������������������������������������������������������������������& !!tablepropertiespropertiesCREATE TABLE properties ( page INTEGER, property INTEGER, value TEXT, CONSTRAINT uc_PropertyOnce UNIQUE (page, property, value) )3 G!�indexsqlite_autoindex_properties_1properties ''otablepropertynamespropertynamesCREATE TABLE propertynames ( id INTEGER PRIMARY KEY, name TEXT, CONSTRAINT uc_PropertyNameOnce UNIQUE (name) )9 M'�indexsqlite_autoindex_propertynames_1propertynames���)=�indexsqlite_autoindex_links_1links^ tablelinktypeslinktypesCREATE TABLE linktypes ( id INTEGER PRIMARY KEY, label TEXT )]tabletagstags CREATE TABLE tags ( id INTEGER PRIMARY KEY, name TEXT, sortkey TEXT )!!Ytabletagsourcestagsources CREATE TABLE tagsources ( source INTEGER, tag INTEGER, CONSTRAINT uc_TagOnce UNIQUE (source, tag) )3 G!�indexsqlite_autoindex_tagsources_1tagsources �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ����3�'��3��������������������������� �/a ����Release checklist1d1017100c1e100e13100e1617141e1f01090909090909090909090909090909090109090909090909090909090909090909010835A +_ �! ����Test Suite1f101e1f1e20141f100109090909090909090901090909090909090909010535A֦y1 �+I ����Writing plugins221d141f1419121b17201214191e010909090909090909090909090909010909090909090909090909090909010835AN8I �i ����Unicode2019140e1a0f1001090909090909090109090909090909A֦y13 �9 ����Translation Guidelines1f1d0c191e170c1f141a191220140f10171419101e0109090909090909090909090909090909090909090901090909090909090909090909090909090909090909010c35A֦y1f �# ����LIMITATIONS171418141f0c1f141a191e010909090909090909090909010909090909090909090909A֦y1R �CQ ����Coding Style and Guidelines0e1a0f1419121e1f2417100c190f1220140f10171419101e010909090909090909090909090909090909090909090909090109090909090909090909090909090909090909090909090901073506350435A_tµ �  ����A_tkzim-0.65/HACKING/.zim/state.conf��������������������������������������������������������������������0000664�0001750�0001750�00000002523�12615420657�016037� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[History] list=[["HACKING",0,null],["Coding Style and Guidelines",1666,null],["Gtk and GObject and signals",0,null],["HACKING",0,null],["LIMITATIONS",0,null],["Test Suite",0,null],["Translation Guidelines",0,null],["Unicode",0,null],["Working with Bazaar",0,null],["Writing plugins",0,null],["Coding Tools",520,null]] recent=[["Coding Style and Guidelines",1666,null],["Gtk and GObject and signals",0,null],["HACKING",0,null],["LIMITATIONS",0,null],["Test Suite",0,null],["Translation Guidelines",0,null],["Unicode",0,null],["Working with Bazaar",0,null],["Writing plugins",0,null],["Coding Tools",520,null]] current=10 [MainWindow] windowpos=(0, 27) windowsize=(1366, 713) windowmaximized=True active_tabs=null show_menubar=True show_menubar_fullscreen=False show_toolbar=True show_toolbar_fullscreen=False show_statusbar=True show_statusbar_fullscreen=False pathbar_type=recent pathbar_type_fullscreen=none toggle_panes=[] left_pane=[true,200,"Index"] right_pane=[false,200,"BackLinks"] top_pane=[false,200,null] bottom_pane=[false,191,"Attachments"] readonly=False [AttachmentBrowserPlugin] icon_size=64 [SpellPlugin] active=False [TagsPlugin] treeview=tagged tagcloud_sorting=score show_full_page_name=True vpane_pos=150 [BookmarksBarPlugin] show_full_page_name=False bookmarks=[] bookmarks_names={} show_bar=True [NewPageDialog] windowsize=(358, 208) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/Coding_Tools.txt�������������������������������������������������������������������0000664�0001750�0001750�00000001174�12615420656�016317� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2015-11-01T15:25:36+01:00 ====== Coding Tools ====== Created Sunday 01 November 2015 Some usefull sctipts are found in the ''./tool/'' folder of the source archive. When you want to setup an environment for continuous testing while working on the source code, try using ''./tools/test_file.py'' . This tool maps the source file to the test suite and runs the appropriate unittests for this file. Of course it is good practise to run the whole suite before checking in a new feature, but running the tests per source file will definitely help with rapid development. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/Unicode.txt������������������������������������������������������������������������0000664�0001750�0001750�00000002776�12374655231�015334� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2013-04-08T20:55:50+02:00 ====== Unicode ====== Zim uses unicode everywhere internally. ===== Encoding ===== Main interfaces where we need to encode / decode are: * File paths — platform and locale dependent — handled by ''zim/fs.py'' * File contents — default to utf-8 — handled by ''zim/fs.py'' * Gtk widgets — utf-8 — handle by ''zim/gui/widgets.py'' for standard widgets ===== Collation (sorting) ===== See ''zim/utils.py'' for unicode / locale aware sorting ===== Comparison ===== Some characters can be encoded either as a single character or as a combination of a base character with symbols above or below it. For example the Ü can be either the "U with umlaut" character, or a "U" followed by a "umlaut above previous character". While visually the same for the user these are different unicode strings that do not compare equally. There is a standard function to "normalize" unicode strings in the standard library "''unicodedata''" module. If we could standardize all strings after decoding, there would be less risk of comparisons failing. However strings identifying external resources, like file names, need to be in the same normalization as they are known to the outside world. Therefore we have to deal with normalization in specific places when comparing strings or looking up strings. Notable places to do this is: * When matching user input from a widget with a set of options * When looking up files from use input * ... ? ��zim-0.65/HACKING/notebook.zim�����������������������������������������������������������������������0000664�0001750�0001750�00000000213�12374655231�015526� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Notebook] version=0.4 name=HACKING interwiki= home=HACKING icon= document_root= shared=False endofline=unix disable_trash=False profile= �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/Working_with_Bazaar.txt������������������������������������������������������������0000664�0001750�0001750�00000001211�12374655231�017660� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2014-07-31T21:05:49+02:00 ====== Working with Bazaar ====== The zim code is kept under version control using the bazaar version control system. See the website for documentation on using this system: http://bazaar.canonical.com/en/ The quick course, to get a copy of the zim code: bzr branch lp:zim To check in some changes (don't forget to give some meaningful changelog) bzr add bzr commit To create a patch that can be mailed: bzr send -o some-description.patch Alternatively you can publish your branch directly on the launchpad website and file a merge proposal. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/HACKING.txt������������������������������������������������������������������������0000664�0001750�0001750�00000002012�12374655231�014771� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2014-07-31T20:56:17+02:00 ====== HACKING ====== This notebook contains random notes and thoughts that may be useful when you want to change source code for zim. It is not a complete tutorial or something like that for working with the zim object API. In fact all real API documentation can be found directly in the python modules. Anyway, the code is always the most up to date documentation for development. When you are working with the development code check the folder "./tools/" for some useful scripts. In addition we use the following resources to communicate on zim development: Bug tracker: https://bugs.launchpad.net/zim Also for feature requests Development wiki: http://www.zim-wiki.org/wiki/ Has e.g. the planning for some of the developers Mailing list: https://launchpad.net/~zim-wiki For all your questions IRC Channel: #zim-wiki on Freenode IRC network. (Access from your web browser at https://webchat.freenode.net/?channels=%23zim-wiki .) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/Release_checklist.txt��������������������������������������������������������������0000664�0001750�0001750�00000003207�12412551246�017337� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2010-03-24T21:47:03.883720 ====== Release checklist ====== Preliminary: * Go over all bugs in the tracker to check if status is still correct, any new patches are attached * Also check bugs in the debian bug tracker * Announce to mailing list what day the release will be, so translaters can update their translations **Don't allow any last minute patches on the same day as the release -- stupid mistakes will happen and force a bug fix release the next day.** Merge translations: * Request download from launchpad * Merge it with ''tools/import-launchpad-translations.py'' Prepare the package: * Set version in ''zim/__init__.py'' * Update CHANGELOG.txt -- see `''bzr visualize''` for changes * Update debian changes -- run e.g. `''debchange -v 0.46''` * Optionally merge branch with website updates since previous release * Update version number in website downloads page Check the package: * `''./setup.py sdist''` (updates meta data etc.) * `make builddeb` and check `''lintian -Ivi ../zim_0.46_i386.changes''` * Test website with ./tools/test_website.py * Run `''make clean''` and check `''bzr st''` for any remaining build files Finalize the revision: * run ''./test.py'' for the last time * commit + tag + push Build release packages: * `''./setup.py sdist''` (updates meta data etc.) * `''make builddeb''` + `''make clean''` * ''./tools/build_website.sh'' * Update build recipe for PPA with latest tag * Request build for PPA with releases Publish the release: * Upload website * Upload tar.gz and deb packages * Write release notes * Announce on launchpad * Announce on mailing list �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/Coding_Style_and_Guidelines.txt����������������������������������������������������0000664�0001750�0001750�00000003412�12537351713�021306� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2014-07-31T21:06:39+02:00 ====== Coding Style and Guidelines ====== Created Thursday 31 July 2014 See the python style guide for best practices. Some items to keep in mind: * GUI classes are only allowed to construct widgets and wire signals. Any actual manipulation of pages, notebooks etc. should go elsewhere. * Signal handlers have a method name starting with "do_" * Only use "assert" for checks that could be removed when code is stable, these statements could be optimized away * Do not rely on ''__doc__'' on run time, this data could be optimized away * Have a look e.g. at zim.parsing and zim.gui.widgets for common code snippets **Other general guidelines** * Writing test cases is good, full test coverage is better. Run "./test.py --cover" to get a coverage report. * Wait with loading modules and constructing widgets untill they are really needed, this should keep startup speed reasonable * Try to do slow operations that could be done asynchronous using the idle event or a thread, e.g loading the side pane index, or a list with search results, or even running an external command to check in a new version of a file. **Source code formatting** * I use TABs (not spaces) with a tabstop set to the equivalent of 4 spaces, (most) lines should fit within 80 character with this setting. **Documentation** * Please add at at least docstrings for each public method with a short explanation what the method does. Docstrings should be formatted using the epydoc markup style, see: http://epydoc.sourceforge.net/ * There are a few custom fields used in the zim documentation: ''' @signal: signal-name (param1, param2): description @emits: signal @implementation: must implement / optional for sub-classes ''' ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/HACKING/LIMITATIONS.txt��������������������������������������������������������������������0000664�0001750�0001750�00000000755�12374655231�015535� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2014-07-31T21:09:29+02:00 ====== LIMITATIONS ====== Main assumption about the whole file handling and page rendering is that files are small enough that we can load them into memory several times. This seems a valid assumption as notebooks are spread over many files. Having really huge files with contents is outside the scope of the design. If this is what you want to do, you probably need a more heavy duty text editor. �������������������zim-0.65/zim/���������������������������������������������������������������������������������������0000775�0001750�0001750�00000000000�12615422672�012723� 5����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/�������������������������������������������������������������������������������0000775�0001750�0001750�00000000000�12615422672�014404� 5����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/bookmarksbar.py����������������������������������������������������������������0000664�0001750�0001750�00000037763�12605533173�017451� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2015 Pavel_M <plprgt@gmail.com>. # This plugin is for Zim program by Jaap Karssenberg <jaap.karssenberg@gmail.com>. # # This plugin uses an icon from Tango Desktop Project (http://tango.freedesktop.org/) # (the Tango base icon theme is released to the Public Domain). import gobject import gtk import pango from zim.actions import toggle_action, action from zim.plugins import PluginClass, extends, WindowExtension from zim.notebook import Path from zim.gui.widgets import TOP, TOP_PANE from zim.signals import ConnectorMixin from zim.gui.pathbar import ScrolledHBox from zim.gui.clipboard import Clipboard import logging logger = logging.getLogger('zim.plugins.bookmarksbar') # Constant for max number of bookmarks in the bar. MAX_BOOKMARKS = 15 # Keyboard shortcut constants. BM_TOGGLE_BAR_KEY ='F4' BM_ADD_BOOKMARK_KEY ='<alt>1' class BookmarksBarPlugin(PluginClass): plugin_info = { 'name': _('BookmarksBar'), # T: plugin name 'description': _('''\ This plugin provides bar for bookmarks. '''), # T: plugin description 'author': 'Pavel_M', 'help': 'Plugins:BookmarksBar',} plugin_preferences = ( # key, type, label, default ('save', 'bool', _('Save bookmarks'), True), # T: preferences option ('add_bookmarks_to_beginning', 'bool', _('Add new bookmarks to the beginning of the bar'), False), # T: preferences option ) @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' <ui> <menubar name='menubar'> <menu action='view_menu'> <placeholder name='plugin_items'> <menuitem action='toggle_show_bookmarks'/> </placeholder> </menu> <menu action='tools_menu'> <placeholder name='plugin_items'> <menuitem action='add_bookmark'/> </placeholder> </menu> </menubar> <toolbar name='toolbar'> <placeholder name='tools'> <toolitem action='toggle_show_bookmarks'/> </placeholder> </toolbar> </ui>''' def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.widget = BookmarkBar(self.window.ui, self.uistate, self.window.pageview.get_page) self.widget.show_all() # Add a new option to the Index popup menu. try: self.widget.connectto(self.window.pageindex.treeview, 'populate-popup', self.on_populate_popup) except AttributeError: logger.error('BookmarksBar: popup menu not initialized.') # Show/hide bookmarks. self.uistate.setdefault('show_bar', True) self.toggle_show_bookmarks(self.uistate['show_bar']) # Init preferences in self.widget. self.widget.on_preferences_changed(plugin.preferences) self.widget.connectto(plugin.preferences, 'changed', lambda o: self.widget.on_preferences_changed(plugin.preferences)) def teardown(self): if self.widget: try: self.window.remove(self.widget) except ValueError: pass self.widget.disconnect_all() self.widget = None def hide_widget(self): '''Hide Bar.''' self.window.remove(self.widget) def show_widget(self): '''Show Bar.''' self.window.add_widget(self.widget, (TOP_PANE, TOP)) def on_populate_popup(self, treeview, menu): '''Add 'Add Bookmark' option to the Index popup menu.''' path = treeview.get_selected_path() if path: item = gtk.SeparatorMenuItem() menu.prepend(item) item = gtk.MenuItem(_('Add Bookmark')) # T: menu item bookmark plugin page = self.window.ui.notebook.get_page(path) item.connect('activate', lambda o: self.widget.add_new_page(page)) menu.prepend(item) menu.show_all() @toggle_action(_('Bookmarks'), stock='zim-add-bookmark', tooltip = 'Show/Hide Bookmarks', accelerator = BM_TOGGLE_BAR_KEY) # T: menu item bookmark plugin def toggle_show_bookmarks(self, active): ''' Show/hide the bar with bookmarks. ''' if active: self.show_widget() else: self.hide_widget() self.uistate['show_bar'] = active @action(_('Add Bookmark'), accelerator = BM_ADD_BOOKMARK_KEY) # T: menu item bookmark plugin def add_bookmark(self): ''' Function to add new bookmarks to the bar. Introduced to be used via keyboard shortcut. ''' self.widget.add_new_page() class BookmarkBar(gtk.HBox, ConnectorMixin): def __init__(self, ui, uistate, get_page_func): gtk.HBox.__init__(self) self.ui = ui self.uistate = uistate self.save_flag = False # if True save bookmarks in config self.add_bookmarks_to_beginning = False # add new bookmarks to the end of the bar self._get_page = get_page_func # function to get current page # Create button to add new bookmarks. self.plus_button = IconsButton(gtk.STOCK_ADD, gtk.STOCK_REMOVE, relief = False) self.plus_button.connect('clicked', lambda o: self.add_new_page()) self.plus_button.connect('button-release-event', self.do_plus_button_popup_menu) self.pack_start(self.plus_button, expand = False) # Create widget for bookmarks. self.container = ScrolledHBox() self.pack_start(self.container, expand = True) # Toggle between full/short page names. self.uistate.setdefault('show_full_page_name', False) # Save path to use later in Cut/Paste menu. self._saved_bookmark = None self.paths = [] # list of bookmarks as string objects self.uistate.setdefault('bookmarks', []) # Add pages from config to the bar. for path in self.uistate['bookmarks']: page = self.ui.notebook.get_page(Path(path)) self.add_new_page(page, reload_bar = False) self.paths_names = {} # dict of changed names of bookmarks self.uistate.setdefault('bookmarks_names', {}) # Function to transform random string to paths_names format. self._convert_path_name = lambda a: ' '.join(a[:25].split()) # Add alternative bookmark names from config. for path, name in self.uistate['bookmarks_names'].iteritems(): if path in self.paths: try: name = self._convert_path_name(name) self.paths_names[path] = name except: logger.error('BookmarksBar: Error while loading path_names.') self._reload_bar() # Delete a bookmark if a page is deleted. self.connectto(self.ui.notebook.index, 'page-deleted', lambda obj, path: self.delete(path.name)) def add_new_page(self, page = None, reload_bar = True): ''' Add new page as bookmark to the bar. :param page: L{Page}, if None takes currently opened page, :reload_bar: if True reload the bar. ''' if not page: page = self._get_page() if page.exists(): return self._add_new(page.name, self.add_bookmarks_to_beginning, reload_bar) def _add_new(self, path, add_bookmarks_to_beginning = False, reload_bar = True): '''Add bookmark to the bar. :param path: path as a string object :param add_bookmarks_to_beginning: bool, add new bookmarks to the beginning of the bar, :reload_bar: if True reload the bar. ''' if path in self.paths: logger.debug('BookmarksBar: path is already in the bar.') # Temporary change icon for plus_button to show # that bookmark is already in the bar. def _change_icon(): '''Function to be called only once.''' self.plus_button.change_state() return False self.plus_button.change_state() gobject.timeout_add(300, _change_icon) return False # Limit max number of bookmarks. if len(self.paths) >= MAX_BOOKMARKS: logger.debug('BookmarksBar: max number of bookmarks is achieved.') return False # Add a new bookmark to the end or to the beginning. if add_bookmarks_to_beginning: self.paths.insert(0, path) else: self.paths.append(path) if reload_bar: self._reload_bar() def delete(self, path): ''' Remove one button from the bar. :param path: string corresponding to Path.name. ''' if path in self.paths: self.paths.remove(path) self.paths_names.pop(path, None) self._reload_bar() def delete_all(self, ask_confirmation = False): ''' Remove all bookmarks. :param ask_confirmation: to confirm deleting. ''' def _delete_all(): self.paths = [] self.paths_names = {} self._reload_bar() if ask_confirmation: # Prevent accidental deleting of all bookmarks. menu = gtk.Menu() item = gtk.MenuItem(_('Do you want to delete all bookmarks?')) # T: message for bookmark plugin item.connect('activate', lambda o: _delete_all()) menu.append(item) menu.show_all() menu.popup(None, None, None, 3, 0) else: _delete_all() def change_bookmark(self, old_path, new_path = None): ''' Change path in bookmark from 'old_path' to 'new_path'. :param new_path, old_path: strings corresponding to Path.name. If 'new_path' == None takes currently opened page. ''' if not new_path: page = self._get_page() if page.exists(): new_path = page.name if new_path and (new_path not in self.paths) and (new_path != old_path): self.paths[self.paths.index(old_path)] = new_path self.paths_names.pop(old_path, None) self._reload_bar() def move_bookmark(self, first, second, direction): ''' Move bookmark 'first' to the place near the bookmark 'second'. :param first, second: strings corresponding to Path.name. :param direction: move 'first' bookmark to the 'left' or 'right' of the 'second'. ''' if (first == second) or (direction not in ('left','right')): return False if (first in self.paths) and (second in self.paths): self.paths.remove(first) ind = self.paths.index(second) if direction == 'left': self.paths.insert(ind, first) else: # direction == 'right' self.paths.insert(ind + 1, first) self._reload_bar() def rename_bookmark(self, button): ''' Change label of the button. New name is taken from the clipboard. If button's name has been changed before, change it back to its initial state. ''' _full, _short = button.zim_path, self._get_short_page_name(button.zim_path) if button.get_label() in (_short, _full): # Change the button to new name. new_name = None try: # Take from clipboard. new_name = self._convert_path_name(Clipboard.get_text()) except: logger.error('BookmarksBar: Error while converting from buffer.') if new_name: self.paths_names[_full] = new_name button.set_label(new_name) else: # Change the button back to its initial state. new_name = _full if self.uistate['show_full_page_name'] else _short button.set_label(new_name) self.paths_names.pop(_full, None) if self.save_flag: self.uistate['bookmarks_names'] = self.paths_names def do_plus_button_popup_menu(self, button, event): '''Handler for button-release-event, triggers popup menu for plus button.''' if event.button == 3: menu = gtk.Menu() item = gtk.CheckMenuItem(_('Show full Page Name')) # T: menu item for context menu item.set_active(self.uistate['show_full_page_name']) item.connect('activate', lambda o: self.toggle_show_full_page_name()) menu.append(item) menu.show_all() menu.popup(None, None, None, 3, 0) return True def do_bookmarks_popup_menu(self, button, event): '''Handler for button-release-event, triggers popup menu for bookmarks.''' if event.button != 3: return False path = button.zim_path _button_width = button.size_request()[0] direction = 'left' if (int(event.x) <= _button_width/2) else 'right' def set_save_bookmark(path): self._saved_bookmark = path if button.get_label() in (path, self._get_short_page_name(path)): rename_button_text = _('Set New Name') # T: button label else: rename_button_text = _('Back to Original Name') # T: button label # main popup menu main_menu = gtk.Menu() main_menu_items = ( (_('Remove'), lambda o: self.delete(path)), # T: menu item (_('Remove All'), lambda o: self.delete_all(True)), # T: menu item ('separator', ''), (_('Open in New Window'), lambda o: self.ui.open_new_window(Path(path))), # T: menu item ('separator', ''), ('gtk-copy', lambda o: set_save_bookmark(path)), ('gtk-paste', lambda o: self.move_bookmark(self._saved_bookmark, path, direction)), ('separator', ''), (rename_button_text, lambda o: self.rename_bookmark(button)), ('separator', ''), (_('Set to Current Page'), lambda o: self.change_bookmark(path)) ) # T: menu item for name, func in main_menu_items: if name == 'separator': item = gtk.SeparatorMenuItem() else: if 'gtk-' in name: item = gtk.ImageMenuItem(name) else: item = gtk.MenuItem(name) item.connect('activate', func) main_menu.append(item) main_menu.show_all() main_menu.popup(None, None, None, 3, 0) return True def on_bookmark_clicked(self, button): '''Open page if a bookmark is clicked.''' self.ui.open_page(Path(button.zim_path)) def on_preferences_changed(self, preferences): '''Plugin preferences were changed.''' self.save_flag = preferences['save'] self.add_bookmarks_to_beginning = preferences['add_bookmarks_to_beginning'] if self.save_flag: self.uistate['bookmarks'] = self.paths self.uistate['bookmarks_names'] = self.paths_names else: self.uistate['bookmarks'] = [] self.uistate['bookmarks_names'] = {} def _get_short_page_name(self, name): ''' Function to return short name for the page. Is used to set short names to bookmarks. ''' path = Path(name) return path.basename def toggle_show_full_page_name(self): '''Change page name from short to full and vice versa.''' self.uistate['show_full_page_name'] = not self.uistate['show_full_page_name'] self._reload_bar() def _reload_bar(self): '''Reload bar with bookmarks.''' for button in self.container.get_children()[2:]: self.container.remove(button) for path in self.paths: if path in self.paths_names: name = self.paths_names[path] elif not self.uistate['show_full_page_name']: name = self._get_short_page_name(path) else: name = path button = gtk.Button(label = name, use_underline = False) button.set_tooltip_text(path) button.zim_path = path button.connect('clicked', self.on_bookmark_clicked) button.connect('button-release-event', self.do_bookmarks_popup_menu) button.show() self.container.add(button) # 'Disable' plus_button if max bookmarks is reached. if len(self.paths) >= MAX_BOOKMARKS: self.plus_button.change_state(False) else: self.plus_button.change_state(True) # Update config files. if self.save_flag: self.uistate['bookmarks'] = self.paths self.uistate['bookmarks_names'] = self.paths_names class IconsButton(gtk.Button): ''' Need a button which can change icons. Use this instead of set_sensitive to show 'disabled'/'enabled' state because of the need to get signal for popup menu. For using only with one icon look for the standard IconButton from widgets.py. ''' def __init__(self, stock_enabled, stock_disabled, relief=True, size=gtk.ICON_SIZE_BUTTON): ''' :param stock_enabled: the stock item for enabled state, :param stock_disabled: the stock item for disabled state, :param relief: when C{False} the button has no visible raised, edge and will be flat against the background, :param size: the icons size ''' gtk.Button.__init__(self) self.stock_enabled = gtk.image_new_from_stock(stock_enabled, size) self.stock_disabled = gtk.image_new_from_stock(stock_disabled, size) self.add(self.stock_enabled) self._enabled_state = True self.set_alignment(0.5, 0.5) if not relief: self.set_relief(gtk.RELIEF_NONE) def change_state(self, active = 'default'): ''' Change icon in the button. :param active: if True - 'enabled', False - 'disabled', if 'default' change state to another. ''' if active == 'default': active = not self._enabled_state if active != self._enabled_state: self.remove(self.get_child()) if active: self.add(self.stock_enabled) else: self.add(self.stock_disabled) self._enabled_state = not self._enabled_state self.show_all() �������������zim-0.65/zim/plugins/arithmetic.py������������������������������������������������������������������0000664�0001750�0001750�00000002260�12374655231�017110� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2011 Patricio Paez <pp@pp.com.mx> # # Plugin to use arithmetic in Zim wiki from zim.inc.arithmetic import ParserGTK from zim.plugins import PluginClass, WindowExtension, extends from zim.actions import action class ArithmeticPlugin(PluginClass): plugin_info = { 'name': _('Arithmetic'), # T: plugin name 'description': _('''\ This plugin allows you to embed arithmetic calculations in zim. It is based on the arithmetic module from http://pp.com.mx/python/arithmetic. '''), # T: plugin description 'author': 'Patricio Paez', 'help': 'Plugins:Arithmetic', } #~ plugin_preferences = ( # key, type, label, default #~ ) @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' <ui> <menubar name='menubar'> <menu action='tools_menu'> <placeholder name='plugin_items'> <menuitem action='calculate'/> </placeholder> </menu> </menubar> </ui> ''' @action(_('_Arithmetic'), accelerator='F5') # T: menu item def calculate(self): """Perform arithmetic operations""" # get the buffer buf = self.window.pageview.view.get_buffer() # XXX # parse and return modified text parser = ParserGTK() parser.parse( buf ) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/inlinecalculator.py������������������������������������������������������������0000664�0001750�0001750�00000020460�12374655231�020311� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2010 Jaap Karssenberg <jaap.karssenberg@gmail.com> # # Inspired by and partially based on code from clac.py, # Which is copyright 2009 Mark Borgerding and licensed under the GPL version 3 from __future__ import with_statement from __future__ import division # We are doing math in this module ... import logging import re import math import cmath from zim.plugins import PluginClass, extends, WindowExtension from zim.actions import action from zim.errors import Error logger = logging.getLogger('zim.plugins.insertsymbol') # helper functions def dip(x): 'demote, if possible, a complex to scalar' if type(x) == complex and x.imag == 0: return x.real else: return x def which_call(x, mathfunc, cmathfunc, allowNegative=True): x=dip(x) if type(x) == complex or (allowNegative == False and x<0): return cmathfunc(x) else: return mathfunc(x) # math functions defined here def degrees(x): return x*180/math.pi def radians(x): return x*math.pi/180 def log(x,b=math.e): 'log(x[, base]) -> the logarithm of x to the given base.\nIf the base not specified, returns the natural logarithm (base e) of x.' if type(x) == complex or x<0: return dip( cmath.log(x) / cmath.log(b) ) else: return math.log(x)/math.log(b) def real(x): 'return just the real portion' if type(x) == complex: return x.real else: return x def imag(x): 'return just the imaginary portion' if type(x) == complex: return x.imag else: return 0 def sign(x): 'returns -1,0,1 for negative,zero,positive numbers' if x == 0: return 0 elif x > 0: return 1 else: return -1 def log2(x): 'logarithm base 2' return log(x,2) def gcd(x,y): 'greatest common denominator' while x>0: (x,y) = (y%x,x) # Guido showed me this one on the geek cruise return y def lcm(x,y): 'least common multiple' return x*y/gcd(x,y) def phase(z): 'phase of a complex in radians' z=cpx(z) return math.atan2( z.imag , z.real ) def cpx(x): 'convert a number or tuple to a complex' if type(x) == tuple: return complex( x[0] , x[1] ) else: return complex(x) def conj( x ): 'complex conjugate' x = cpx( x ) return complex( x.real , -x.imag ) def complexify(x,func ): 'call func on the real and imaginary portions, creating a complex from the respective results' if type(x) == complex and x.imag != 0: return dip( complex( func(x.real) , func(x.imag) ) ) else: return func(x) # overwrite the built-in math functions that don't handle complex def round(x): 'nearest integer' if type(x) == complex: return complexify( x , round ) else: return math.floor(x+.5) def floor(x): 'round towards negative infinity' return complexify( x , math.floor ) def ceil(x): 'round towards positive infinity' return complexify( x , math.ceil ) # functions and constants available within the safe eval construct GLOBALS = { '__builtins__': None, # Don't allow open() etc. # builtins we want to keep 'abs': abs, 'ord': ord, 'chr': unichr, 'hex': hex, 'oct': oct, 'int': int, # direct imports 'e': math.e, 'pi': math.pi, 'atan2': math.atan2, 'fmod': math.fmod, 'frexp': math.frexp, 'hypot': math.hypot, 'ldexp': math.ldexp, 'modf': math.modf, # other nice-to-have constants 'j': cmath.sqrt(-1), # marshall between the math and cmath functions automatically 'acos': lambda x: which_call(x,math.acos,cmath.acos), 'asin': lambda x: which_call(x,math.asin,cmath.asin), 'atan': lambda x: which_call(x,math.atan,cmath.atan), 'cos': lambda x: which_call(x,math.cos,cmath.cos), 'cosh': lambda x: which_call(x,math.cosh,cmath.cosh), 'sin': lambda x: which_call(x,math.sin,cmath.sin), 'sinh': lambda x: which_call(x,math.sinh,cmath.sinh), 'tan': lambda x: which_call(x,math.tan,cmath.tan), 'tanh': lambda x: which_call(x,math.tanh,cmath.tanh), 'exp': lambda x: which_call(x,math.exp,cmath.exp), 'log10': lambda x: which_call(x,math.log10,cmath.log10,False), 'sqrt': lambda x: which_call(x,math.sqrt,cmath.sqrt,False), # functions defined here 'degrees': degrees, 'radians': radians, 'log': log, 'real': real, 'imag': imag, 'sign': sign, 'log2': log2, 'gcd': gcd, 'lcm': lcm, 'phase': phase, 'conj': conj, 'round': round, 'floor': floor, 'ceil': ceil, # synonyms 'mag': abs, 'angle': phase, } class ExpressionError(Error): description = _( 'The inline calculator plugin was not able\n' 'to evaluate the expression at the cursor.' ) # T: error description _multiline_re = re.compile('--+\s+[+-]') # for multiline summation with "--- +" and similar class InlineCalculatorPlugin(PluginClass): plugin_info = { 'name': _('Inline Calculator'), # T: plugin name 'description': _('''\ This plugin allows you to quickly evaluate simple mathematical expressions in zim. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Inline Calculator', } #~ plugin_preferences = ( # key, type, label, default #~ ) def process_text(self, text): '''Takes a piece of text and parses it for expressions to evaluate. Returns the text with result inserted or replaced. Will raise an exception on errors. ''' # This method is separated from eval_math() for easy testing if '\n' in text: return self._process_multiline(text) else: return self._process_line(text) def _process_line(self, line): # Check for non-math prefix prefix = '' if ':' in line: i = line.rindex(':') + 1 prefix = line[:i] line = line[i:] # Allow for chaining like "1 + 2 = 3 + 0.5 = 3.5" etc. if line.count('=') > 1: parts = line.split('=') prefix += '='.join(parts[:-2]) + '=' line = '='.join(parts[-2:]) # Check for whitespace postfix after previous answer postfix = '' stripped = line.rstrip() if '=' in line \ and stripped != line and not stripped.endswith('='): i = len(line) - len(stripped) postfix = line[-i:] line = stripped # Strip previous answer and '=' if '=' in line: i = line.index('=') line = line[:i] result = self.safe_eval(line) return prefix + line + '= ' + str(result) + postfix def _process_multiline(self, text): lines = text.splitlines() for i, line in enumerate(lines): if _multiline_re.match(line): operator = line.strip()[-1] break else: raise ExpressionError, _('Could not parse expression') # T: error message sep = ' %s ' % operator expression = sep.join('(%s)' % l for l in lines[:i]) result = self.safe_eval(expression) lines = lines[:i+1] + [str(result)] return '\n'.join(lines) + '\n' def safe_eval(self, expression): '''Safe evaluation of a python expression''' try: return eval(expression, GLOBALS, {}) except Exception, error: msg = '%s: %s' % (error.__class__.__name__, error) raise ExpressionError, msg @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' <ui> <menubar name='menubar'> <menu action='tools_menu'> <placeholder name='plugin_items'> <menuitem action='eval_math'/> </placeholder> </menu> </menubar> </ui> ''' @action(_('Evaluate _Math')) # T: menu item def eval_math(self): '''Action called by the menu item or key binding, will look at the cursor for an expression to evaluate. ''' buffer = self.window.pageview.view.get_buffer() # XXX- way to long chain of objects here # FIXME: what do we do for selections ? cursor = buffer.get_iter_at_mark(buffer.get_insert()) start, end = buffer.get_line_bounds(cursor.get_line()) line = buffer.get_text(start, end) if not line or line.isspace(): # Empty line, look at previous line if cursor.get_line() > 1: start, end = buffer.get_line_bounds(cursor.get_line() - 1) cursor = end.copy() cursor.backward_char() line = buffer.get_text(start, end) else: return # silent fail if _multiline_re.match(line): # Search for start of block - iterate back to empty line lineno = cursor.get_line() while lineno > 1: mystart, myend = buffer.get_line_bounds(lineno) myline = buffer.get_text(mystart, myend) if not myline or myline.isspace(): break else: start = mystart lineno -= 1 else: # One line expression, just pass it on # FIXME skip forward past next word if any if last char is '=' end = cursor orig = buffer.get_text(start, end) new = self.plugin.process_text(orig) with buffer.user_action: buffer.delete(start, end) buffer.insert_at_cursor(new) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/backlinkpane.py����������������������������������������������������������������0000664�0001750�0001750�00000010332�12430471142�017366� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg <jaap.karssenberg@gmail.com> from __future__ import with_statement import gobject import gtk import pango from zim.plugins import PluginClass, extends, WindowExtension from zim.notebook import Path from zim.gui.widgets import RIGHT_PANE, PANE_POSITIONS, BrowserTreeView, populate_popup_add_separator from zim.index import LINK_DIR_BACKWARD class BackLinksPanePlugin(PluginClass): plugin_info = { 'name': _('BackLinks Pane'), # T: plugin name 'description': _('''\ This plugin adds an extra widget showing a list of pages linking to the current page. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:BackLinks Pane', } plugin_preferences = ( # key, type, label, default ('pane', 'choice', _('Position in the window'), RIGHT_PANE, PANE_POSITIONS), # T: option for plugin preferences ) @extends('MainWindow') class MainWindowExtension(WindowExtension): def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) opener = self.window.get_resource_opener() self.widget = BackLinksWidget(opener) if self.window.ui.page: # XXX ui = self.window.ui # XXX page = self.window.ui.page # XXX self.on_open_page(ui, page, page) self.connectto(self.window.ui, 'open-page') # XXX self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) def on_preferences_changed(self, preferences): if self.widget is None: return try: self.window.remove(self.widget) except ValueError: pass self.window.add_tab(_('BackLinks'), self.widget, preferences['pane']) # T: widget label self.widget.show_all() self.widget.show_all() def on_open_page(self, ui, page, path): self.widget.set_page(self.window.ui.notebook, page) # XXX def teardown(self): self.window.remove(self.widget) self.widget.destroy() self.widget = None PAGE_COL = 0 TEXT_COL = 1 class BackLinksWidget(gtk.ScrolledWindow): def __init__(self, opener): gtk.ScrolledWindow.__init__(self) self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) self.set_shadow_type(gtk.SHADOW_IN) self.opener = opener self.treeview = LinksTreeView() self.add(self.treeview) self.treeview.connect('row-activated', self.on_link_activated) self.treeview.connect('populate-popup', self.on_populate_popup) def set_page(self, notebook, page): model = self.treeview.get_model() model.clear() backlinks = notebook.index.list_links(page, LINK_DIR_BACKWARD) # XXX allow access through page object for link in backlinks: href = notebook.relative_link(link.href, link.source) # XXX # relative link from href *back* to source href = href.lstrip(':') #~ model.append(None, (link.source, href)) model.append((link.source, href)) ## TODO make hierarchy by link type ? ## use link.type attribute #self.treeview.expand_all() def on_link_activated(self, treeview, path, column): model = treeview.get_model() path = model[path][PAGE_COL] self.opener.open_page(path) def on_populate_popup(self, treeview, menu): populate_popup_add_separator(menu) item = gtk.MenuItem(_('Open in New _Window')) item.connect('activate', self.on_open_new_window, treeview) menu.append(item) # Other per page menu items do not really apply here... def on_open_new_window(self, o, treeview): model, iter = treeview.get_selection().get_selected() if model and iter: path = model[iter][PAGE_COL] self.opener.open_page(path, new_window=True) class LinksTreeView(BrowserTreeView): def __init__(self): BrowserTreeView.__init__(self, LinksTreeModel()) self.set_headers_visible(False) cell_renderer = gtk.CellRendererText() cell_renderer.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn('_page_', cell_renderer, text=TEXT_COL) self.append_column(column) if gtk.gtk_version >= (2, 12, 0) \ and gtk.pygtk_version >= (2, 12, 0): self.set_tooltip_column(TEXT_COL) #~ class LinksTreeModel(gtk.TreeStore): class LinksTreeModel(gtk.ListStore): def __init__(self): #~ gtk.TreeStore.__init__(self, object, str) # PAGE_COL, TEXT_COL gtk.ListStore.__init__(self, object, str) # PAGE_COL, TEXT_COL ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/calendar.py��������������������������������������������������������������������0000664�0001750�0001750�00000037143�12601526316�016532� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2009-2013 Jaap Karssenberg <jaap.karssenberg@gmail.com> from __future__ import with_statement import gobject import gtk import re import logging from zim.plugins import PluginClass, extends, ObjectExtension, WindowExtension from zim.actions import action from zim.signals import SignalHandler import zim.datetimetz as datetime from zim.datetimetz import dates_for_week, weekcalendar from zim.gui.widgets import ui_environment, Dialog, Button, \ WindowSidePaneWidget, LEFT_PANE, TOP, WIDGET_POSITIONS from zim.notebook import Path from zim.templates.expression import ExpressionFunction logger = logging.getLogger('zim.plugins.calendar') # FUTURE: Use calendar.HTMLCalendar from core libs to render this plugin in www KEYVALS_ENTER = map(gtk.gdk.keyval_from_name, ('Return', 'KP_Enter', 'ISO_Enter')) KEYVALS_SPACE = (gtk.gdk.unicode_to_keyval(ord(' ')),) date_path_re = re.compile(r'^(.*:)?\d{4}:\d{1,2}:\d{2}$') week_path_re = re.compile(r'^(.*:)?\d{4}:Week \d{2}$') month_path_re = re.compile(r'^(.*:)?\d{4}:\d{1,2}$') year_path_re = re.compile(r'^(.*:)?\d{4}$') def daterange_from_path(path): '''Determine the calendar dates mapped by a specific page @param path: a L{Path} object @returns: a 3-tuple of: - the page type (one of "C{day}", "C{week}", "C{month}", or "C{year}") - a C{datetime.date} object for the start date - a C{datetime.date} object for the end date or C{None} when the page does not map a date ''' if date_path_re.match(path.name): type = 'day' year, month, day = map(int, path.name.rsplit(':', 3)[-3:]) try: date = datetime.date(year, month, day) except ValueError: return None # not a valid date end_date = date elif week_path_re.match(path.name): type = 'week' year, week = path.name.rsplit(':', 2)[-2:] year, week = map(int, (year, week[5:])) # Assumes "Week XX" string date, end_date = dates_for_week(year, week) elif month_path_re.match(path.name): type = 'month' year, month = map(int, path.name.rsplit(':', 2)[-2:]) try: date = datetime.date(year, month, 1) except ValueError: return None # not a valid month if month == 12: end_date = datetime.date(year, 12, 31) else: end_date = datetime.date(year, month+1, 1) + datetime.timedelta(-1) elif year_path_re.match(path.name): type = 'year' year = int(path.name.rsplit(':', 1)[-1]) date = datetime.date(year, 1, 1) end_date = datetime.date(year, 12, 31) else: return None # Not a calendar path return type, date, end_date class CalendarPlugin(PluginClass): plugin_info = { 'name': _('Journal'), # T: plugin name 'description': _('''\ This plugin turns one section of the notebook into a journal with a page per day, week or month. Also adds a calendar widget to access these pages. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Journal', } global DAY, WEEK, MONTH, YEAR # Hack - to make sure translation is loaded DAY = _('Day') # T: option value WEEK = _('Week') # T: option value MONTH = _('Month') # T: option value YEAR = _('Year') # T: option value plugin_preferences = ( # key, type, label, default ('embedded', 'bool', _('Show calendar in sidepane instead of as dialog'), False), # T: preferences option ('pane', 'choice', _('Position in the window'), (LEFT_PANE, TOP), WIDGET_POSITIONS), # T: preferences option ('granularity', 'choice', _('Use a page for each'), DAY, (DAY, WEEK, MONTH, YEAR)), # T: preferences option, values will be "Day", "Month", ... ('namespace', 'namespace', _('Section'), Path(':Journal')), # T: input label ('auto_expand_in_index', 'bool', _('Expand journal page in index when opened'), True), # T: preferences option ) # TODO disable pane setting if not embedded def __init__(self, config=None): PluginClass.__init__(self, config) self.preferences.connect('changed', self.on_preferences_changed) self.on_preferences_changed(self.preferences) def on_preferences_changed(self, preferences): if preferences['embedded']: self.set_extension_class('MainWindow', MainWindowExtensionEmbedded) else: self.set_extension_class('MainWindow', MainWindowExtensionDialog) def path_from_date(self, date): '''Returns the path for a calendar page for a specific date''' if self.preferences['granularity'] == DAY: path = date.strftime('%Y:%m:%d') elif self.preferences['granularity'] == WEEK: year, week, day = weekcalendar(date) path = '%i:Week %02i' % (year, week) elif self.preferences['granularity'] == MONTH: path = date.strftime('%Y:%m') elif self.preferences['granularity'] == YEAR: path = date.strftime('%Y') return self.preferences['namespace'].child(path) def path_for_month_from_date(self, date): '''Returns the namespace path for a certain month''' return self.preferences['namespace'].child(date.strftime('%Y:%m')) def date_from_path(self, path): '''Returns the date for a specific path or C{None}''' dates = daterange_from_path(path) if dates: return dates[1] else: return None def dateRangeTemplateFunction(start, end): '''Returns a function to be used in templates to iterate a range of dates''' @ExpressionFunction def date_range_function(): oneday = datetime.timedelta(days=1) yield start next = start + oneday while next <= end: yield next next += oneday return date_range_function @extends('Notebook') class NotebookExtension(ObjectExtension): '''Extend notebook by setting special page template for the calendar namespace and by adding a hook to suggests links for dates. ''' def __init__(self, plugin, notebook): self.plugin = plugin self.notebook = notebook self._initialized_namespace = None self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) self.connectto(notebook, 'suggest-link') self.connectto(notebook, 'new-page-template') def on_suggest_link(self, notebook, source, text): #~ if date_path_re.match(path.text): #~ return Path(text) if re.match(r'^\d{4}-\d{2}-\d{2}$', text): year, month, day = text.split('-') year, month, day = map(int, (year, month, day)) date = datetime.date(year, month, day) return self.plugin.path_from_date(date) # TODO other formats else: return None def on_new_page_template(self, notebook, path, template): daterange = daterange_from_path(path) if daterange: self.connectto(template, 'process', self.on_process_new_page_template, userdata=daterange ) def on_process_new_page_template(self, template, output, context, daterange): '''Callback called when parsing a template, e.g. when exporting a page or when a new page is created. Sets parameters in the template dict to be used in the template. ''' type, start, end = daterange context['calendar_plugin'] = { 'page_type': type, 'date': start, 'start_date': start, 'end_date': end, 'days': dateRangeTemplateFunction(start, end), } def on_preferences_changed(self, preferences): self.teardown() ns = preferences['namespace'].name self.notebook.namespace_properties[ns]['template'] = 'Journal' self.notebook.namespace_properties[ns]['auto_expand_in_index'] = preferences['auto_expand_in_index'] self._initialized_namespace = ns def teardown(self): if self._initialized_namespace: ns = self._initialized_namespace for key in ('template', 'auto_expand_in_index'): try: self.notebook.namespace_properties[ns].remove('template') except KeyError: pass self._initialized_namespace = None class MainWindowExtension(WindowExtension): '''Base class for our mainwindow extensions''' @action(_('To_day'), accelerator='<Alt>D') # T: menu item def go_page_today(self): today = datetime.date.today() path = self.plugin.path_from_date(today) self.window.ui.open_page(path) # XXX # TODO: hook to the pageview end-of-word signal and link dates # add a preference for this # TODO: Overload the "Insert date" dialog by adding a 'link' option @extends('MainWindow', autoload=False) class MainWindowExtensionDialog(MainWindowExtension): '''Extension used to add calendar dialog to mainwindow''' uimanager_xml = ''' <ui> <menubar name='menubar'> <menu action='go_menu'> <placeholder name='plugin_items'> <menuitem action='go_page_today'/> </placeholder> </menu> <menu action='view_menu'> <placeholder name='plugin_items'> <menuitem action='show_calendar'/> </placeholder> </menu> </menubar> <toolbar name='toolbar'> <placeholder name='tools'> <toolitem action='show_calendar'/> </placeholder> </toolbar> </ui> ''' @action(_('Calen_dar'), stock='zim-calendar', tooltip=_('Show calendar')) # T: menu item def show_calendar(self): dialog = CalendarDialog.unique(self, self.plugin, self.window) dialog.present() @extends('MainWindow', autoload=False) class MainWindowExtensionEmbedded(MainWindowExtension): '''Extension used for calendar widget embedded in side pane''' uimanager_xml = ''' <ui> <menubar name='menubar'> <menu action='go_menu'> <placeholder name='plugin_items'> <menuitem action='go_page_today'/> </placeholder> </menu> </menubar> </ui> ''' def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.opener = window.get_resource_opener() notebook = window.ui.notebook # XXX model = CalendarWidgetModel(self.plugin, notebook) self.widget = CalendarWidget(model) self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) self.connectto(self.widget, 'date-activated') self.connectto(self.window.ui, 'open-page') # XXX def on_preferences_changed(self, preferences): if self.widget is None: return try: self.window.remove(self.widget) except ValueError: pass self.window.add_widget(self.widget, preferences['pane']) self.widget.show_all() @SignalHandler def on_open_page(self, ui, page, path): self.widget.set_page(path) def on_date_activated(self, widget, date): path = self.plugin.path_from_date(date) with self.on_open_page.blocked(): self.opener.open_page(path) def teardown(self): self.window.remove(self.widget) self.widget = None class Calendar(gtk.Calendar): '''Custom calendar widget class. Adds an 'activate' signal for when a date is selected explicitly by the user. ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'activate': (gobject.SIGNAL_RUN_LAST, None, ()), } def __init__(self): gtk.Calendar.__init__(self) self.selected = False def do_key_press_event(self, event): handled = gtk.Calendar.do_key_press_event(self, event) if handled and (event.keyval in KEYVALS_SPACE or event.keyval in KEYVALS_ENTER): self.emit('activate') return handled def do_button_press_event(self, event): handled = gtk.Calendar.do_button_press_event(self, event) if event.button == 1 and self.selected: self.selected = False self.emit('activate') return handled def do_day_selected(self): self.selected = True def select_date(self, date): '''Set selected date using a datetime oject''' self.select_month(date.month - 1, date.year) self.select_day(date.day) def get_date(self): '''Get the datetime object for the selected date''' year, month, day = gtk.Calendar.get_date(self) if day == 0: day = 1 try: date = datetime.date(year, month + 1, day) except ValueError: # This error may mean that day number is higher than allowed. # If so, set date to the last day of the month. if day > 27: date = datetime.date(year, month + 2, 1) - datetime.timedelta(days = 1) else: raise return date # Need to register classes defining gobject signals gobject.type_register(Calendar) class CalendarWidget(gtk.VBox, WindowSidePaneWidget): # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'date-activated': (gobject.SIGNAL_RUN_LAST, None, (object,)), } def __init__(self, model): gtk.VBox.__init__(self) self.model = model self.label_box = gtk.HBox() self.pack_start(self.label_box, False) self.label = gtk.Label() self.label_event = gtk.EventBox() self.label_event.add(self.label) self.label_event.connect("button_press_event", lambda w, e: self.go_today()) self.label_box.add(self.label_event) self._refresh_label() self._timer_id = \ gobject.timeout_add(300000, self._refresh_label) # 5 minute = 300_000 ms # Ideally we only need 1 timer per day at 00:00, but not # callback for that self.connect('destroy', lambda o: gobject.source_remove(o._timer_id) ) # Clear reference, else we get a new timer for every dialog self.calendar = Calendar() self.calendar.display_options( gtk.CALENDAR_SHOW_HEADING | gtk.CALENDAR_SHOW_DAY_NAMES | gtk.CALENDAR_SHOW_WEEK_NUMBERS ) self.calendar.connect('activate', self.on_calendar_activate) self.calendar.connect('month-changed', self.on_month_changed) self.on_month_changed(self.calendar) self.pack_start(self.calendar, False) def go_today(self): self.select_date(datetime.date.today()) self.calendar.emit('activate') def embed_closebutton(self, button): if button: self.label_box.pack_end(button, False) else: for widget in self.label_box.get_children(): if not widget == self.label_event: self.label_box.remove(widget) return True def _refresh_label(self, *a): #print "UPDATE LABEL %s" % id(self) format = _('%A %d %B %Y').replace(' 0', ' ') # T: strftime format for current date label text = datetime.strftime(format, datetime.date.today()) self.label.set_text(text) return True # else timer is stopped def on_calendar_activate(self, calendar): date = calendar.get_date() self.emit('date-activated', date) def on_month_changed(self, calendar): calendar.clear_marks() for date in self.model.list_dates_for_month(self.calendar.get_date()): calendar.mark_day(date.day) def set_page(self, page): dates = daterange_from_path(page) if dates: if dates[0] == 'year': # Calendar is per month, so do not switch view for year page pass else: self.calendar.select_date(dates[1]) else: self.calendar.select_day(0) def select_date(self, date): self.calendar.select_date(date) # Need to register classes defining gobject signals gobject.type_register(CalendarWidget) class CalendarWidgetModel(object): def __init__(self, plugin, notebook): self.plugin = plugin self.notebook = notebook def list_dates_for_month(self, date): namespace = self.plugin.path_for_month_from_date(date) for path in self.notebook.index.list_pages(namespace): if date_path_re.match(path.name): dates = daterange_from_path(path) if dates and dates[0] == 'day': yield dates[1] class CalendarDialog(Dialog): def __init__(self, plugin, window): Dialog.__init__(self, window, _('Calendar'), buttons=gtk.BUTTONS_CLOSE) # T: dialog title self.set_resizable(False) self.plugin = plugin self.opener = window.get_resource_opener() notebook = window.ui.notebook # XXX model = CalendarWidgetModel(self.plugin, notebook) self.calendar_widget = CalendarWidget(model) self.vbox.add(self.calendar_widget) button = Button(_('_Today'), gtk.STOCK_JUMP_TO) # T: button label button.connect('clicked', self.do_today ) self.action_area.add(button) self.action_area.reorder_child(button, 0) self.dateshown = datetime.date.today() self.connectto(self.calendar_widget, 'date-activated') self.connectto(window.ui, 'open-page') # XXX def on_date_activated(self, widget, date): path = self.plugin.path_from_date(date) with self.on_open_page.blocked(): self.opener.open_page(path) @SignalHandler def on_open_page(self, ui, page, path): self.calendar_widget.set_page(page) def do_today(self, event): self.calendar_widget.go_today() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/diagrameditor.py���������������������������������������������������������������0000664�0001750�0001750�00000004002�12521367617�017570� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg <jaap.karssenberg@gmail.com> from zim.plugins.base.imagegenerator import ImageGeneratorPlugin, ImageGeneratorClass from zim.fs import File, TmpFile from zim.config import data_file from zim.applications import Application, ApplicationError # TODO put these commands in preferences dotcmd = ('dot', '-Tpng', '-o') class InsertDiagramPlugin(ImageGeneratorPlugin): plugin_info = { 'name': _('Insert Diagram'), # T: plugin name 'description': _('''\ This plugin provides a diagram editor for zim based on GraphViz. This is a core plugin shipping with zim. '''), # T: plugin description 'help': 'Plugins:Diagram Editor', 'author': 'Jaap Karssenberg', } object_type = 'diagram' short_label = _('Dia_gram...') # T: menu item insert_label = _('Insert diagram') # T: menu item edit_label = _('_Edit diagram') # T: menu item syntax = 'dot' @classmethod def check_dependencies(klass): has_dotcmd = Application(dotcmd).tryexec() return has_dotcmd, [("GraphViz", has_dotcmd, True)] class DiagramGenerator(ImageGeneratorClass): uses_log_file = False object_type = 'diagram' scriptname = 'diagram.dot' imagename = 'diagram.png' def __init__(self, plugin): ImageGeneratorClass.__init__(self, plugin) self.dotfile = TmpFile(self.scriptname) self.dotfile.touch() self.pngfile = File(self.dotfile.path[:-4] + '.png') # len('.dot') == 4 def generate_image(self, text): # Write to tmp file self.dotfile.write(text) # Call GraphViz try: dot = Application(dotcmd) dot.run((self.pngfile, self.dotfile)) except ApplicationError: return None, None # Sorry, no log else: if self.pngfile.exists(): return self.pngfile, None else: # When supplying a dot file with a syntax error, the dot command # doesn't return an error code (so we don't raise # ApplicationError), but we still don't have a png file to # return, so return None. return None, None def cleanup(self): self.dotfile.remove() self.pngfile.remove() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/distractionfree.py�������������������������������������������������������������0000664�0001750�0001750�00000020421�12375327341�020142� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg <jaap.karssenberg@gmail.com> import gtk import logging from zim.plugins import PluginClass, WindowExtension, extends from zim.gui import PATHBAR_NONE, PATHBAR_RECENT logger = logging.getLogger('zim.plugins.distractionfree') _minsize = 300 # prevent pageview from disappearing altogether _minmargin = 5 # minimum margin to keep from other widgets class DistractionFreePlugin(PluginClass): plugin_info = { 'name': _('Distraction Free Editing'), # T: plugin name 'description': _( 'This plugin adds settings that help using zim\n' 'as a distraction free editor.\n' ), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Distraction Free Editing', } plugin_preferences = ( # key, type, label, default ('hide_menubar', 'bool', _('Hide menubar in fullscreen mode'), True), # T: plugin preference ('hide_toolbar', 'bool', _('Hide toolbar in fullscreen mode'), True), # T: plugin preference ('hide_pathbar', 'bool', _('Hide pathbar in fullscreen mode'), True), # T: plugin preference ('hide_statusbar', 'bool', _('Hide statusbar in fullscreen mode'), True), # T: plugin preference ('max_page_width', 'int', _('Maximum page width'), 850, (_minsize, 10000)), # T: plugin preference ('vmargin', 'int', _('Vertical margin'), 50, (0, 10000)), # T: plugin preference ('basecolor', 'color', _('Text background color'), '#babdb6'), # T: plugin preference ('textcolor', 'color', _('Text foreground color'), '#2e3436'), # T: plugin preference ('bgcolor', 'color', _('Screen background color'), '#2e3436'), # T: plugin preference #('fgcolor', 'color', _('Screen foreground color'), '#eeeeec'), ) @extends('MainWindow') class MainWindowExtension(WindowExtension): def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self._normal_colors = None self._show_panes = True self.preferences = plugin.preferences self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) self.connectto(window, 'init-uistate', self.on_init_uistate) self.connectto(window, 'fullscreen-changed') self.connectto(window.pageview.view, 'size-allocate') def on_init_uistate(self, window): self.on_preferences_changed(self.plugin.preferences) def on_preferences_changed(self, preferences): # Set show menubar & Update margins show_menubar = not preferences['hide_menubar'] show_toolbar = not preferences['hide_toolbar'] show_pathbar = not preferences['hide_pathbar'] show_statusbar = not preferences['hide_statusbar'] if self.window.isfullscreen: self.window.toggle_menubar(show_menubar) self.window.toggle_toolbar(show_toolbar) self.window.toggle_statusbar(show_statusbar) if show_pathbar \ and self.window.uistate['pathbar_type_fullscreen'] == PATHBAR_NONE: self.window.set_pathbar(PATHBAR_RECENT) elif not show_pathbar: self.window.set_pathbar(PATHBAR_NONE) textview = self.window.pageview.view self.on_size_allocate(textview, textview.get_allocation()) else: self.window.uistate['show_menubar_fullscreen'] = show_menubar self.window.uistate['show_toolbar_fullscreen'] = show_toolbar self.window.uistate['show_statusbar_fullscreen'] = show_statusbar if show_pathbar \ and self.window.uistate['pathbar_type_fullscreen'] == PATHBAR_NONE: self.window.uistate['pathbar_type_fullscreen'] = PATHBAR_RECENT elif not show_pathbar: self.window.uistate['pathbar_type_fullscreen'] = PATHBAR_NONE # TODO - would be nice to be able to toggle hide/show for pathbar without need to set type # allow hiding container or seperate widget from "model" def on_fullscreen_changed(self, window): if window.isfullscreen: self._show_panes = bool(window.get_visible_panes()) self._save_colors(window) self._set_colors(self._custom_colors) window.toggle_panes(show=False) window.pageview.swindow.set_shadow_type(gtk.SHADOW_NONE) # XXX elif self._normal_colors: self._set_colors(self._normal_colors) window.toggle_panes(show=self._show_panes) window.pageview.grab_focus() window.pageview.swindow.set_shadow_type(gtk.SHADOW_IN) # XXX else: pass # NOTE: would be nice to change color of _all_ widgets when switching # to fullscreen, but this is practically not possible because # we can not set just the few colors in RcStyle, would need to # switch the whole theme def _save_colors(self, window): style = window.pageview.view.rc_get_style() self._normal_colors = [] for state in ( gtk.STATE_NORMAL, #gtk.STATE_ACTIVE, #gtk.STATE_PRELIGHT, #gtk.STATE_SELECTED, #gtk.STATE_INSENSITIVE ): self._normal_colors.append({ 'base': style.base[gtk.STATE_NORMAL], 'text': style.text[gtk.STATE_NORMAL], 'bg': style.bg[gtk.STATE_NORMAL], #'fg': style.fg[gtk.STATE_NORMAL], }) @property def _custom_colors(self): # array of NORMAL, ACTIVE, PRELIGHT, SELECTED, INSENSITIVE normal = { 'base': self.preferences['basecolor'], 'text': self.preferences['textcolor'], 'bg': self.preferences['bgcolor'], #'fg': self.preferences['fgcolor'], } #selected = { # like normal, but reverse text and base # 'base': self.preferences['textcolor'], # 'text': self.preferences['basecolor'], # 'bg': self.preferences['bgcolor'], # 'fg': self.preferences['fgcolor'], #} #return [normal, normal, normal, selected, normal] return (normal,) def _set_colors(self, colors): # See gtk.RcStyle docs for all values in RC file rc = 'style "zim-colors"\n{\n' for i, state in enumerate(( 'NORMAL', #'ACTIVE', #'PRELIGHT', #'SELECTED', #'INSENSITIVE', )): values = colors[i] values['state'] = state rc += '\tbase[%(state)s] = "%(base)s"\n' \ '\ttext[%(state)s] = "%(text)s"\n' \ '\tbg[%(state)s] = "%(bg)s"\n' % values #'\tfg[%(state)s] = "%(fg)s"\n' % values #rc += '}\nclass "GtkWidget" style "zim-colors"' rc += '}\nwidget "*.zim-pageview" style "zim-colors"\n' logger.debug('Parse RC: >>>\n%s<<<', rc) gtk.rc_parse_string(rc) gtk.rc_reset_styles(gtk.settings_get_default()) def on_size_allocate(self, textview, allocation): # Here we play with textview margin windows to position text # in center of screen with a maximum size if not self.window.isfullscreen: self._set_margins(0, 0, 0, 0) return # Screen geometry screen = gtk.gdk.screen_get_default() root_window = screen.get_root_window() mouse_x, mouse_y, mouse_mods = root_window.get_pointer() current_monitor_number = screen.get_monitor_at_point(mouse_x, mouse_y) monitor_geometry = screen.get_monitor_geometry(current_monitor_number) screen_width = monitor_geometry.width screen_height = monitor_geometry.height # X max width based on user preference max_x = self.preferences['max_page_width'] xmargin = int((screen_width - max_x)/2) if allocation.width > max_x: if allocation.x > xmargin: # we are bumped to the right left = _minmargin right = allocation.width - max_x elif (allocation.x + allocation.width) < (screen_width - xmargin): # we are bumped to the left left = allocation.width - max_x right = _minmargin else: # room on both sides left = xmargin - allocation.x right = allocation.width - max_x - left else: left = _minmargin right = _minmargin # Y setting simply keeps a small margin vmargin = self.preferences['vmargin'] if vmargin > ((screen_height - _minsize) / 2): vmargin = ((screen_height - _minsize) / 2) if allocation.y < vmargin: top = vmargin - allocation.y else: top = _minmargin if (allocation.y + allocation.height) > (screen_height - vmargin): bottom = (allocation.y + allocation.height) - (screen_height - vmargin) else: bottom = _minmargin self._set_margins(left, right, top, bottom) def _set_margins(self, left, right, top, bottom): textview = self.window.pageview.view textview.set_border_window_size(gtk.TEXT_WINDOW_LEFT, left) textview.set_border_window_size(gtk.TEXT_WINDOW_RIGHT, right) textview.set_border_window_size(gtk.TEXT_WINDOW_TOP, top) textview.set_border_window_size(gtk.TEXT_WINDOW_BOTTOM, bottom) def teardown(self): # show at least menubar again, set margins to zero & restore colors self.window.uistate['show_menubar_fullscreen'] = True self._set_margins(0, 0, 0, 0) if self._normal_colors: self._set_colors(self._normal_colors) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/base/��������������������������������������������������������������������������0000775�0001750�0001750�00000000000�12615422672�015316� 5����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/base/imagegenerator.py���������������������������������������������������������0000664�0001750�0001750�00000030216�12614412356�020660� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2009-2013 Jaap Karssenberg <jaap.karssenberg@gmail.com> '''This module contains the base classes used by all plugins that create an image from text based input. Like the equation editor, the diagram editor etc. There is a class for the edit dialog that is used for images that are inserted with an object type, and there is a base class for the generators that implement specific translations from text to an image. ''' import gtk import logging from zim.plugins import PluginClass, WindowExtension, extends from zim.actions import Action from zim.fs import File, Dir from zim.gui.widgets import ui_environment, \ Dialog, ImageView, Button, QuestionDialog, LogFileDialog, \ ScrolledTextView, ScrolledSourceView, VPaned, \ populate_popup_add_separator logger = logging.getLogger('zim.plugins') uimanager_xml_template = ''' <ui> <menubar name='menubar'> <menu action='insert_menu'> <placeholder name='plugin_items'> <menuitem action='insert_%s'/> </placeholder> </menu> </menubar> </ui> ''' class ImageGeneratorPlugin(PluginClass): '''Base class for image generator plugins It assumes a subclass of L{ImageGeneratorClass} for the same object type is located in the same module. Sub-classes should define at the following attributes: @ivar object_type: the object type, e.g. "equation" @ivar syntax: optional syntax for syntax highlighting in the gtksourceview, e.g. "latex" @ivar short_label: e.g. "_('E_quation')" (Used in insert menu) @ivar insert_label: e.g. "_('Insert Equation')" (Used as dialog title and tooltip) @ivar edit_label: e.g. "_('_Edit Equation')" (Used in popup menu and dialog title) ''' object_type = None short_label = None insert_label = None edit_label = None syntax = None def __init__(self, config=None): PluginClass.__init__(self, config) # Construct a new class on run time klassname = self.object_type.title() + 'MainWindowExtension' insert_action = Action( 'insert_%s' % self.object_type, MainWindowExtensionBase.insert_object, self.short_label + '...', readonly=False ) generatorklass = self.lookup_subclass(ImageGeneratorClass) assert generatorklass.object_type == self.object_type, \ 'Object type of ImageGenerator (%s) does not match object type of plugin (%s)' \ % (generatorklass.object_type, self.object_type) mainwindow_extension_base = \ self.lookup_subclass(MainWindowExtensionBase) \ or MainWindowExtensionBase klass = type(klassname, (mainwindow_extension_base,), { 'object_type': self.object_type, 'syntax': self.syntax, 'uimanager_xml': uimanager_xml_template % self.object_type, 'generator_class': generatorklass, 'short_label': self.short_label, 'insert_label': self.insert_label, 'edit_label': self.edit_label, 'insert_%s' % self.object_type: insert_action, }) self.set_extension_class('MainWindow', klass) @extends('MainWindow', autoload=False) class MainWindowExtensionBase(WindowExtension): object_type = None syntax = None uimanager_xml = None short_label = None insert_label = None edit_label = None generator_class = None def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) pageview = self.window.pageview pageview.register_image_generator_plugin(self, self.object_type) def teardown(self): pageview = self.window.pageview pageview.unregister_image_generator_plugin(self) def build_generator(self): return self.generator_class(self.plugin) def insert_object(self): title = self.insert_label.replace('_', '') generator = self.build_generator() dialog = ImageGeneratorDialog( self.window.ui, title, generator, syntax=self.syntax, help=self.plugin.plugin_info['help'] ) # XXX ui dialog.run() def edit_object(self, buffer, iter, image): title = self.edit_label.replace('_', '') generator = self.build_generator() dialog = ImageGeneratorDialog( self.window.ui, title, generator, syntax=self.syntax, image=image, help=self.plugin.plugin_info['help'] ) # XXX ui dialog.run() def do_populate_popup(self, menu, buffer, iter, image): populate_popup_add_separator(menu, prepend=True) item = gtk.MenuItem(self.edit_label) item.connect('activate', lambda o: self.edit_object(buffer, iter, image)) menu.prepend(item) class ImageGeneratorClass(object): '''Base class for image generators which can be used by the L{ImageGeneratorDialog} ''' uses_log_file = True #: set to C{False} for subclasses that do not generate a log object_type = None #: generator type, e.g. "equation" scriptname = None #: basename of the source files, e.g. "equation.tex" imagename = None #: basename of the resulting image files, e.g. "equation.png" def __init__(self, plugin): self.plugin = plugin def generate_image(self, text): '''Generate an image for a user input This is the method that does the actual work to generate an image out of input text. Typically it will write the text to a temporary file using a template and then call an external program (e.g. latex) to create an image out of that source file. The result should be an image file and optionally a log file. When the external program failed preferably this method should still return a log file, so the user can check the details of why the creation failed. @param text: the source text as string - raw user input @returns: a 2-tuple of the image file and the log file as L{File} objects. If no image file was created the first element should be C{None}, if no log file is created second element should be C{None}. @implementation: must be implemented by subclasses ''' raise NotImplemented def process_input(self, text): '''Process user input before generating image This method is used to post-process user input before generating image and writing the user input into the script file. @param text: the source text as string - raw user input @returns: string used for generate_image, also the string written to script file. @implementation: Not mandatory to be implemented by subclass. It defaults to user input. ''' return text def filter_input(self, text): '''Filter contents of script file before displaying in textarea This method is used to pre-process contents of script file before displaying in textarea. @param text: the contents of script file @returns: string used to display for user input. @implementation: Not mandatory to be implemented by subclass. It defaults to script file contents. ''' return text def cleanup(self): '''Cleanup any temporary files that were created by this generator. Including log files and image files. @implementation: should be implemented by subclasses ''' pass class ImageGeneratorDialog(Dialog): '''Base class for use by plugins that generate and insert an image based on textual user input. This is used e.g. by the equation editor and similar plugins. The dialog provides text input and an image view for showing previews. ''' # TODO: use uistate to remember pane position def __init__(self, ui, title, generator, image=None, syntax=None, **opt): '''Constructor @param ui: L{GtkInterface} object or parent window @param title: the dialog title @param generator: an L{ImageGeneratorClass} object @param image: image data for an image in the L{TextBuffer<zim.gui.pageview.TextBuffer>} @param syntax: optional syntax name (as understood by gtksourceview) @param opt: any other arguments to pass to the L{Dialog} constructor ''' if ui_environment['platform'] == 'maemo': defaultsize = (450,480) # Use maximum available vertical space because decorations take # too much real state else: defaultsize = (450,300) Dialog.__init__(self, ui, title, defaultwindowsize=defaultsize, **opt) if ui_environment['platform'] == 'maemo': self.resize(450,480) # Force maximum dialog size under maemo, otherwise # we'll end with a too small dialog and no way to resize it self.generator = generator self.imagefile = None self.logfile = None self.vpane = VPaned() self.vpane.set_position(150) self.vbox.add(self.vpane) self.imageview = ImageView(bgcolor='#FFF', checkerboard=False) self.vpane.pack1(self.imageview, resize=True) # TODO scrolled window and option to zoom in / real size window, textview = ScrolledSourceView(syntax=syntax) self.textview = textview self.textview.set_editable(True) self.vpane.pack2(window, resize=False) hbox = gtk.HBox(spacing=5) self.vbox.pack_start(hbox, False) self.previewbutton = Button(_('_Preview'), stock='gtk-refresh') # T: button in e.g. equation editor dialog self.previewbutton.set_sensitive(False) self.previewbutton.connect_object( 'clicked', self.__class__.preview, self) hbox.pack_start(self.previewbutton, False) self.textview.get_buffer().connect('modified-changed', lambda b: self.previewbutton.set_sensitive(b.get_modified())) self.logbutton = Button(_('View _Log'), stock='gtk-file') # T: button in e.g. equation editor dialog self.logbutton.set_sensitive(False) self.logbutton.connect_object( 'clicked', self.__class__.show_log, self) if generator.uses_log_file: hbox.pack_start(self.logbutton, False) # else keep hidden self._existing_file = None if image: file = image['_src_file'] # FIXME ? textfile = self._stitch_fileextension(file, self.generator.scriptname) self._existing_file = textfile self.imageview.set_file(file) self.set_text(self.generator.filter_input(textfile.read())) self.textview.grab_focus() def _stitch_fileextension(self, file, basename): '''Stitches the file extension from 'basename' to the path of 'file' and returns a File object. ''' i = basename.rfind('.') j = file.path.rfind('.') return File(file.path[:j] + basename[i:]) def set_text(self, text): '''Set text in the buffer''' buffer = self.textview.get_buffer() buffer.set_text(text) buffer.set_modified(False) def get_text(self): '''Get the text from the buffer @returns: text as string ''' buffer = self.textview.get_buffer() bounds = buffer.get_bounds() return buffer.get_text(*bounds) def generate_image(self): '''Update the image based on the text in the text buffer''' self.imagefile = None self.logfile = None text = self.get_text() text = self.generator.process_input(text) try: imagefile, logfile = self.generator.generate_image(text) except: logger.exception('Could not generate image') # TODO set "error" image instead of "broken" image # TODO set exception text as log message else: self.imagefile = imagefile self.logfile = logfile self.textview.get_buffer().set_modified(False) def preview(self): '''Action for the "Preview" button''' self.generate_image() self.imageview.set_file(self.imagefile) # if None sets broken image self.logbutton.set_sensitive(not self.logfile is None) def show_log(self): '''Action for the "View Log" button''' assert self.logfile, 'BUG: no logfile set (yet)' LogFileDialog(self, self.logfile).run() def do_response_ok(self): if not self.imagefile \ or self.textview.get_buffer().get_modified(): self.generate_image() if not (self.imagefile and self.imagefile.exists()): dialog = QuestionDialog(self, _('An error occurred while generating the image.\nDo you want to save the source text anyway?')) # T: Question prompt when e.g. equation editor encountered an error generating the image to insert if not dialog.run(): return False if self._existing_file: textfile = self._existing_file else: page = self.ui.page dir = self.ui.notebook.get_attachments_dir(page) textfile = dir.new_file(self.generator.scriptname) textfile.write( self.generator.process_input(self.get_text()) ) imgfile = self._stitch_fileextension(textfile, self.generator.imagename) if self.imagefile and self.imagefile.exists(): self.imagefile.rename(imgfile) elif imgfile.exists(): imgfile.remove() if self._existing_file: self.ui.reload_page() else: pageview = self.ui.mainwindow.pageview # XXX pageview.insert_image(imgfile, type=self.generator.object_type, interactive=False, force=True) if self.logfile and self.logfile.exists(): self.logfile.remove() return True def destroy(self): self.generator.cleanup() Dialog.destroy(self) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/base/__init__.py���������������������������������������������������������������0000664�0001750�0001750�00000000000�12374655231�017416� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/scoreeditor.py�����������������������������������������������������������������0000664�0001750�0001750�00000010407�12521367234�017300� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # scoreeditor.py # # This is a plugin for Zim, which allows to insert music score in zim using # GNU Lilypond. # # # Author: Shoban Preeth <shoban.preeth@gmail.com> # Date: 2012-07-05 # Copyright (c) 2012, released under the GNU GPL v2 or higher # # import glob from zim.plugins.base.imagegenerator import ImageGeneratorPlugin, ImageGeneratorClass from zim.fs import File, TmpFile from zim.config import data_file from zim.templates import get_template from zim.applications import Application, ApplicationError # TODO put these commands in preferences lilypond_cmd = ('lilypond', '-ddelete-intermediate-files', # '-dsafe', # Can't include files in safe mode '-dbackend=eps', '--png', '--header=texidoc') convertly_cmd = ('convert-ly', '--current-version', '--edit') lilypondver_cmd = ('lilypond', '--version') def _get_lilypond_version(): try: lilypond = Application(lilypondver_cmd) output = lilypond.pipe() return output[0].split()[2] except ApplicationError: return '2.14.2' class InsertScorePlugin(ImageGeneratorPlugin): plugin_info = { 'name': _('Insert Score'), # T: plugin name 'description': _('''\ This plugin provides an score editor for zim based on GNU Lilypond. This is a core plugin shipping with zim. '''), # T: plugin description 'help': 'Plugins:Score Editor', 'author': 'Shoban Preeth', } plugin_preferences = [ # key, type, label, default ('include_header', 'string', _('Common include header'), '\include "predefined-guitar-fretboards.ly"'), # T: plugin preference ('include_footer', 'string', _('Common include footer'), ''), # T: plugin preference ] object_type = 'score' short_label = _('S_core') # T: menu item insert_label = _('Insert Score') # T: menu item edit_label = _('_Edit Score') # T: menu item syntax = None @classmethod def check_dependencies(klass): has_lilypond = Application(lilypond_cmd).tryexec() return has_lilypond, [('GNU Lilypond', has_lilypond, True)] class ScoreGenerator(ImageGeneratorClass): object_type = 'score' scriptname = 'score.ly' imagename = 'score.png' cur_lilypond_version = None def __init__(self, plugin): ImageGeneratorClass.__init__(self, plugin) self.template = get_template('plugins', 'scoreeditor.ly') self.scorefile = TmpFile(self.scriptname) self.cur_lilypond_version = _get_lilypond_version() self.include_header = plugin.preferences['include_header'] self.include_footer = plugin.preferences['include_footer'] def process_input(self, text): version_present = False for l in text.splitlines(True): if l.strip().startswith('\\version'): version_present = True if not version_present: text = '\\version "{0}"\n\n'.format(self.cur_lilypond_version) + text return text def extract_version(self, text): outtext = [] version = None for l in text.splitlines(True): if l.strip().startswith('\\version'): version = l.strip() else: outtext.append(l) return (version, ''.join(outtext)) def generate_image(self, text): (version, text) = self.extract_version(text) #~ print '>>>%s<<<' % text # Write to tmp file using the template for the header / footer scorefile = self.scorefile lines = [] self.template.process(lines, { 'score': text, 'version': version or '', 'include_header': self.include_header or '', 'include_footer': self.include_footer or '', } ) scorefile.writelines(lines) #~ print '>>>%s<<<' % scorefile.read() # Call convert-ly to convert document of current version of # Lilypond. clogfile = File(scorefile.path[:-3] + '-convertly.log') # len('.ly) == 3 try: convertly = Application(convertly_cmd) convertly.run((scorefile.basename,), cwd=scorefile.dir) except ApplicationError: clogfile.write('convert-ly failed.\n') return None, clogfile # Call lilypond to generate image. logfile = File(scorefile.path[:-3] + '.log') # len('.ly') == 3 try: lilypond = Application(lilypond_cmd) lilypond.run(('-dlog-file=' + logfile.basename[:-4], scorefile.basename,), cwd=scorefile.dir) except ApplicationError: # log should have details of failure return None, logfile pngfile = File(scorefile.path[:-3] + '.png') # len('.ly') == 3 return pngfile, logfile def cleanup(self): path = self.scorefile.path for path in glob.glob(path[:-3]+'*'): File(path).remove() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/printtobrowser.py��������������������������������������������������������������0000664�0001750�0001750�00000005501�12610170423�020047� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg <jaap.karssenberg@gmail.com> '''Plugin to serve as work-around for the lack of printing support''' import gtk from functools import partial from zim.fs import TmpFile from zim.plugins import PluginClass, WindowExtension, DialogExtension, extends from zim.actions import action import zim.templates import zim.formats from zim.export.template import ExportTemplateContext from zim.export.linker import StaticExportLinker class PrintToBrowserPlugin(PluginClass): plugin_info = { 'name': _('Print to Browser'), # T: plugin name 'description': _('''\ This plugin provides a workaround for the lack of printing support in zim. It exports the current page to html and opens a browser. Assuming the browser does have printing support this will get your data to the printer in two steps. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Print to Browser' } def print_to_file(self, notebook, page): file = TmpFile('print-to-browser.html', persistent=True, unique=False) template = zim.templates.get_template('html', 'Print') linker_factory = partial(StaticExportLinker, notebook, template.resources_dir) dumper_factory = zim.formats.get_format('html').Dumper # XXX context = ExportTemplateContext( notebook, linker_factory, dumper_factory, page.basename, [page] ) lines = [] template.process(lines, context) file.writelines(lines) return file @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' <ui> <menubar name='menubar'> <menu action='file_menu'> <placeholder name='print_actions'> <menuitem action='print_to_browser'/> </placeholder> </menu> </menubar> </ui> ''' @action(_('_Print to Browser'), 'gtk-print', '<Primary>P') # T: menu item def print_to_browser(self, page=None): notebook = self.window.ui.notebook # XXX if page is None: page = self.window.ui.page # XXX file = self.plugin.print_to_file(notebook, page) self.window.ui.open_url('file://%s' % file) # XXX # Try to force web browser here - otherwise it goes to the # file browser which can have unexpected results @extends('TaskListDialog') class TaskListDialogExtension(DialogExtension): def __init__(self, plugin, window): DialogExtension.__init__(self, plugin, window) button = gtk.Button(stock='gtk-print') button.connect('clicked', self.on_print_tasklist) self.add_dialog_button(button) def on_print_tasklist(self, o): html = self.window.task_list.get_visible_data_as_html() file = TmpFile('print-to-browser.html', persistent=True, unique=False) file.write(html) self.window.ui.open_url('file://%s' % file) # XXX # Try to force web browser here - otherwise it goes to the # file browser which can have unexpected results �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/__init__.py��������������������������������������������������������������������0000664�0001750�0001750�00000067221�12604162437�016523� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg <jaap.karssenberg@gmail.com> '''API documentation of the zim plugin framework. This file contains the base classes used to write plugins for zim. Each plugin is defined as a sub-module in the "zim.plugins" namespace. To be recognized as a plugin, a submodule of "zim.plugins" needs to define one (and only one) sub-class of L{PluginClass}. This class will define the main plugin object and contains meta data about the plugin and e.g. plugin preferences. The plugin object itself doesn't directly interact with the rest of the zim application. To actually add functionality to zim, the plugin module will also need to define one or more "extension" classes. These classes act as decorators for specific objects that appear in the application. They will be instantiated automatically whenever the target object is created. The extension object then has direct access to the API of the object that is being extended. Typical classes to extend in a plugin are e.g. the L{MainWindow}, the L{PageView}, the L{Notebook} and the L{Index} classes. To define a new extension, you can either write a direct sub-class of L{ObjectExtension} or use the L{WindowExtension} or L{DialogExtension} classes as base. E.g. the L{WindowExtension} has functions to easily add menu items in the main window menu bar. Each extension object that is instantiated is linked to the plugin object that it belongs to. So it can access functions of the plugin object and it can use the plugin object to find other extension objects if it needs to cooperate. All extension classes defined in the same module file as the plugin object are automatically linked to the plugin. Not every object in the application can be extended. Only objects that are send to the plugin manager will be available. However all windows and dialogs and all "main" objects in the application should be available (or made available by a patch if they are not yet extendable). Short lived objects like individual pages, files, etc. will typically not be extended. To do something with them you need to extend the object that creates them. See the various standard plugins for examples how to define a plugin object and use extensions. E.g. L{zim.plugins.printtobrowser} and L{zim.plugins.screenshot} are simple plugins that illustrate how to add a single function to zim. A special case are the so-called "image generator" plugins. These are plugins like the equation editor (see L{zim.plugins.equationeditor}) that use an external tool with a specialized language (e.g. latex) to generate images that can be inserted in zim. Since there are multiple of these plugins, a base plugin has been defined that does most of the work. The only thing needed to define a new plugin of this type is a plugin object (derived from L{ImageGeneratorPlugin}) and an object that knows how to generate the image (derived from L{ImageGeneratorClass}) Some plugins also want to add commandline options, such that they can be called directly with "zim --plugin PLUGIN_NAME [OPTIONS]", an example is the quicknote plugin. To make this work, all that is needed is to define a class that derives from the L{Command} class (see L{zim.command}). Also defined here is the L{PluginManager} class. This class is the interface towards the rest of the application to load/unload plugins and to let plugins extend specific application objects. To allow plugins to be installed locally, the C{$XDG_DATA_HOME/zim/plugins} and all C{$XDG_DATA_DIRS/zim/plugins} are added to the search path for C{zim.plugins}. ''' from __future__ import with_statement import gobject import types import os import sys import logging import inspect import collections import zim.fs from zim.fs import Dir from zim.signals import SignalEmitter, ConnectorMixin, SIGNAL_AFTER, SignalHandler from zim.actions import action, toggle_action, get_gtk_actiongroup from zim.utils import classproperty, get_module, lookup_subclass, WeakSet from zim.config import data_dirs, VirtualConfigManager logger = logging.getLogger('zim.plugins') # Extend path for importing and searching plugins # # Set C{__path__} for the C{zim.plugins} module. This determines what # directories are searched when importing plugin packages in the # C{zim.plugins} namespace. # # Originally this added to the C{__path__} folders based on C{sys.path} # however this leads to conflicts when multiple zim versions are # installed. By switching to XDG_DATA_HOME this conflict is removed # by separating custom plugins and default plugins from other versions. # Also this switch makes it easier to have a single instruction for # users where to put custom plugins. for dir in data_dirs('plugins'): __path__.append(dir.path) __path__.append(__path__.pop(0)) # reshuffle real module path to the end #~ print "PLUGIN PATH:", __path__ class PluginManager(ConnectorMixin, collections.Mapping): '''Manager that maintains a set of active plugins This class is the interface towards the rest of the application to load/unload plugins and to let plugins extend specific application objects. All object that want to instantiate new objects that are extendable need a reference to the plugin manager object that is instantiated when the application starts. When you instatiate a new object and want to present it for plugin extension, call the L{extend()} method. This object behaves as a dictionary with plugin object names as keys and plugin objects as value ''' def __init__(self, config=None): '''Constructor Constructor will directly load a list of default plugins based on the preferences in the config. Failures while loading these plugins will be logged but not raise errors. @param config: a L{ConfigManager} object that is passed along to the plugins and is used to load plugin preferences. Defaults to a L{VirtualConfigManager} for testing. ''' self.config = config or VirtualConfigManager() self._preferences = \ self.config.get_config_dict('<profile>/preferences.conf') self.general_preferences = self._preferences['General'] self.general_preferences.setdefault('plugins', []) self._plugins = {} self._extendables = WeakSet() self._load_plugins() self.connectto(self._preferences, 'changed', self.on_preferences_changed) def __getitem__(self, name): return self._plugins[name] def __iter__(self): return iter(sorted(self._plugins.keys())) # sort to make operation predictable - easier debugging def __len__(self): return len(self._plugins) def _load_plugins(self): '''Load plugins based on config''' for name in sorted(self.general_preferences['plugins']): try: self.load_plugin(name) except: logger.exception('Exception while loading plugin: %s', name) self.general_preferences['plugins'].remove(name) @classmethod def list_installed_plugins(klass): '''Lists plugin names for all installed plugins @returns: a set of plugin names ''' # List "zim.plugins" sub modules based on __path__ because this # parameter determines what folders will considered when importing # sub-modules of the this package once this module is loaded. plugins = set() # THIS LINE IS REPLACED BY SETUP.PY - DON'T CHANGE IT for dir in __path__: dir = Dir(dir) for candidate in dir.list(): # returns [] if dir does not exist if candidate.startswith('_') or candidate == 'base': continue elif candidate.endswith('.py'): plugins.add(candidate[:-3]) elif zim.fs.isdir(dir.path+'/'+candidate) \ and os.path.exists(dir.path+'/'+candidate+'/__init__.py'): plugins.add(candidate) else: pass return plugins @classmethod def get_plugin_class(klass, name): '''Get the plugin class for a given name @param name: the plugin name (e.g. "calendar") @returns: the plugin class object ''' modname = 'zim.plugins.' + name mod = get_module(modname) return lookup_subclass(mod, PluginClass) @SignalHandler def on_preferences_changed(self, o): current = set(self._plugins.keys()) new = set(self.general_preferences['plugins']) for name in current - new: try: self.remove_plugin(name) except: logger.exception('Exception while loading plugin: %s', name) for name in new - current: try: self.load_plugin(name) except: logger.exception('Exception while loading plugin: %s', name) self.general_preferences['plugins'].remove(name) def load_plugin(self, name): '''Load a single plugin by name When the plugin was loaded already the existing object will be returned. Thus for each plugin only one instance can be active. @param name: the plugin module name @returns: the plugin object @raises Exception: when loading the plugin failed ''' assert isinstance(name, basestring) if name in self._plugins: return self._plugins[name] logger.debug('Loading plugin: %s', name) klass = self.get_plugin_class(name) if not klass.check_dependencies_ok(): raise AssertionError, 'Dependencies failed for plugin %s' % name plugin = klass(self.config) self.connectto(plugin, 'extension-point-changed') self._plugins[name] = plugin for obj in self._extendables: try: plugin.extend(obj) except: logger.exception('Exception in plugin: %s', name) if not name in self.general_preferences['plugins']: with self.on_preferences_changed.blocked(): self.general_preferences['plugins'].append(name) self.general_preferences.changed() return plugin def remove_plugin(self, name): '''Remove a plugin and it's extensions Fails silently if the plugin is not loaded. @param name: the plugin module name ''' if name in self.general_preferences['plugins']: # Do this first regardless of exceptions etc. with self.on_preferences_changed.blocked(): self.general_preferences['plugins'].remove(name) self.general_preferences.changed() try: plugin = self._plugins.pop(name) self.disconnect_from(plugin) except KeyError: pass else: logger.debug('Unloading plugin %s', name) plugin.destroy() def _foreach(self, func): # sort to make operation predictable - easier debugging for name, plugin in sorted(self._plugins.items()): try: func(plugin) except: logger.exception('Exception in plugin: %s', name) def extend(self, obj): '''Let any plugin extend the object instance C{obj} Will also remember the object (by a weak reference) such that plugins loaded after this call will also be called to extend C{obj} on their construction @param obj: arbitrary object that can be extended by plugins ''' if not obj in self._extendables: self._foreach(lambda p: p.extend(obj)) self._extendables.add(obj) def on_extension_point_changed(self, plugin, name): for obj in self._extendables: if obj.__class__.__name__ == name: try: plugin.extend(obj) except: logger.exception('Exception in plugin: %s', name) class PluginClass(ConnectorMixin, SignalEmitter): '''Base class for plugins objects. To be recognized as a plugin, a submodule of "zim.plugins" needs to define one (and only one) sub-class of L{PluginClass}. This class will define the main plugin object and contains meta data about the plugin and e.g. plugin preferences. The plugin object itself doesn't directly interact with the rest of the zim application. To actually add functionality to zim, the plugin module will also need to define one or more "extension" classes. These classes act as decorators for specific objects that appear in the application. All extension classes defined in the same module file as the plugin object are automatically linked to the plugin. This class inherits from L{ConnectorMixin} and calls L{ConnectorMixin.disconnect_all()} when the plugin is destroyed. Therefore it is highly recommended to use the L{ConnectorMixin} methods in sub-classes. Plugin classes should at minimum define two class attributes: C{plugin_info} and C{plugin_preferences}. When these are defined no other code is needed to have a basic plugin up and running. @cvar plugin_info: A dict with basic information about the plugin, it should contain at least the following keys: - C{name}: short name - C{description}: one paragraph description - C{author}: name of the author - C{help}: page name in the manual (optional) This info will be used e.g. in the plugin tab of the preferences dialog. @cvar plugin_preferences: A tuple or list defining the global preferences for this plugin (if any). Each preference is defined by a 4-tuple containing the following items: 1. the dict key of the option (used in the config file and in the preferences dict) 2. an option type (see L{InputForm.add_inputs(){} for more details) 3. a (translatable) label to show in the preferences dialog for this option 4. a default value These preferences will be initialized to their default value if not configured by the user and the values can be found in the L{preferences} dict of the plugin object. The type and label will be used to render a default config dialog when triggered from the preferences dialog. Changes to these preferences will be stored in a config file so they are persistent. @ivar preferences: a L{ConfigDict} with plugin preferences Preferences are the global configuration of the plugin, they are stored in the X{preferences.conf} config file. @ivar config: a L{ConfigManager} object that can be used to lookup additional config files for the plugin @ivar extension_classes: a dictionary with extension classes found in the plugin module @ivar extensions: a set with extension objects loaded by this plugin. The lookup extensions objects it is usually better to use the methods L{get_extension()} or L{get_extensions()} rather than using this set directly. @signal: C{extension-point-changed (name)}: emitted when extension point C{name} changes ''' # define signals we want to use - (closure type, return type and arg types) __signals__ = { 'extension-point-changed': (None, None, (basestring,)) } plugin_info = {} plugin_preferences = () @classproperty def config_key(klass): '''The name of section used in the config files to store the preferences for this plugin. ''' return klass.__name__ @classmethod def check_dependencies_ok(klass): '''Checks minimum dependencies are met @returns: C{True} if this plugin can be loaded based on L{check_dependencies()} ''' check, dependencies = klass.check_dependencies() return check @classmethod def check_dependencies(klass): '''Checks what dependencies are met and gives details for display in the preferences dialog @returns: a boolean telling overall dependencies are met, followed by a list with details. This list consists of 3-tuples consisting of a (short) description of the dependency, a boolean for dependency being met, and a boolean for this dependency being optional or not. @implementation: must be implemented in sub-classes that have one or more (external) dependencies. Default always returns C{True} with an empty list. ''' return (True, []) def __init__(self, config=None): '''Constructor @param config: a L{ConfigManager} object that is used to load plugin preferences. Defaults to a L{VirtualConfigManager} for testing. ''' assert 'name' in self.plugin_info, 'Missing "name" in plugin_info' assert 'description' in self.plugin_info, 'Missing "description" in plugin_info' assert 'author' in self.plugin_info, 'Missing "author" in plugin_info' self.extensions = WeakSet() if self.plugin_preferences: assert isinstance(self.plugin_preferences[0], tuple), 'BUG: preferences should be defined as tuples' self.config = config or VirtualConfigManager() self.preferences = self.config.get_config_dict('<profile>/preferences.conf')[self.config_key] for pref in self.plugin_preferences: if len(pref) == 4: key, type, label, default = pref self.preferences.setdefault(key, default) #~ print ">>>>", key, default, '--', self.preferences[key] else: key, type, label, default, check = pref self.preferences.setdefault(key, default, check=check) #~ print ">>>>", key, default, check, '--', self.preferences[key] self.load_extensions_classes() @classmethod def lookup_subclass(pluginklass, klass): '''Returns first subclass of C{klass} found in the module of this plugin. (Similar to L{zim.utils.lookup_subclass}). @param pluginklass: plugin class @param klass: base class of the wanted class ''' module = get_module(pluginklass.__module__) return lookup_subclass(module, klass) def load_extensions_classes(self): '''Instantiates the C{extension_classes} dictionary with classes found in the same module as the plugin object. Called directly by the constructor. ''' self.extension_classes = {} for extends, klass in self.discover_extensions_classes(): self.add_extension_class(extends, klass) @classmethod def discover_extensions_classes(pluginklass): '''Find extension classes in same module as the plugin object class. @returns: yields 2-tuple of the name of the object class to be extended (as set by the L{extends} decorator) and the extension class object ''' # Any class with the "__extends__" field will be added # (Being subclass of ObjectExtension is optional) module = get_module(pluginklass.__module__) for n, klass in inspect.getmembers(module, inspect.isclass): if hasattr(klass, '__extends__') and klass.__extends__: yield klass.__extends__, klass def set_extension_class(self, extends, klass): '''Set the extension class for a specific target object class This method can be used to dynamically set extension classes on run time. E.g. of the extension class depends on a preference. If another extension class was already defined for the same target object, it is removed. When the plugin is managed by a L{PluginManager} and that manager is aware of objects of the target class, extensions will immediatly be instantiated for those objects. @param extends: class name of the to-be-extended object @param klass: the extension class @emits: extension-point-changed ''' if extends in self.extension_classes: if self.extension_classes[extends] == klass: pass else: self.remove_extension_class(extends) self.add_extension_class(extends, klass) else: self.add_extension_class(extends, klass) def add_extension_class(self, extends, klass): '''Add an extension class for a specific target object class When the plugin is managed by a L{PluginManager} and that manager is aware of objects of the target class, extensions will immediatly be instantiated for those objects. @param extends: class name of the to-be-extended object @param klass: the extension class @emits: extension-point-changed ''' if extends in self.extension_classes: raise AssertionError, 'Extension point %s already in use' % name self.extension_classes[extends] = klass self.emit('extension-point-changed', extends) def remove_extension_class(self, extends): '''Remove the extension class for a specific target object class Will result in all extension objects for this object class to be destroyed. @param extends: class name of the to-be-extended object ''' klass = self.extension_classes.pop(extends) for obj in self.get_extensions(klass): obj.destroy() def extend(self, obj, _name=None): '''This method will look through the extensions defined for this plugin and construct a new extension object if a match is found for C{obj}. @param obj: the obejct to be extended @param _name: lookup name to use when extending the object. To be used for testing only. Normally the class name of C{obj} is used. ''' name = _name or obj.__class__.__name__ if name in self.extension_classes: ext = self.extension_classes[name](self, obj) self.extensions.add(ext) def get_extension(self, klass, **attr): '''Look up an extension object instatiation @param klass: the class of the extention object (_not_ the to-be-extended klass) @param attr: any object attributes that should match @returns: a single extension object or C{None} ''' ext = self.get_extensions(klass) for key, value in attr.items(): ext = filter(lambda e: getattr(e, key) == value, ext) if len(ext) > 1: raise AssertionError, 'BUG: multiple extensions of class %s found' % klass elif ext: return ext[0] else: return None def get_extensions(self, klass): '''Look up extension object instatiations @param klass: the class of the extention object (_not_ the to-be-extended klass) @returns: a list of extension objects (if any) ''' return [e for e in self.extensions if isinstance(e, klass)] def destroy(self): '''Destroy the plugin object and all extensions It is only called when a user actually disables the plugin, not when the application exits. Destroys all active extensions and disconnects all signals. This should revert any changes the plugin made to the application (although preferences etc. can be left in place). ''' for obj in self.extensions: obj.destroy() try: self.disconnect_all() except: logger.exception('Exception while disconnecting %s', self) def extends(eklass, autoload=True): '''Class decorator to define extension classes Use this decorator to add extensions to the plugin. @param eklass: either a class or a class name for the class to be extended by this extension. When the plugin gets an object of this class a new extension object will be constructed. @param autoload: When C{False} this extension is not loaded automatically. This is used for extensions that are loaded on run time using C{PluginClass.set_extension_class()}. ''' if isinstance(eklass, basestring): name = eklass else: name = eklass.__name__ def inner(myklass): if autoload: myklass.__extends__ = name # else: do nothing for now return myklass return inner class ObjectExtension(SignalEmitter, ConnectorMixin): '''Base class for all object extensions Extension objects should derive from this class and use the L{extends()} class decorator to define their target class. Extension objects act as a kind of decorators for their target class and can use the API of the target class object to add all kind of functionality. Typical target classes is the main window in the user interface or a specific dialog in the applicaiton. For these the L{WindowExtension} and L{DialogExtension} base classes are available. Other objects that are typically exted are the Notebook and Index classes. For these you use this base class directly. @ivar plugin: the plugin object to which this extension belongs @ivar obj: the object being extended ''' def __init__(self, plugin, obj): '''Constructor @param plugin: the plugin object to which this extension belongs @param obj: the object being extended ''' self.plugin = plugin self.obj = obj # Make sure extension has same lifetime as object being extended if not hasattr(obj, '__zim_extension_objects__'): obj.__zim_extension_objects__ = [] obj.__zim_extension_objects__.append(self) def destroy(self): '''Called when the plugin is being destroyed Calls L{teardown()} followed by the C{teardown()} methods of parent base classes. ''' def walk(klass): yield klass for base in klass.__bases__: if issubclass(base, ObjectExtension): for k in walk(base): # recurs yield k for klass in walk(self.__class__): try: klass.teardown(self) except: logger.exception('Exception while disconnecting %s (%s)', self, klass) # in case you are wondering: issubclass(Foo, Foo) evaluates True try: self.obj.__zim_extension_objects__.remove(self) except AttributeError: pass except ValueError: pass self.plugin.extensions.discard(self) # HACK avoid waiting for garbage collection to take place def teardown(self): '''Remove changes made by B{this} class from the extended object To be overloaded by child classes @note: do not call parent class C{remove()} here, that is already taken care of by C{destroy()} ''' self.disconnect_all() class WindowExtension(ObjectExtension): '''Base class for extending gtk windows based on C{gtk.Window} The main use of this base class it that it helps adding menu items to the menubar and/or toolbar of the window (if it has any). To do this you need to define a class attribute "uimanager_xml" and define "action" methods in the class. An action method is any object method of the extension method that is decorated by the L{action()} or L{toggle_action()} decorators (see L{zim.actions}). Such a method is called when the user clicks to correcponding menu item or presses the corresponding key binding. The decorator is used to define the text to display in the menu and the key binding. The "uimanager_xml" is used to specify the layout of the menubar and toolbar. Is is a piece of XML that defines the position of the now menu and toolbar items. Each new item should have a name corresponding with a "action" method defined in the same class. See documentation of C{gtk.UIManager} for the XML definition. @ivar window: the C{gtk.Window} @ivar uistate: a L{ConfigDict} o store the extensions ui state or C{None} if the window does not maintain ui state The "uistate" is the per notebook state of the interface, it is intended for stuff like the last folder opened by the user or the size of a dialog after resizing. It is stored in the X{state.conf} file in the notebook cache folder. It differs from the preferences, which are stored globally and dictate the behavior of the application. (To access the preference use C{plugin.preferences}.) ''' def __init__(self, plugin, window): '''Constructor @param plugin: the plugin object to which this extension belongs @param window: the C{gtk.Window} being extended ''' ObjectExtension.__init__(self, plugin, window) self.window = window if hasattr(window, 'ui') and hasattr(window.ui, 'uistate') and window.ui.uistate: # XXX self.uistate = window.ui.uistate[plugin.config_key] else: self.uistate = None if hasattr(self, 'uimanager_xml'): # XXX TODO move uimanager to window actiongroup = get_gtk_actiongroup(self) self.window.ui.uimanager.insert_action_group(actiongroup, 0) self._uimanager_id = self.window.ui.uimanager.add_ui_from_string(self.uimanager_xml) self.connectto(window, 'destroy') def on_destroy(self, window): self.destroy() def teardown(self): # TODO move uimanager to window if hasattr(self, '_uimanager_id') \ and self._uimanager_id is not None: self.window.ui.uimanager.remove_ui(self._uimanager_id) self._uimanager_id = None if hasattr(self, 'actiongroup') \ and self.actiongroup is not None: self.window.ui.uimanager.remove_action_group(self.actiongroup) class DialogExtension(WindowExtension): '''Base class for extending gtk dialogs based on C{gtk.Dialog}''' def __init__(self, plugin, window): assert hasattr(window, 'action_area'), 'Not a dialog: %s' % window WindowExtension.__init__(self, plugin, window) self._dialog_buttons = [] def add_dialog_button(self, button): '''Add a new button to the bottom area of the dialog The button is placed left of the standard buttons like the "OK" / "Cancel" or "Close" button of the dialog. @param button: a C{gtk.Button} or similar widget ''' # This logic adds the button to the action area and places # it left of the left most primary button by reshuffling all # other buttons after adding the new one # # TODO: check if this works correctly in RTL configuration self.window.action_area.pack_end(button, False) # puts button in right most position self._dialog_buttons.append(button) buttons = [b for b in self.window.action_area.get_children() if not self.window.action_area.child_get_property(b, 'secondary')] for b in buttons: if b is not button: self.window.action_area.reorder_child(b, -1) # reshuffle to the right def teardown(self): for b in self._dialog_buttons: self.window.action_area.remove(b) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/sequencediagrameditor.py�������������������������������������������������������0000664�0001750�0001750�00000003545�12521367635�021334� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2011 Greg Warner <gdwarner@gmail.com> # (Pretty much copied from diagrameditor.py) from zim.plugins import PluginClass from zim.plugins.base.imagegenerator import ImageGeneratorPlugin, ImageGeneratorClass from zim.fs import File, TmpFile from zim.applications import Application, ApplicationError # TODO put these commands in preferences diagcmd = ('seqdiag', '-o') class InsertSequenceDiagramPlugin(ImageGeneratorPlugin): plugin_info = { 'name': _('Insert Sequence Diagram'), # T: plugin name 'description': _('''\ This plugin provides a sequence diagram editor for zim based on seqdiag. It allows easy editing of sequence diagrams. '''), # T: plugin description 'help': 'Plugins:Sequence Diagram Editor', 'author': 'Greg Warner', } object_type = 'seqdiagram' short_label = _('Sequence Diagram') # T: menu item insert_label = _('Insert Sequence Diagram') # T: menu item edit_label = _('_Edit Sequence Diagram') # T: menu item syntax = None @classmethod def check_dependencies(klass): has_diagcmd = Application(diagcmd).tryexec() return has_diagcmd, [("seqdiag", has_diagcmd, True)] class SequenceDiagramGenerator(ImageGeneratorClass): uses_log_file = False object_type = 'seqdiagram' scriptname = 'seqdiagram.diag' imagename = 'seqdiagram.png' def __init__(self, plugin): ImageGeneratorClass.__init__(self, plugin) self.diagfile = TmpFile(self.scriptname) self.diagfile.touch() self.pngfile = File(self.diagfile.path[:-5] + '.png') # len('.diag') == 5 def generate_image(self, text): # Write to tmp file self.diagfile.write(text) # Call seqdiag try: diag = Application(diagcmd) diag.run((self.pngfile, self.diagfile)) except ApplicationError: return None, None # Sorry, no log else: return self.pngfile, None def cleanup(self): self.diagfile.remove() self.pngfile.remove() �����������������������������������������������������������������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/zeitgeist-logger.py������������������������������������������������������������0000664�0001750�0001750�00000006633�12374655231�020253� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2011 Marcel Stimberg <stimberg@users.sourceforge.net> '''Push events to the Zeitgeist daemon''' import gio import logging import sys from zim.plugins import PluginClass, ObjectExtension, extends from zim.signals import SIGNAL_AFTER from zim.fs import File logger = logging.getLogger('zim.plugins.zeitgeist') try: from zeitgeist.client import ZeitgeistClient from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation except: ZeitgeistClient = None class ZeitgeistPlugin(PluginClass): plugin_info = { 'name': _('Log events with Zeitgeist'), # T: plugin name 'description': _('Pushes events to the Zeitgeist daemon.'), # T: plugin description 'author': 'Marcel Stimberg', 'help': 'Plugins:Log events with Zeitgeist', } @classmethod def check_dependencies(klass): has_zeitgeist = not ZeitgeistClient is None return has_zeitgeist, [('libzeitgeist', has_zeitgeist, False)] def __init__(self, ui): PluginClass.__init__(self, ui) try: self.zeitgeist_client = ZeitgeistClient() self.zeitgeist_client.register_data_source('application://zim.desktop', 'Zim', _('Zim Desktop Wiki'), []) # T: short description of zim except RuntimeError, e: logger.exception('Loading zeitgeist client failed, will not log events') self.zeitgeist_client = None def create_and_send_event(self, page, event_type): if not self.zeitgeist_client: return if not hasattr(page, 'source') \ or not isinstance(page.source, File): return uri = page.source.uri origin = gio.File(uri).get_parent().get_uri() text = _('Wiki page: %s') % page.name # T: label for how zim pages show up in the recent files menu, %s is the page name subject = Subject.new_for_values(mimetype='text/x-zim-wiki', uri=uri, origin=origin, interpretation=Interpretation.TEXT_DOCUMENT, manifestation=Manifestation.FILE_DATA_OBJECT, text=text) event = Event.new_for_values(actor='application://zim.desktop', interpretation=event_type, manifestation=Manifestation.USER_ACTIVITY, subjects=[subject,]) self.zeitgeist_client.insert_event(event) @extends('PageView') class PageViewExtension(ObjectExtension): def __init__(self, plugin, pageview): self.plugin = plugin self.connectto_all(pageview.ui, # XXX - remove ui here, emit from pageview ('open-page', 'close-page'), order=SIGNAL_AFTER) def on_open_page(self, ui, page, path): logger.debug("Opened page: %s", page.name) self.plugin.create_and_send_event(page, Interpretation.ACCESS_EVENT) def on_close_page(self, ui, page, *a): logger.debug("Left page: %s", page.name) self.plugin.create_and_send_event(page, Interpretation.LEAVE_EVENT) @extends('Notebook') class NotebookExtension(ObjectExtension): def __init__(self, plugin, notebook): self.plugin = plugin self.connectto_all(notebook, ('deleted-page', 'stored-page'), order=SIGNAL_AFTER) def on_deleted_page(self, page, path): logger.debug("Deleted page: %s", page.name) self.plugin.create_and_send_event(page, Interpretation.DELETE_EVENT) def on_stored_page(self, page, path): logger.debug("Modified page: %s", page.name) self.plugin.create_and_send_event(page, Interpretation.MODIFY_EVENT) �����������������������������������������������������������������������������������������������������zim-0.65/zim/plugins/tasklist.py��������������������������������������������������������������������0000664�0001750�0001750�00000120261�12430476165�016617� 0����������������������������������������������������������������������������������������������������ustar �jaap����������������������������jaap����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2009-2012 Jaap Karssenberg <jaap.karssenberg@gmail.com> from __future__ import with_statement import gtk import pango import logging import re import zim.datetimetz as datetime from zim.utils import natural_sorted from zim.parsing import parse_date from zim.plugins import PluginClass, extends, ObjectExtension, WindowExtension from zim.actions import action from zim.notebook import Path from zim.gui.widgets import ui_environment, \ Dialog, MessageDialog, \ InputEntry, Button, IconButton, MenuButton, \ BrowserTreeView, SingleClickTreeView, ScrolledWindow, HPaned, \ encode_markup_text, decode_markup_text from zim.gui.clipboard import Clipboard from zim.signals import DelayedCallback, SIGNAL_AFTER from zim.formats import get_format, \ UNCHECKED_BOX, CHECKED_BOX, XCHECKED_BOX, BULLET, \ PARAGRAPH, NUMBEREDLIST, BULLETLIST, LISTITEM, STRIKE, \ Visitor, VisitorSkip from zim.config import StringAllowEmpty from zim.plugins.calendar import daterange_from_path logger = logging.getLogger('zim.plugins.tasklist') SQL_FORMAT_VERSION = (0, 6) SQL_FORMAT_VERSION_STRING = "0.6" SQL_CREATE_TABLES = ''' create table if not exists tasklist ( id INTEGER PRIMARY KEY, source INTEGER, parent INTEGER, haschildren BOOLEAN, open BOOLEAN, actionable BOOLEAN, prio INTEGER, due TEXT, tags TEXT, description TEXT ); ''' _tag_re = re.compile(r'(?<!\S)@(\w+)\b', re.U) _date_re = re.compile(r'\s*\[d:(.+)\]') _NO_DATE = '9999' # Constant for empty due date - value chosen for sorting properties _NO_TAGS = '__no_tags__' # Constant that serves as the "no tags" tag - _must_ be lower case # FUTURE: add an interface for this plugin in the WWW frontend # TODO allow more complex queries for filter, in particular (NOT tag AND tag) # TODO: think about what "actionable" means # - no open dependencies # - no defer date in the future # - no child item ?? -- hide in flat list ? # - no @waiting ?? -> use defer date for this use case # TODO # commandline option # - open dialog # - output to stdout with configurable format # - force update, intialization class TaskListPlugin(PluginClass): plugin_info = { 'name': _('Task List'), # T: plugin name 'description': _('''\ This plugin adds a dialog showing all open tasks in this notebook. Open tasks can be either open checkboxes or items marked with tags like "TODO" or "FIXME". This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Task List' } plugin_preferences = ( # key, type, label, default ('all_checkboxes', 'bool', _('Consider all checkboxes as tasks'), True), # T: label for plugin preferences dialog ('tag_by_page', 'bool', _('Turn page name into tags for task items'), False), # T: label for plugin preferences dialog ('deadline_by_page', 'bool', _('Implicit due date for task items in calendar pages'), False), # T: label for plugin preferences dialog ('use_workweek', 'bool', _('Flag tasks due on Monday or Tuesday before the weekend'), True), # T: label for plugin preferences dialog ('labels', 'string', _('Labels marking tasks'), 'FIXME, TODO', StringAllowEmpty), # T: label for plugin preferences dialog - labels are e.g. "FIXME", "TODO", "TASKS" ('next_label', 'string', _('Label for next task'), 'Next:', StringAllowEmpty), # T: label for plugin preferences dialog - label is by default "Next" ('nonactionable_tags', 'string', _('Tags for non-actionable tasks'), '', StringAllowEmpty), # T: label for plugin preferences dialog ('included_subtrees', 'string', _('Subtree(s) to index'), '', StringAllowEmpty), # T: subtree to search for tasks - default is the whole tree (empty string means everything) ('excluded_subtrees', 'string', _('Subtree(s) to ignore'), '', StringAllowEmpty), # T: subtrees of the included subtrees to *not* search for tasks - default is none ) _rebuild_on_preferences = ['all_checkboxes', 'labels', 'next_label', 'deadline_by_page', 'nonactionable_tags', 'included_subtrees', 'excluded_subtrees' ] # Rebuild database table if any of these preferences changed. # But leave it alone if others change. def extend(self, obj): name = obj.__class__.__name__ if name == 'MainWindow': index = obj.ui.notebook.index # XXX i_ext = self.get_extension(IndexExtension, index=index) mw_ext = MainWindowExtension(self, obj, i_ext) self.extensions.add(mw_ext) else: PluginClass.extend(self, obj) @extends('Index') class IndexExtension(ObjectExtension): # define signals we want to use - (closure type, return type and arg types) __signals__ = { 'tasklist-changed': (None, None, ()), } def __init__(self, plugin, index): ObjectExtension.__init__(self, plugin, index) self.plugin = plugin self.index = index self.preferences = plugin.preferences self.task_labels = None self.task_label_re = None self.next_label = None self.next_label_re = None self.nonactionable_tags = [] self.included_re = None self.excluded_re = None self.db_initialized = False self._current_preferences = None db_version = self.index.properties['plugin_tasklist_format'] if db_version == '%i.%i' % SQL_FORMAT_VERSION: self.db_initialized = True self._set_preferences() self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) self.connectto_all(self.index, ( ('initialize-db', self.initialize_db, None, SIGNAL_AFTER), ('page-indexed', self.index_page), ('page-deleted', self.remove_page), )) # We don't care about pages that are moved def on_preferences_changed(self, preferences): if self._current_preferences is None \ or not self.db_initialized: return new_preferences = self._serialize_rebuild_on_preferences() if new_preferences != self._current_preferences: self._drop_table() self._set_preferences() # Sets _current_preferences def _set_preferences(self): self._current_preferences = self._serialize_rebuild_on_preferences() if self.preferences['labels']: self.task_labels = [ s.strip() for s in self.preferences['labels'].split(',') if s and not s.isspace() ] else: self.task_labels = [] if self.preferences['next_label']: self.next_label = self.preferences['next_label'] # Adding this avoid the need for things like "TODO: Next: do this next" self.next_label_re = re.compile(r'^' + re.escape(self.next_label) + r':?\s+' ) self.task_labels.append(self.next_label) else: self.next_label = None self.next_label_re = None if self.preferences['nonactionable_tags']: self.nonactionable_tags = [ t.strip('@').lower() for t in self.preferences['nonactionable_tags'].replace(',', ' ').strip().split()] else: self.nonactionable_tags = [] if self.task_labels: regex = r'^(' + '|'.join(map(re.escape, self.task_labels)) + r')(?!\w)' self.task_label_re = re.compile(regex) else: self.task_label_re = None if self.preferences['included_subtrees']: included = [i.strip().strip(':') for i in self.preferences['included_subtrees'].split(',')] included.sort(key=lambda s: len(s), reverse=True) # longest first included_re = '^(' + '|'.join(map(re.escape, included)) + ')(:.+)?$' #~ print '>>>>>', "included_re", repr(included_re) self.included_re = re.compile(included_re) else: self.included_re = None if self.preferences['excluded_subtrees']: excluded = [i.strip().strip(':') for i in self.preferences['excluded_subtrees'].split(',')] excluded.sort(key=lambda s: len(s), reverse=True) # longest first excluded_re = '^(' + '|'.join(map(re.escape, excluded)) + ')(:.+)?$' #~ print '>>>>>', "excluded_re", repr(excluded_re) self.excluded_re = re.compile(excluded_re) else: self.excluded_re = None def _serialize_rebuild_on_preferences(self): # string mapping settings that influence building the table string = '' for pref in self.plugin._rebuild_on_preferences: string += str(self.preferences[pref]) return string def initialize_db(self, index): with index.db_commit: index.db.executescript(SQL_CREATE_TABLES) self.index.properties['plugin_tasklist_format'] = '%i.%i' % SQL_FORMAT_VERSION self.db_initialized = True def teardown(self): self._drop_table() def _drop_table(self): self.index.properties['plugin_tasklist_format'] = 0 try: self.index.db.execute('DROP TABLE "tasklist"') except: if self.db_initialized: logger.exception('Could not drop table:') self.db_initialized = False def _excluded(self, path): if self.included_re and self.excluded_re: # judge which match is more specific # this allows including subnamespace of excluded namespace # and vice versa inc_match = self.included_re.match(path.name) exc_match = self.excluded_re.match(path.name) if not exc_match: return not bool(inc_match) elif not inc_match: return bool(exc_match) else: return len(inc_match.group(1)) < len(exc_match.group(1)) elif self.included_re: return not bool(self.included_re.match(path.name)) elif self.excluded_re: return bool(self.excluded_re.match(path.name)) else: return False def index_page(self, index, path, page): if not self.db_initialized: return #~ print '>>>>>', path, page, page.hascontent tasksfound = self.remove_page(index, path, _emit=False) if self._excluded(path): if tasksfound: self.emit('tasklist-changed') return parsetree = page.get_parsetree() if not parsetree: return #~ print '!! Checking for tasks in', path dates = daterange_from_path(path) if dates and self.preferences['deadline_by_page']: deadline = dates[2] else: deadline = None tasks = self._extract_tasks(parsetree, deadline) if tasks: # Do insert with a single commit with self.index.db_commit: self._insert(path, 0, tasks) if tasks or tasksfound: self.emit('tasklist-changed') def _insert(self, page, parentid, children): # Helper function to insert tasks in table c = self.index.db.cursor() for task, grandchildren in children: task[4] = ','.join(sorted(task[4])) # set to text c.execute( 'insert into tasklist(source, parent, haschildren, open, actionable, prio, due, tags, description)' 'values (?, ?, ?, ?, ?, ?, ?, ?, ?)', (page.id, parentid, bool(grandchildren)) + tuple(task) ) if grandchildren: self._insert(page, c.lastrowid, grandchildren) # recurs def _extract_tasks(self, parsetree, defaultdate=None): '''Extract all tasks from a parsetree. @param parsetree: a L{zim.formats.ParseTree} object @param defaultdate: default due date for the whole page (e.g. for calendar pages) as string @returns: nested list of tasks, each task is given as a 2-tuple, 1st item is a tuple with following properties: C{(open, actionable, prio, due, description)}, 2nd item is a list of child tasks (if any). ''' parser = TasksParser( self.task_label_re, self.next_label_re, self.nonactionable_tags, self.preferences['all_checkboxes'], defaultdate ) parser.parse(parsetree) return parser.get_tasks() def remove_page(self, index, path, _emit=True): if not self.db_initialized: return tasksfound = False with index.db_commit: cursor = index.db.cursor() cursor.execute( 'delete from tasklist where source=?', (path.id,) ) tasksfound = cursor.rowcount > 0 if tasksfound and _emit: self.emit('tasklist-changed') return tasksfound def list_tasks(self, parent=None): '''List tasks @param parent: the parent task (as returned by this method) or C{None} to list all top level tasks @returns: a list of tasks at this level as sqlite Row objects ''' if parent: parentid = parent['id'] else: parentid = 0 if self.db_initialized: cursor = self.index.db.cursor() cursor.execute('select * from tasklist where parent=? order by prio, due, description', (parentid,)) # Want order by prio & due - add desc to keep sorting more or less stable for row in cursor: yield row def get_task(self, taskid): cursor = self.index.db.cursor() cursor.execute('select * from tasklist where id=?', (taskid,)) return cursor.fetchone() def get_path(self, task): '''Get the L{Path} for the source of a task @param task: the task (as returned by L{list_tasks()} @returns: an L{IndexPath} object ''' return self.index.lookup_id(task['source']) @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' <ui> <menubar name='menubar'> <menu action='view_menu'> <placeholder name="plugin_items"> <menuitem action="show_task_list" /> </placeholder> </menu> </menubar> <toolbar name='toolbar'> <placeholder name='tools'> <toolitem action='show_task_list'/> </placeholder> </toolbar> </ui> ''' def __init__(self, plugin, window, index_ext): WindowExtension.__init__(self, plugin, window) self.index_ext = index_ext @action(_('Task List'), stock='zim-task-list', readonly=True) # T: menu item def show_task_list(self): if not self.index_ext.db_initialized: MessageDialog(self.window, ( _('Need to index the notebook'), # T: Short message text on first time use of task list plugin _('This is the first time the task list is opened.\n' 'Therefore the index needs to be rebuild.\n' 'Depending on the size of the notebook this can\n' 'take up to several minutes. Next time you use the\n' 'task list this will not be needed again.' ) # T: Long message text on first time use of task list plugin ) ).run() logger.info('Tasklist not initialized, need to rebuild index') finished = self.window.ui.reload_index(flush=True) # XXX # Flush + Reload will also initialize task list if not finished: self.index_ext.db_initialized = False return dialog = TaskListDialog.unique(self, self.window, self.index_ext, self.plugin.preferences) dialog.present() class TasksParser(Visitor): '''Parse tasks from a parsetree''' def __init__(self, task_label_re, next_label_re, nonactionable_tags, all_checkboxes, defaultdate): self.task_label_re = task_label_re self.next_label_re = next_label_re self.nonactionable_tags = nonactionable_tags self.all_checkboxes = all_checkboxes defaults = (True, True, 0, defaultdate or _NO_DATE, set(), None) # (open, actionable, prio, due, tags, description) self._tasks = [] self._stack = [(-1, defaults, self._tasks)] # Stack for parsed tasks with tuples like (level, task, children) # We need to include the list level in the stack because we can # have mixed bullet lists with checkboxes, so task nesting is # not the same as list nesting # Parsing state self._text = [] # buffer with pieces of text self._depth = 0 # nesting depth for list items self._last_node = (None, None) # (tag, attrib) of last item seen by start() self._intasklist = False # True if we are in a tasklist with a header self._tasklist_tags = None # global tags from the tasklist header def parse(self, parsetree): #~ filter = TreeFilter( #~ TextCollectorFilter(self), #~ tags=['p', 'ul', 'ol', 'li'], #~ exclude=['strike'] #~ ) parsetree.visit(self) def get_tasks(self): '''Get the tasks that were collected by visiting the tree @returns: nested list of tasks, each task is given as a 2-tuple, 1st item is a tuple with following properties: C{(open, actionable, prio, due, description)}, 2nd item is a list of child tasks (if any). ''' return self._tasks def start(self, tag, attrib): if tag == STRIKE: raise VisitorSkip # skip this node elif tag in (PARAGRAPH, NUMBEREDLIST, BULLETLIST, LISTITEM): if tag == PARAGRAPH: self._intasklist = False # Parse previous chuck of text (para level text) if self._text: if tag in (NUMBEREDLIST, BULLETLIST) \ and self._last_node[0] == PARAGRAPH \ and self._check_para_start(self._text): pass else: self._parse_para_text(self._text) self._text = [] # flush # Update parser state if tag in (NUMBEREDLIST, BULLETLIST): self._depth += 1 elif tag == LISTITEM: self._pop_stack() # see comment in end() self._last_node = (tag, attrib) else: pass # do nothing for other tags (we still get the text) def text(self, text): self._text.append(text) def end(self, tag): if tag == PARAGRAPH: if self._text: self._parse_para_text(self._text) self._text = [] # flush self._depth = 0 self._pop_stack() elif tag in (NUMBEREDLIST, BULLETLIST): self._depth -= 1 self._pop_stack() elif tag == LISTITEM: if self._text: attrib = self._last_node[1] self._parse_list_item(attrib, self._text) self._text = [] # flush # Don't pop here, next item may be child # Instead pop when next item opens else: pass # do nothing for other tags def _pop_stack(self): # Drop stack to current level assert self._depth >= 0, 'BUG: stack count corrupted' level = self._depth if level > 0: level -= 1 # first list level should be same as level of line items in para while self._stack[-1][0] >= level: self._stack.pop() def _check_para_start(self, strings): # Check first line for task list header # SHould look like "TODO @foo @bar:" # FIXME shouldn't we depend on tag elements in the tree ?? line = u''.join(strings).strip() if not '\n' in line \ and self._matches_label(line): words = line.strip(':').split() words.pop(0) # label if all(w.startswith('@') for w in words): self._intasklist = True self._tasklist_tags = set(w.strip('@') for w in words) else: self._intasklist = False else: self._intasklist = False return self._intasklist def _parse_para_text(self, strings): # Paragraph text to be parsed - just look for lines with label for line in u''.join(strings).splitlines(): if self._matches_label(line): self._parse_task(line) def _parse_list_item(self, attrib, text): # List item to parse - check bullet, then match label bullet = attrib.get('bullet') line = u''.join(text) if ( bullet in (UNCHECKED_BOX, CHECKED_BOX, XCHECKED_BOX) and (self._intasklist or self.all_checkboxes) ): open = (bullet == UNCHECKED_BOX) self._parse_task(line, open=open) elif self._matches_label(line): self._parse_task(line) def _matches_label(self, line): return self.task_label_re and self.task_label_re.match(line) def _matches_next_label(self, line): return self.next_label_re and self.next_label_re.match(line) def _parse_task(self, text, open=True): level = self._depth if level > 0: level -= 1 # first list level should be same as level of line items in para parent_level, parent, parent_children = self._stack[-1] # Get prio prio = text.count('!') if prio == 0: prio = parent[2] # default to parent prio # Get due date due = _NO_DATE datematch = _date_re.search(text) # first match if datematch: date = parse_date(datematch.group(0)) if date: due = '%04i-%02i-%02i' % date # (y, m, d) if due == _NO_DATE: due = parent[3] # default to parent date (or default for root) # Find tags tags = set(_tag_re.findall(text)) if self._intasklist and self._tasklist_tags: tags |= self._tasklist_tags tags |= parent[4] # add parent tags # Check actionable if not parent[1]: # default parent not actionable actionable = False elif any(t.lower() in self.nonactionable_tags for t in tags): actionable = False elif self._matches_next_label(text) and parent_children: previous = parent_children[-1][0] actionable = not previous[0] # previous task not open else: actionable = True # Parents are not closed if it has open child items if self._depth > 0 and open: for l, t, c in self._stack[1:]: t[0] = True # And finally add to stack task = [open, actionable, prio, due, tags, text] children = [] parent_children.append((task, children)) if self._depth > 0: # (don't add paragraph level items to the stack) self._stack.append((level, task, children)) class TaskListDialog(Dialog): def __init__(self, window, index_ext, preferences): Dialog.__init__(self, window, _('Task List'), # T: dialog title buttons=gtk.BUTTONS_CLOSE, help=':Plugins:Task List', defaultwindowsize=(550, 400) ) self.preferences = preferences self.index_ext = index_ext hbox = gtk.HBox(spacing=5) self.vbox.pack_start(hbox, False) self.hpane = HPaned() self.uistate.setdefault('hpane_pos', 75) self.hpane.set_position(self.uistate['hpane_pos']) self.vbox.add(self.hpane) # Task list self.uistate.setdefault('only_show_act', False) opener = window.get_resource_opener() self.task_list = TaskListTreeView( self.index_ext, opener, filter_actionable=self.uistate['only_show_act'], tag_by_page=preferences['tag_by_page'], use_workweek=preferences['use_workweek'] ) self.task_list.set_headers_visible(True) # Fix for maemo self.hpane.add2(ScrolledWindow(self.task_list)) # Tag list self.tag_list = TagListTreeView(self.index_ext, self.task_list) self.hpane.add1(ScrolledWindow(self.tag_list)) # Filter input hbox.pack_start(gtk.Label(_('Filter')+': '), False) # T: Input label filter_entry = InputEntry() filter_entry.set_icon_to_clear() hbox.pack_start(filter_entry, False) filter_cb = DelayedCallback(500, lambda o: self.task_list.set_filter(filter_entry.get_text())) filter_entry.connect('changed', filter_cb) # Dropdown with options - TODO #~ menu = gtk.Menu() #~ showtree = gtk.CheckMenuItem(_('Show _Tree')) # T: menu item in options menu #~ menu.append(showtree) #~ menu.append(gtk.SeparatorMenuItem()) #~ showall = gtk.RadioMenuItem(None, _('Show _All Items')) # T: menu item in options menu #~ showopen = gtk.RadioMenuItem(showall, _('Show _Open Items')) # T: menu item in options menu #~ menu.append(showall) #~ menu.append(showopen) #~ menubutton = MenuButton(_('_Options'), menu) # T: Button label #~ hbox.pack_start(menubutton, False) self.act_toggle = gtk.CheckButton(_('Only Show Actionable Tasks')) # T: Checkbox in task list self.act_toggle.set_active(self.uistate['only_show_act']) self.act_toggle.connect('toggled', lambda o: self.task_list.set_filter_actionable(o.get_active())) hbox.pack_start(self.act_toggle, False) # Statistics label self.statistics_label = gtk.Label() hbox.pack_end(self.statistics_label, False) def set_statistics(): total, stats = self.task_list.get_statistics() text = ngettext('%i open item', '%i open items', total) % total # T: Label for statistics in Task List, %i is the number of tasks text += ' (' + '/'.join(map(str, stats)) + ')' self.statistics_label.set_text(text) set_statistics() def on_tasklist_changed(o): self.task_list.refresh() self.tag_list.refresh(self.task_list) set_statistics() callback = DelayedCallback(10, on_tasklist_changed) # Don't really care about the delay, but want to # make it less blocking - should be async preferably # now it is at least on idle self.connectto(index_ext, 'tasklist-changed', callback) def do_response(self, response): self.uistate['hpane_pos'] = self.hpane.get_position() self.uistate['only_show_act'] = self.act_toggle.get_active() Dialog.do_response(self, response) class TagListTreeView(SingleClickTreeView): '''TreeView with a single column 'Tags' which shows all tags available in a TaskListTreeView. Selecting a tag will filter the task list to only show tasks with that tag. ''' _type_separator = 0 _type_label = 1 _type_tag = 2 _type_untagged = 3 def __init__(self, index_ext, task_list): model = gtk.ListStore(str, int, int, int) # tag name, number of tasks, type, weight SingleClickTreeView.__init__(self, model) self.get_selection().set_mode(gtk.SELECTION_MULTIPLE) self.index_ext = index_ext self.task_list = task_list column = gtk.TreeViewColumn(_('Tags')) # T: Column header for tag list in Task List dialog self.append_column(column) cr1 = gtk.CellRendererText() cr1.set_property('ellipsize', pango.ELLIPSIZE_END) column.pack_start(cr1, True) column.set_attributes(cr1, text=0, weight=3) # tag name, weight cr2 = self.get_cell_renderer_number_of_items() column.pack_start(cr2, False) column.set_attributes(cr2, text=1) # number of tasks self.set_row_separator_func(lambda m, i: m[i][2] == self._type_separator) self._block_selection_change = False self.get_selection().connect('changed', self.on_selection_changed) self.refresh(task_list) def get_tags(self): '''Returns current selected tags, or None for all tags''' tags = [] for row in self._get_selected(): if row[2] == self._type_tag: tags.append(row[0].decode('utf-8')) elif row[2] == self._type_untagged: tags.append(_NO_TAGS) return tags or None def get_labels(self): '''Returns current selected labels''' labels = [] for row in self._get_selected(): if row[2] == self._type_label: labels.append(row[0].decode('utf-8')) return labels or None def _get_selected(self): selection = self.get_selection() if selection: model, paths = selection.get_selected_rows() if not paths or (0,) in paths: return [] else: return [model[path] for path in paths] else: return [] def refresh(self, task_list): self._block_selection_change = True selected = [(row[0], row[2]) for row in self._get_selected()] # remember name and type # Rebuild model model = self.get_model() if model is None: return model.clear() n_all = self.task_list.get_n_tasks() model.append((_('All Tasks'), n_all, self._type_label, pango.WEIGHT_BOLD)) # T: "tag" for showing all tasks used_labels = self.task_list.get_labels() for label in self.index_ext.task_labels: # explicitly keep sorting from preferences if label in used_labels \ and label != self.index_ext.next_label: model.append((label, used_labels[label], self._type_label, pango.WEIGHT_BOLD)) tags = self.task_list.get_tags() if _NO_TAGS in tags: n_untagged = tags.pop(_NO_TAGS) model.append((_('Untagged'), n_untagged, self._type_untagged, pango.WEIGHT_NORMAL)) # T: label in tasklist plugins for tasks without a tag model.append(('', 0, self._type_separator, 0)) # separator for tag in natural_sorted(tags): model.append((tag, tags[tag], self._type_tag, pango.WEIGHT_NORMAL)) # Restore selection def reselect(model, path, iter): row = model[path] name_type = (row[0], row[2]) if name_type in selected: self.get_selection().select_iter(iter) if selected: model.foreach(reselect) self._block_selection_change = False def on_selection_changed(self, selection): if not self._block_selection_change: tags = self.get_tags() labels = self.get_labels() self.task_list.set_tag_filter(tags, labels) HIGH_COLOR = '#EF5151' # red (derived from Tango style guide - #EF2929) MEDIUM_COLOR = '#FCB956' # orange ("idem" - #FCAF3E) ALERT_COLOR = '#FCEB65' # yellow ("idem" - #FCE94F) # FIXME: should these be configurable ? class TaskListTreeView(BrowserTreeView): VIS_COL = 0 # visible PRIO_COL = 1 TASK_COL = 2 DATE_COL = 3 PAGE_COL = 4 ACT_COL = 5 # actionable OPEN_COL = 6 # item not closed TASKID_COL = 7 TAGS_COL = 8 def __init__(self, index_ext, opener, filter_actionable=False, tag_by_page=False, use_workweek=False): self.real_model = gtk.TreeStore(bool, int, str, str, str, bool, bool, int, object) # VIS_COL, PRIO_COL, TASK_COL, DATE_COL, PAGE_COL, ACT_COL, OPEN_COL, TASKID_COL, TAGS_COL model = self.real_model.filter_new() model.set_visible_column(self.VIS_COL) model = gtk.TreeModelSort(model) model.set_sort_column_id(self.PRIO_COL, gtk.SORT_DESCENDING) BrowserTreeView.__init__(self, model) self.index_ext = index_ext self.opener = opener self.filter = None self.tag_filter = None self.label_filter = None self.filter_actionable = filter_actionable self.tag_by_page = tag_by_page self._tags = {} self._labels = {} # Add some rendering for the Prio column def render_prio(col, cell, model, i): prio = model.get_value(i, self.PRIO_COL) cell.set_property('text', str(prio)) if prio >= 3: color = HIGH_COLOR elif prio == 2: color = MEDIUM_COLOR elif prio == 1: color = ALERT_COLOR else: color = None cell.set_property('cell-background', color) cell_renderer = gtk.CellRendererText() #~ column = gtk.TreeViewColumn(_('Prio'), cell_renderer) # T: Column header Task List dialog column = gtk.TreeViewColumn(' ! ', cell_renderer) column.set_cell_data_func(cell_renderer, render_prio) column.set_sort_column_id(self.PRIO_COL) self.append_column(column) # Rendering for task description column cell_renderer = gtk.CellRendererText() cell_renderer.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn(_('Task'), cell_renderer, markup=self.TASK_COL) # T: Column header Task List dialog column.set_resizable(True) column.set_sort_column_id(self.TASK_COL) column.set_expand(True) if ui_environment['platform'] == 'maemo': column.set_min_width(250) # don't let this column get too small else: column.set_min_width(300) # don't let this column get too small self.append_column(column) self.set_expander_column(column) if gtk.gtk_version >= (2, 12) \ and gtk.pygtk_version >= (2, 12): self.set_tooltip_column(self.TASK_COL) # Rendering of the Date column day_of_week = datetime.date.today().isoweekday() if use_workweek and day_of_week == 4: # Today is Thursday - 2nd day ahead is after the weekend delta1, delta2 = 1, 3 elif use_workweek and day_of_week == 5: # Today is Friday - next day ahead is after the weekend delta1, delta2 = 3, 4 else: delta1, delta2 = 1, 2 today = str( datetime.date.today() ) tomorrow = str( datetime.date.today() + datetime.timedelta(days=delta1)) dayafter = str( datetime.date.today() + datetime.timedelta(days=delta2)) def render_date(col, cell, model, i): date = model.get_value(i, self.DATE_COL) if date == _NO_DATE: cell.set_property('text', '') else: cell.set_property('text', date) # TODO allow strftime here if date <= today: color = HIGH_COLOR elif date <= tomorrow: color = MEDIUM_COLOR elif date <= dayafter: color = ALERT_COLOR # "<=" because tomorrow and/or dayafter can be after the weekend else: color = None cell.set_property('cell-background', color) cell_renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Date'), cell_renderer) # T: Column header Task List dialog column.set_cell_data_func(cell_renderer, render_date) column.set_sort_column_id(self.DATE_COL) self.append_column(column) # Rendering for page name column cell_renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Page'), cell_renderer, text=self.PAGE_COL) # T: Column header Task List dialog column.set_sort_column_id(self.PAGE_COL) self.append_column(column) # Finalize self.refresh() # HACK because we can not register ourselves :S self.connect('row_activated', self.__class__.do_row_activated) def refresh(self): '''Refresh the model based on index data''' # Update data self._clear() self._append_tasks(None, None, {}) # Make tags case insensitive tags = sorted((t.lower(), t) for t in self._tags) # tuple sorting will sort ("foo", "Foo") before ("foo", "foo"), # but ("bar", ..) before ("foo", ..) prev = ('', '') for tag in tags: if tag[0] == prev[0]: self._tags[prev[1]] += self._tags[tag[1]] self._tags.pop(tag[1]) prev = tag # Set view self._eval_filter() # keep current selection self.expand_all() def _clear(self): self.real_model.clear() # flush self._tags = {} self._labels = {} def _append_tasks(self, task, iter, path_cache): for row in self.index_ext.list_tasks(task): if not row['open']: continue # Only include open items for now if row['source'] not in path_cache: path = self.index_ext.get_path(row) if path is None: # Be robust for glitches - filter these out continue else: path_cache[row['source']] = path path = path_cache[row['source']] # Update labels for label in self.index_ext.task_label_re.findall(row['description']): self._labels[label] = self._labels.get(label, 0) + 1 # Update tag count tags = row['tags'].split(',') if self.tag_by_page: tags = tags + path.parts if tags: for tag in tags: self._tags[tag] = self._tags.get(tag, 0) + 1 else: self._tags[_NO_TAGS] = self._tags.get(_NO_TAGS, 0) + 1 # Format description task = _date_re.sub('', row['description'], count=1) task = re.sub('\s*!+\s*', ' ', task) # get rid of exclamation marks task = self.index_ext.next_label_re.sub('', task) # get rid of "next" label in description task = encode_markup_text(task) if row['actionable']: task = _tag_re.sub(r'<span color="#ce5c00">@\1</span>', task) # highlight tags - same color as used in pageview task = self.index_ext.task_label_re.sub(r'<b>\1</b>', task) # highlight labels else: task = r'<span color="darkgrey">%s</span>' % task # Insert all columns modelrow = [False, row['prio'], task, row['due'], path.name, row['actionable'], row['open'], row['id'], tags] # VIS_COL, PRIO_COL, TASK_COL, DATE_COL, PAGE_COL, ACT_COL, OPEN_COL, TASKID_COL, TAGS_COL modelrow[0] = self._filter_item(modelrow) myiter = self.real_model.append(iter, modelrow) if row['haschildren']: self._append_tasks(row, myiter, path_cache) # recurs def set_filter_actionable(self, filter): '''Set filter state for non-actionable items @param filter: if C{False} all items are shown, if C{True} only actionable items ''' self.filter_actionable = filter self._eval_filter() def set_filter(self, string): # TODO allow more complex queries here - same parse as for search if string: inverse = False if string.lower().startswith('not '): # Quick HACK to support e.g. "not @waiting" inverse = True string = string[4:] self.filter = (inverse, string.strip().lower()) else: self.filter = None self._eval_filter() def get_labels(self): '''Get all labels that are in use @returns: a dict with labels as keys and the number of tasks per label as value ''' return self._labels def get_tags(self): '''Get all tags that are in use @returns: a dict with tags as keys and the number of tasks per tag as value ''' return self._tags def get_n_tasks(self): '''Get the number of tasks in the list @returns: total number ''' counter = [0] def count(model, path, iter): if model[iter][self.OPEN_COL]: # only count open items counter[0] += 1 self.real_model.foreach(count) return counter[0] def get_statistics(self): statsbyprio = {} def count(model, path, iter): # only count open items row = model[iter] if row[self.OPEN_COL]: prio = row[self.PRIO_COL] statsbyprio.setdefault(prio, 0) statsbyprio[prio] += 1 self.real_model.foreach(count) if statsbyprio: total = reduce(int.__add__, statsbyprio.values()) highest = max([0] + statsbyprio.keys()) stats = [statsbyprio.get(k, 0) for k in range(highest+1)] stats.reverse() # highest first return total, stats else: return 0, [] def set_tag_filter(self, tags=None, labels=None): if tags: self.tag_filter = [tag.lower() for tag in tags] else: self.tag_filter = None if labels: self.label_filter = [label.lower() for label in labels] else: self.label_filter = None self._eval_filter() def _eval_filter(self): logger.debug('Filtering with labels: %s tags: %s, filter: %s', self.label_filter, self.tag_filter, self.filter) def filter(model, path, iter): visible = self._filter_item(model[iter]) model[iter][self.VIS_COL] = visible if visible: parent = model.iter_parent(iter) while parent: model[parent][self.VIS_COL] = visible parent = model.iter_parent(parent) self.real_model.foreach(filter) self.expand_all() def _filter_item(self, modelrow): # This method filters case insensitive because both filters and # text are first converted to lower case text. visible = True if not modelrow[self.OPEN_COL] \ or (not modelrow[self.ACT_COL] and self.filter_actionable): visible = False description = modelrow[self.TASK_COL].decode('utf-8').lower() pagename = modelrow[self.PAGE_COL].decode('utf-8').lower() tags = [t.lower() for t in modelrow[self.TAGS_COL]] if visible and self.label_filter: # Any labels need to be present for label in self.label_filter: if label in description: break else: visible = False # no label found if visible and self.tag_filter: # Any tag should match if (_NO_TAGS in self.tag_filter and not tags) \ or any(tag in tags for tag in self.tag_filter): visible = True else: visible = False if visible and self.filter: # And finally the filter string should match # FIXME: we are matching against markup text here - may fail for some cases inverse, string = self.filter match = string in description or string in pagename if (not inverse and not match) or (inverse and match): visible = False return visible def do_row_activated(self, path, column): model = self.get_model() page = Path( model[path][self.PAGE_COL] ) text = self._get_raw_text(model[path]) pageview = self.opener.open_page(page) pageview.find(text) def _get_raw_text(self, task): id = task[self.TASKID_COL] row = self.index_ext.get_task(id) return row['description'] def do_initialize_popup(self, menu): item = gtk.ImageMenuItem('gtk-copy') item.connect('activate', self.copy_to_clipboard) menu.append(item) self.populate_popup_expand_collapse(menu) def copy_to_clipboard(self, *a): '''Exports currently visible elements from the tasks list''' logger.debug('Exporting to clipboard current view of task list.') text = self.get_visible_data_as_csv() Clipboard.set_text(text) # TODO set as object that knows how to format as text / html / .. # unify with export hooks def get_visible_data_as_csv(self): text = "" for indent, prio, desc, date, page in self.get_visible_data(): prio = str(prio) desc = decode_markup_text(desc) desc = '"' + desc.replace('"', '""') + '"' text += ",".join((prio, desc, date, page)) + "\n" return text def get_visible_data_as_html(self): html = '''\ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Task List - Zim

    Task List - Zim

    ''' % (HIGH_COLOR, MEDIUM_COLOR, ALERT_COLOR) today = str( datetime.date.today() ) tomorrow = str( datetime.date.today() + datetime.timedelta(days=1)) dayafter = str( datetime.date.today() + datetime.timedelta(days=2)) for indent, prio, desc, date, page in self.get_visible_data(): if prio >= 3: prio = '' % prio elif prio == 2: prio = '' % prio elif prio == 1: prio = '' % prio else: prio = '' % prio if date and date <= today: date = '' % date elif date == tomorrow: date = '' % date elif date == dayafter: date = '' % date else: date = '' % date desc = '' % (' ' * (4 * indent), desc) page = '' % page html += '' + prio + desc + date + page + '\n' html += '''\
    PrioTaskDatePage
    %s%s%s%s%s%s%s%s%s%s%s
    ''' return html def get_visible_data(self): rows = [] def collect(model, path, iter): indent = len(path) - 1 # path is tuple with indexes row = model[iter] prio = row[self.PRIO_COL] desc = row[self.TASK_COL].decode('utf-8') date = row[self.DATE_COL] page = row[self.PAGE_COL].decode('utf-8') if date == _NO_DATE: date = '' rows.append((indent, prio, desc, date, page)) model = self.get_model() model.foreach(collect) return rows # Need to register classes defining gobject signals #~ gobject.type_register(TaskListTreeView) # NOTE: enabling this line causes this treeview to have wrong theming under default ubuntu them !??? zim-0.65/zim/plugins/tags.py0000664000175000017500000007743012603303751015720 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2010 Fabian Moser # Copyright 2011-2014 Jaap Karssenberg import gobject import gtk import pango import logging from zim.plugins import PluginClass, extends, WindowExtension from zim.gui.pageindex import PageTreeStore, PageTreeIter, PageTreeView, \ NAME_COL, PATH_COL, EMPTY_COL, STYLE_COL, FGCOLOR_COL, WEIGHT_COL, N_CHILD_COL, TIP_COL from zim.notebook import Path from zim.index import IndexPath, IndexTag from zim.gui.widgets import LEFT_PANE, PANE_POSITIONS, populate_popup_add_separator, ScrolledWindow, encode_markup_text from zim.gui.clipboard import pack_urilist, INTERNAL_PAGELIST_TARGET_NAME from zim.signals import ConnectorMixin logger = logging.getLogger('zim.plugins.tags') class TagsPlugin(PluginClass): plugin_info = { 'name': _('Tags'), # T: plugin name 'description': _('''\ This plugin provides a page index filtered by means of selecting tags in a cloud. '''), # T: plugin description 'author': 'Fabian Moser', 'help': 'Plugins:Tags', } plugin_preferences = ( # key, type, label, default ('pane', 'choice', _('Position in the window'), LEFT_PANE, PANE_POSITIONS), # T: option for plugin preferences ) @extends('MainWindow') class MainWindowExtension(WindowExtension): def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.widget = TagsPluginWidget(self.window.ui.notebook.index, self.uistate, self.window.ui) # XXX self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) self.uistate.setdefault('vpane_pos', 150) self.widget.set_position(self.uistate['vpane_pos']) def update_uistate(*a): self.uistate['vpane_pos'] = self.widget.get_position() self.widget.connect('notify::position', update_uistate) def on_preferences_changed(self, preferences): if self.widget is None: return try: self.window.remove(self.widget) except ValueError: pass self.window.add_tab(_('Tags'), self.widget, preferences['pane']) self.widget.show_all() def teardown(self): self.window.remove(self.widget) self.widget.disconnect_all() self.widget = None class TagsPluginWidget(ConnectorMixin, gtk.VPaned): '''Widget combining a tag cloud and a tag based page treeview''' def __init__(self, index, uistate, ui): # XXX gtk.VPaned.__init__(self) self.index = index self.uistate = uistate self.uistate.setdefault('treeview', 'tagged', set(['tagged', 'tags'])) self.uistate.setdefault('tagcloud_sorting', 'score', set(['alpha', 'score'])) self.uistate.setdefault('show_full_page_name', True) self.tagcloud = TagCloudWidget(self.index, sorting=self.uistate['tagcloud_sorting']) self.pack1(ScrolledWindow(self.tagcloud), shrink=False) self.treeview = TagsPageTreeView(ui) # XXX self._treeview_mode = (None, None) self.pack2(ScrolledWindow(self.treeview), shrink=False) self.treeview.connect('populate-popup', self.on_populate_popup) self.tagcloud.connect('selection-changed', self.on_cloud_selection_changed) self.tagcloud.connect('sorting-changed', self.on_cloud_sortin_changed) self.connectto_all(ui, ( # XXX 'open-page', ('start-index-update', lambda o: self.disconnect_model()), ('end-index-update', lambda o: self.reload_model()), )) self.reload_model() def on_open_page(self, ui, page, path): expand = True treepath = self.treeview.set_current_page(path, vivificate=True) expand = ui.notebook.namespace_properties[path.name].get('auto_expand_in_index', True) if treepath and expand: # change selection only if necessary selected_path = self.treeview.get_selected_path() if path == selected_path: logger.debug('Already selected: "%s"', path) else: self.treeview.select_treepath(treepath) def toggle_treeview(self): '''Toggle the treeview type in the widget''' if self.uistate['treeview'] == 'tagged': self.uistate['treeview'] = 'tags' else: self.uistate['treeview'] = 'tagged' self.reload_model() def toggle_show_full_page_name(self): self.uistate['show_full_page_name'] = not self.uistate['show_full_page_name'] self.reload_model() def on_populate_popup(self, treeview, menu): # If not a not a page (but e.g. a tag), remove page action if not treeview.get_selected_path(): for item in menu.get_children(): menu.remove(item) # Add a popup menu item to switch the treeview mode populate_popup_add_separator(menu, prepend=True) item = gtk.CheckMenuItem(_('Show full page name')) # T: menu option item.set_active(self.uistate['show_full_page_name']) item.connect_object('toggled', self.__class__.toggle_show_full_page_name, self) menu.prepend(item) item = gtk.CheckMenuItem(_('Sort pages by tags')) # T: menu option item.set_active(self.uistate['treeview'] == 'tags') item.connect_object('toggled', self.__class__.toggle_treeview, self) menu.prepend(item) menu.show_all() def on_cloud_selection_changed(self, cloud): filter = cloud.get_tag_filter() type, was_filtered = self._treeview_mode is_filtered = (filter is not None) if type == 'tagged' and was_filtered != is_filtered: # Switch between tag view and normal index or vice versa self._reload_model(type, filter) else: self.treeview.set_tag_filter(filter) def on_cloud_sortin_changed(self, cloud, sorting): self.uistate['tagcloud_sorting'] = sorting def disconnect_model(self): '''Stop the model from listening to the index. Used to unhook the model before reloading the index. Typically should be followed by reload_model(). ''' self.treeview.disconnect_index() self.tagcloud.disconnect_index() def reload_model(self): '''Re-initialize the treeview model. This is called when reloading the index to get rid of out-of-sync model errors without need to close the app first. ''' assert self.uistate['treeview'] in ('tagged', 'tags') if self.tagcloud.index is None: self.tagcloud.set_index(self.index) type = self.uistate['treeview'] filter = self.tagcloud.get_tag_filter() self._reload_model(type, filter) def _reload_model(self, type, filter): if type == 'tagged': if filter is None: model = DuplicatePageTreeStore(self.index) # show the normal index in this case else: model = TaggedPageTreeStore(self.index, self.uistate['show_full_page_name']) elif type == 'tags': model = TagsPageTreeStore(self.index, self.uistate['show_full_page_name']) else: assert False is_filtered = (filter is not None) self._treeview_mode = (type, is_filtered) self.treeview.set_model(model, filter) class PageTreeTagIter(object): '''Simple wrapper for IndexTag objects used as tree iters This class is used mixed with PageTreeIter but does not derive from it. Any method that assumes PageTreeIter will fail if it suddenly encounters a PageTreeTagIter, this is intentional. ''' __slots__ = ('indextag', 'treepath', 'n_children') def __init__(self, treepath, indextag): self.treepath = treepath self.indextag = indextag self.n_children = None # None means unknown def __repr__(self): return '' % (self.treepath, self.indextag.name) class DuplicatePageTreeStore(PageTreeStore): '''Sub-class of PageTreeStore that allows for the same page appearing multiple times in the tree. ''' def set_current_page(self, path): '''Since there may be duplicates of each page, highlight all of them''' oldpath = self.current_page self.current_page = path for mypath in (oldpath, path): if mypath: for treepath in self.get_treepaths(mypath): if treepath: treeiter = self.get_iter(treepath) self.emit('row-changed', treepath, treeiter) def get_treepath(self, path): # Just returns the first treepath matching notebook path treepaths = self.get_treepaths(path) if treepaths: return treepaths[0] else: return None def get_treepaths(self, path): '''Return all treepaths matching notebook path 'path' Default implementation assumes we are a non-duplicate treeview after all and uses L{PageTreeStore.get_treepath()}. @implementation: must be overloaded by subclasses that are real duplicate stores ''' return [PageTreeStore.get_treepath(self, path)] class TagsPageTreeStore(DuplicatePageTreeStore): '''Subclass of the PageTreeStore that shows tags as the top level for sub-sets of the page tree. A special top level item 'untagged' is created with all the untagged (top level) pages. ''' filter_depth = 2 # tag filter applies to top two levels def __init__(self, index, show_full_page_name=True): self._reverse_cache = {} self.show_full_page_name = show_full_page_name self.untagged = IndexTag(_('untagged'), -1) # T: label for untagged pages in side pane PageTreeStore.__init__(self, index) def _connect(self): def on_page_changed(o, path, signal): #~ print '!!', signal, path self._flush() treepaths = self.get_treepaths(path) for treepath in treepaths: #~ print '!!', signal, path, treepath try: treeiter = self.get_iter(treepath) except: logger.exception('BUG: Invalid treepath: %s %s %s', signal, path, treepath) else: self.emit(signal, treepath, treeiter) def on_page_deleted(o, path): #~ print '!! page delete', path treepaths = self.get_treepaths(path) for treepath in treepaths: self.emit('row-deleted', treepath) self._flush() def on_tag_created(o, tag): self._flush() treepath = (self.index.get_tag_index(tag) + 1,) treeiter = self.get_iter(treepath) #~ print '!! tag created', tag, treepath self.row_inserted(treepath, treeiter) def on_tag_to_be_inserted(o, tag, path, first): if first and not path.namespace: # Remove from untagged branch treepath = (0, self.index.get_untagged_root_page_index(path)) #~ print '!! removed from untagged', treepath self.row_deleted(treepath) self._flush() def on_tag_inserted(o, tag, path, first): if first and not path.namespace: # Finish update of untagged branch if not self.index.n_list_untagged_root_pages(): treeiter = self.get_iter((0,)) self.row_has_child_toggled((0,), treeiter) # Add to tag branch self._flush() tagindex = self.index.get_tag_index(tag) pageindex = self.index.get_tagged_page_index(tag, path) treepath = (tagindex + 1, pageindex) treeiter = self.get_iter(treepath) #~ print '!! tag inserted', tag, treepath self.row_inserted(treepath, treeiter) if not path.hasdata: path = self.index.lookup_data(path) if path.haschildren: self.row_has_child_toggled(treepath, treeiter) def on_tag_to_be_removed(o, tag, path, last): # Remove from tag branch tagindex = self.index.get_tag_index(tag) pageindex = self.index.get_tagged_page_index(tag, path) treepath = (tagindex + 1, pageindex) #~ print '!! tag removed', tag, treepath self.row_deleted(treepath) self._flush() def on_tag_removed(o, tag, path, last): if last and not path.namespace: # Add to untagged pageindex = self.index.get_untagged_root_page_index(path) treepath = (0, pageindex) treeiter = self.get_iter(treepath) #~ print '!! new untagged', treepath if self.index.n_list_untagged_root_pages() == 1: treeiter = self.get_iter((0,)) self.row_has_child_toggled((0,), treeiter) self.row_inserted(treepath, treeiter) def on_tag_to_be_deleted(o, tag): treepath = (self.index.get_tag_index(tag) + 1,) #~ print '!! tag deleted', tag, treepath self.row_deleted(treepath) self._flush() self.connectto_all(self.index, ( ('page-inserted', on_page_changed, 'row-inserted'), ('page-updated', on_page_changed, 'row-changed'), ('page-haschildren-toggled', on_page_changed, 'row-has-child-toggled'), ('page-to-be-deleted', on_page_deleted), # TODO: Treat tag-inserted and new tag differently ('tag-created', on_tag_created), ('tag-to-be-inserted', on_tag_to_be_inserted), ('tag-inserted', on_tag_inserted), ('tag-to-be-removed', on_tag_to_be_removed), ('tag-removed', on_tag_removed), ('tag-to-be-deleted', on_tag_to_be_deleted), )) # The page-to-be-deleted signal is a hack so we have time to ensure we know the # treepath of this indexpath - once we get page-deleted it is to late to get this def _get_iter(self, treepath): '''Convert the tree hierarchy to a PageTreeIter''' # Take care of caching and make sure we keep ref to paths long # enough while they are used in an iter. Also schedule a flush # to be execute as soon as the loop is idle again. # The cache is a dict which takes treepath tuples as keys and # has pagetreeiter objects as values, it is filled on demand. # No TreePath gtk object, treepaths are just tuples of ints # Path (0,) is the first item in the root namespace # Path (2, 4) is the 5th child of the 3rd item #~ print '>>> Lookup path', treepath if not treepath in self._cache: parent = None for i in range(1, len(treepath)+1): mytreepath = treepath[:i] if not mytreepath in self._cache: parenttreepath = treepath[:i-1] offset = mytreepath[-1] if parent is None: # The first tree level are tags #~ print '>>>> Load taglist' if offset == 0: iter = PageTreeTagIter((0,), self.untagged) self._cache.setdefault((0,), iter) else: tags = self.index.list_all_tags(offset-1, limit=20) # offset -1 because we use 0 for untagged for j, path in enumerate(tags): childtreepath = parenttreepath + (offset + j,) iter = PageTreeTagIter(childtreepath, path) self._cache.setdefault(childtreepath, iter) else: #~ print '>>>> Load pagelist for', parent, 'offset', offset if isinstance(parent, IndexTag): if parent == self.untagged: pages = self.index.list_untagged_root_pages(offset, limit=20) else: pages = self.index.list_tagged_pages(parent, offset, limit=20) else: pages = self.index.list_pages(parent, offset, limit=20) for j, path in enumerate(pages): childtreepath = parenttreepath + (offset + j,) iter = PageTreeIter(childtreepath, path) self._cache.setdefault(childtreepath, iter) try: iter = self._cache[mytreepath] except KeyError: return None else: if isinstance(iter, PageTreeTagIter): parent = iter.indextag else: parent = iter.indexpath #~ print '>>> Return', self._cache.get(treepath, None) self._schedule_flush() return self._cache.get(treepath, None) def _flush(self): self._reverse_cache = {} return PageTreeStore._flush(self) def get_treepath(self, path): if isinstance(path, IndexTag): if path == self.untagged: return (0,) else: return (self.index.get_tag_index(path) + 1,) else: return DuplicatePageTreeStore.get_treepath(self, path) def get_treepaths(self, path): '''Convert a Zim path to tree hierarchy, in general results in multiple matches ''' if isinstance(path, IndexTag): treepath = self.get_treepath(path) #~ print ">>> Found", path, '->', treepath if treepath: return (treepath,) else: return () else: assert isinstance(path, Path) if path.isroot: raise ValueError path = self.index.lookup_path(path) if path is None or not path.hasdata: return () # See if it is in cache already if path in self._reverse_cache: #~ print '>>> Return from cache', path, "->", self._reverse_cache[path] return self._reverse_cache[path] # Try getting it while populating cache paths = list(path.parents()) paths.pop() # get rid of root namespace as parent paths.insert(0, path) child = None childpath = () # partial treepath for child part treepaths = [] for p in paths: # iter from child to parents if child: pageindex = self.index.get_page_index(child) childpath = (pageindex,) + childpath # Get tags of this path tags = list(self.index.list_tags(p)) for t in tags: tagindex = self.index.get_tag_index(t) + 1 # +1 due to untagged pageindex = self.index.get_tagged_page_index(t, p) treepaths.append((tagindex, pageindex) + childpath) child = p root_page = paths[-1] try: pageindex = self.index.get_untagged_root_page_index(root_page) except ValueError: pass else: treepaths.append((0, pageindex) + childpath) treepaths.sort() #~ print ">>> Found", path, "->", treepaths self._reverse_cache[path] = treepaths self._schedule_flush() return treepaths def get_indexpath(self, treeiter): '''Returns an IndexPath for a TreeIter or None''' # Note that iter is TreeIter here, not PageTreeIter iter = self.get_user_data(treeiter) if isinstance(iter, PageTreeIter): return iter.indexpath else: return None def get_indextag(self, treeiter): '''Returns an IndexTag for a TreeIter or None''' # Note that iter is TreeIter here, not PageTreeIter iter = self.get_user_data(treeiter) if isinstance(iter, PageTreeTagIter): return iter.indextag else: return None def on_iter_has_child(self, iter): '''Returns True if the iter has children''' if isinstance(iter, PageTreeTagIter): if iter.indextag == self.untagged: return self.index.n_list_untagged_root_pages() > 0 else: return self.index.n_list_tagged_pages(iter.indextag) > 0 else: return PageTreeStore.on_iter_has_child(self, iter) def on_iter_n_children(self, iter): '''Returns the number of children in a namespace. As a special case, when iter is None the number of tags is given. ''' if iter is None: return self.index.n_list_all_tags() + 1 # +1 to include untagged elif isinstance(iter, PageTreeTagIter): if iter.indextag == self.untagged: return self.index.n_list_untagged_root_pages() else: return self.index.n_list_tagged_pages(iter.indextag) else: return PageTreeStore.on_iter_n_children(self, iter) def on_get_value(self, iter, column): '''Returns the data for a specific column''' if isinstance(iter, PageTreeTagIter): tag = iter.indextag if column == NAME_COL: return tag.name elif column == TIP_COL: return encode_markup_text(tag.name) elif column == PATH_COL: return tag elif column == EMPTY_COL: return tag == self.untagged elif column == STYLE_COL: if tag == self.untagged: return pango.STYLE_ITALIC else: return pango.STYLE_NORMAL elif column == FGCOLOR_COL: if tag == self.untagged: return self.EMPTY_COLOR else: return self.NORMAL_COLOR elif column == WEIGHT_COL: return pango.WEIGHT_NORMAL # TODO: use this property to show tags in current page? elif column == N_CHILD_COL: return '' ## Due to multiple tag filtering this result is no good.. #~ if tag == self.untagged: #~ return str(self.index.n_list_untagged_root_pages()) #~ else: #~ return str(self.index.n_list_tagged_pages(tag)) else: if column == NAME_COL and self.show_full_page_name: # Show top level pages with full contex # top level tree is tags, so top level pages len(path) is 2 if len(iter.treepath) <= 2: return iter.indexpath.name else: return iter.indexpath.basename else: return PageTreeStore.on_get_value(self, iter, column) class TaggedPageTreeStore(DuplicatePageTreeStore): ''' A TreeModel that lists all Zim pages in a flat list filtered by tags. Pages with associated sub-pages still show them as sub-nodes. ''' filter_depth = 1 # tag filter only applies to top level def __init__(self, index, show_full_page_name=True): PageTreeStore.__init__(self, index) self._reverse_cache = {} self.show_full_page_name = show_full_page_name def _connect(self): def on_page_changed(o, path, signal): self._flush() treepaths = self.get_treepaths(path) for treepath in treepaths: treeiter = self.get_iter(treepath) self.emit(signal, treepath, treeiter) def on_page_deleted(o, path): treepaths = self.get_treepaths(path) for treepath in treepaths: self.emit('row-deleted', treepath) self._flush() self.connectto_all(self.index, ( ('page-inserted', on_page_changed, 'row-inserted'), ('page-updated', on_page_changed, 'row-changed'), ('page-haschildren-toggled', on_page_changed, 'row-has-child-toggled'), ('page-to-be-deleted', on_page_deleted), )) def _get_iter(self, treepath): ''' Cached conversion of the tree hierarchy to a PageTreeIter. @param treepath: A tuple of int e.g. (0,) is the first item in the root namespace. @returns: A PageTreeIter instance corresponding to the given path ''' if not treepath in self._cache: parent = None for i in xrange(1, len(treepath) + 1): leveltreepath = treepath[:i] if not leveltreepath in self._cache: parenttreepath = leveltreepath[:-1] offset = leveltreepath[-1] if parent is None: pages = self.index.list_all_pages(offset, limit = 20) else: pages = self.index.list_pages(parent, offset, limit=20) for j, path in enumerate(pages): childtreepath = parenttreepath + (offset + j,) iter = PageTreeIter(childtreepath, path) self._cache.setdefault(childtreepath, iter) if leveltreepath in self._cache: parent = self._cache[leveltreepath].indexpath else: return None self._schedule_flush() # Clear the cache when idle return self._cache.get(treepath, None) def _flush(self): self._reverse_cache = {} return PageTreeStore._flush(self) def get_treepaths(self, path): ''' Cached conversion of a Zim path to a node in the tree hierarchy, i.e. the inverse operation of _get_iter. @param path: Usually an IndexPath instance @returns: A list of tuples of ints (one page can be represented many times) ''' assert isinstance(path, Path) if path.isroot: raise ValueError # There can be no tree node for the tree root path = self.index.lookup_path(path) if path is None or not path.hasdata: return () # See if it is in cache already if path in self._reverse_cache: return self._reverse_cache[path] paths = [path] + list(path.parents())[:-1] # Zim paths for the path and all parents (except root) child = None childpath = () treepaths = [] for p in paths: if child: pageindex = self.index.get_page_index(child) childpath = (pageindex,) + childpath pageindex = self.index.get_all_pages_index(p) treepaths.append((pageindex,) + childpath) child = p treepaths.sort() self._reverse_cache[path] = treepaths self._schedule_flush() return treepaths def on_iter_n_children(self, iter): '''Returns the number of children in a namespace. As a special case, when iter is None the number of pages in the root namespace is given. ''' if iter is None: return self.index.n_list_all_pages() else: return PageTreeStore.on_iter_n_children(self, iter) def on_get_value(self, iter, column): '''Returns the data for a specific column''' if column == NAME_COL and self.show_full_page_name: # Show top level pages with full contex if len(iter.treepath) == 1: return iter.indexpath.name else: return iter.indexpath.basename else: return PageTreeStore.on_get_value(self, iter, column) class TagsPageTreeView(PageTreeView): def __init__(self, ui, model=None): PageTreeView.__init__(self, ui) self.set_name('zim-tags-pagelist') self._tag_filter = None if model: self.set_model(model) def set_model(self, model, filter=None): '''Set the model to be used''' # disconnect previous model oldmodel = self.get_model() if oldmodel: childmodel = oldmodel.get_model() childmodel.disconnect_index() # Filter is also provided here, just to make it more efficient to # set model and filter in one go without need for refilter self._set_tag_filter(filter) # set new model def func(model, iter): index = self.ui.notebook.index if self._tag_filter is None: return True # no filtering else: iter = model.get_user_data(iter) if len(iter.treepath) > model.filter_depth: return True # deeper levels are not filtered at all else: if isinstance(iter, PageTreeTagIter): # -> tag return iter.indextag in self._tag_filter[1] # show filtered tags else: # PageTreeIter -> page tags = frozenset(index.list_tags(iter.indexpath)) return tags >= self._tag_filter[0] # match all selected tags filtermodel = model.filter_new(root = None) filtermodel.set_visible_func(func) # HACK add some methods and attributes # (can not subclass gtk.TreeModelFilter because it lacks a constructor) def get_indexpath(treeiter): childiter = filtermodel.convert_iter_to_child_iter(treeiter) if childiter: return model.get_indexpath(childiter) else: return None def get_treepath(path): for treepath in model.get_treepaths(path): filtered = filtermodel.convert_child_path_to_path(treepath) if not filtered is None: return filtered else: return None def get_treepaths(path): treepaths = model.get_treepaths(path) if treepaths: treepaths = map(filtermodel.convert_child_path_to_path, treepaths) return tuple(t for t in treepaths if not t is None) else: return () filtermodel.get_indexpath = get_indexpath filtermodel.get_treepath = get_treepath filtermodel.get_treepaths = get_treepaths filtermodel.index = model.index filtermodel.set_current_page = model.set_current_page PageTreeView.set_model(self, filtermodel) def set_tag_filter(self, filter): '''Sets the tags to filter on. The filter should be a tuple of two lists of tags, or None to not do any filtering. First list of tags are the tags that we filter on, so only pages matching all these tags should be selected. Second set is a superset of the first set and includes all tags that appear in one of the selected pages. So selecting one of these tags on top of the current selection should result in a subset of the current page selection. ''' self._set_tag_filter(filter) model = self.get_model() if model: model.refilter() def _set_tag_filter(self, filter): if not filter: self._tag_filter = None else: self._tag_filter = (frozenset(filter[0]), frozenset(filter[1])) def do_drag_data_get(self, dragcontext, selectiondata, info, time): assert selectiondata.target == INTERNAL_PAGELIST_TARGET_NAME model, iter = self.get_selection().get_selected() path = model.get_indexpath(iter) if isinstance(path, IndexTag): link = '@' + path.name else: link = path.name logger.debug('Drag data requested, we have internal tag/path "%s"', link) data = pack_urilist((link,)) selectiondata.set(INTERNAL_PAGELIST_TARGET_NAME, 8, data) def set_current_page(self, path, vivificate=False): '''Set the current page in the treeview @param path: a notebook L{Path} object for the page @keyword vivificate: when C{True} the path is created temporarily when it did not yet exist @returns: a gtk TreePath (tuple of intergers) or C{None} ''' #~ print '!! SELECT', path model = self.get_model() if model is None: return None # index not yet initialized ... treepath = model.get_treepath(path) if not treepath: if vivificate: # path does not exist, but we can create it path = model.index.touch(path) treepath = model.get_treepath(path) if not treepath \ and isinstance(model, gtk.TreeModelFilter): return None # path is filtered assert treepath, 'BUG: failed to touch placeholder' else: # path does not exist and we are not going to create it return None rowreference = gtk.TreeRowReference(model, treepath) # make reference before cleanup - path may change if self._cleanup and self._cleanup.valid(): mytreepath = self._cleanup.get_path() if mytreepath != treepath: indexpath = model.get_indexpath( model.get_iter(mytreepath) ) #~ print '!! CLEANUP', indexpath model.index.cleanup(indexpath) self._cleanup = rowreference model.set_current_page(path) # highlight in model return treepath # Need to register classes defining gobject signals gobject.type_register(TagsPageTreeView) class TagCloudItem(gtk.ToggleButton): '''Button item used on the tag cloud widget''' def __init__(self, indextag): gtk.ToggleButton.__init__(self, indextag.name, use_underline=False) self.set_relief(gtk.RELIEF_NONE) self.indextag = indextag def update_label(self): # Make button text bold when active label = self.get_child() if self.get_active(): label.set_markup(''+label.get_text()+'') else: label.set_text(label.get_text()) # get_text() gives string without markup self.connect_after('toggled', update_label) class TagCloudWidget(ConnectorMixin, gtk.TextView): '''Text-view based list of tags, where each tag is represented by a button inserted as a child in the textview. @signal: C{selection-changed ()}: emitted when tag selection changes @signal: C{sorting-changed ()}: emitted when tag sorting changes ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'selection-changed': (gobject.SIGNAL_RUN_LAST, None, ()), 'sorting-changed': (gobject.SIGNAL_RUN_LAST, None, (object,)), } def __init__(self, index, sorting='score'): gtk.TextView.__init__(self, None) # Create TextBuffer implicitly self.set_name('zim-tags-tagcloud') self.index = None self.set_editable(False) self.set_cursor_visible(False) self.set_wrap_mode(gtk.WRAP_CHAR) self.set_sorting(sorting) self.set_index(index) def set_index(self, index): '''Connect to an Index object''' self.disconnect_index() # just to be sure self.index = index self.connectto_all(self.index, ( ('tag-created', self._update), ('tag-deleted', self._update), )) self._update() def set_sorting(self, sorting): self._alphabetically = (sorting == 'alpha') def disconnect_index(self): '''Stop the model from listening to the index. Used to unhook the model before reloading the index. ''' self.disconnect_from(self.index) self._clear() self.index = None def get_tag_filter(self): '''Returns a tuple with two lists of tags; the first gives all tags that are selected, the second gives all tags shown in the cloud. By definition the first list is a subset of the second. If no tags are selected returns None instead. ''' selected = [] filtered = [] for button in self.get_children(): filtered.append(button.indextag) if button.get_active(): selected.append(button.indextag) if selected: return (selected, filtered) else: return None def _clear(self): '''Clears the cloud''' self.foreach(lambda b: self.remove(b)) buffer = self.get_buffer() buffer.delete(*buffer.get_bounds()) def _update(self, *a): '''Update the cloud to show only tags that share a set of pages with the selected tags.''' selected = [b.indextag for b in self.get_children() if b.get_active() and self.index.lookup_tag(b.indextag.name)] # Need the lookup here in case the tag went missing in the # mean time e.g. due to editing of the page self._clear() buffer = self.get_buffer() if selected: tags = self.index.list_intersecting_tags(selected) else: tags = [] if not tags: tags = self.index.list_all_tags_by_score() # Can be we have a "selected", but the selected tags have # disappeared and thus list_intersecting returns empty if self._alphabetically: tags = sorted(tags, key=lambda t: t.name) # else leave sorted by score for tag in tags: iter = buffer.get_end_iter() anchor = buffer.create_child_anchor(iter) button = TagCloudItem(tag) button.set_active(tag in selected) button.connect("toggled", lambda b: self._update()) self.add_child_at_anchor(button, anchor) self.show_all() self.emit('selection-changed') def do_populate_popup(self, menu): populate_popup_add_separator(menu, prepend=True) item = gtk.CheckMenuItem(_('Sort alphabetically')) # T: Context menu item for tag cloud item.set_active(self._alphabetically) item.connect('toggled', self._switch_sorting) item.show_all() menu.prepend(item) def _switch_sorting(self, widget, *a): self._alphabetically = widget.get_active() self._update() if self._alphabetically: self.emit('sorting-changed', 'alpha') else: self.emit('sorting-changed', 'score') # Need to register classes defining gobject signals gobject.type_register(TagCloudWidget) zim-0.65/zim/plugins/ditaaeditor.py0000664000175000017500000000357212521367653017261 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # # ditaaeditor.py # # This is a plugin for Zim, which allows coverting ASCII art into proper bitmap # graphics. # # # Author: Yao-Po Wang # Date: 2012-03-11 # Copyright (c) 2012, released under the GNU GPL v2 or higher # # from zim.plugins.base.imagegenerator import ImageGeneratorPlugin, ImageGeneratorClass from zim.fs import File, TmpFile from zim.config import data_file from zim.applications import Application, ApplicationError # TODO put these commands in preferences dotcmd = ('ditaa') class InsertDitaaPlugin(ImageGeneratorPlugin): plugin_info = { 'name': _('Insert Ditaa'), # T: plugin name 'description': _('''\ This plugin provides a diagram editor for zim based on Ditaa. This is a core plugin shipping with zim. '''), # T: plugin description 'help': 'Plugins:Ditaa Editor', 'author': 'Yao-Po Wang', } object_type = 'ditaa' short_label = _('Ditaa') # T: menu item insert_label = _('Insert Ditaa') # T: menu item edit_label = _('_Edit Ditaa') # T: menu item syntax = None @classmethod def check_dependencies(klass): has_dotcmd = Application(dotcmd).tryexec() return has_dotcmd, [("Ditaa", has_dotcmd, True)] class DitaaGenerator(ImageGeneratorClass): uses_log_file = False object_type = 'ditaa' scriptname = 'ditaa.dia' imagename = 'ditaa.png' def __init__(self, plugin): ImageGeneratorClass.__init__(self, plugin) self.dotfile = TmpFile(self.scriptname) self.dotfile.touch() self.pngfile = File(self.dotfile.path[:-4] + '.png') # len('.dot') == 4 def generate_image(self, text): # Write to tmp file self.dotfile.write(text) # Call GraphViz try: dot = Application(dotcmd) dot.run((self.dotfile, '-o', self.pngfile)) except ApplicationError: return None, None # Sorry, no log else: return self.pngfile, None def cleanup(self): self.dotfile.remove() self.pngfile.remove() zim-0.65/zim/plugins/versioncontrol/0000775000175000017500000000000012615422672017472 5ustar jaapjaap00000000000000zim-0.65/zim/plugins/versioncontrol/git.py0000664000175000017500000001374312400330653020624 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2012 Jaap Karssenberg # Copyright 2010,2011 John Drinkwater # Copyright 2012 Damien Accorsi from __future__ import with_statement import os import logging from zim.plugins.versioncontrol import VCSApplicationBase from zim.applications import Application logger = logging.getLogger('zim.vcs.git') class GITApplicationBackend(VCSApplicationBase): @classmethod def build_bin_application_instance(cls): return Application(('git',), encoding='utf-8') def build_revision_arguments(self, versions, is_for_diff=False): """Build a list including required string/int for running an VCS command # Accepts: None, int, string, (int,), (int, int) # Always returns a list # versions content: - None: return an empty list - int ou string: return ['-r', int] - tuple or list: return ['-r', '%i..%i'] It's all based on the fact that defining revision with current VCS is: -r revision -r rev1..rev2 """ if is_for_diff==True: if len(versions) == 2: versions.reverse() return ['..'.join(versions)] elif len(versions) == 1: return [versions[0] + '^'] else: return [] else: if isinstance(versions, (tuple, list)): assert 1 <= len(versions) <= 2 if len(versions) == 2: return map(str, versions) else: versions = versions[0] if not versions is None: version = str(versions) return [version] else: return [] ######## # # NOW ARE ALL REVISION CONTROL SYSTEM SHORTCUTS def add(self, path=None): """ Runs: git add {{PATH}} """ if path is None: return self.run(['add', self.notebook_dir]) else: return self.run(['add', path]) def annotate(self, file, version): """FIXME Document return 0: line1 2: line1 ... """ revision_args = self.build_revision_arguments(version) return self.pipe(['blame', '-s', file] + revision_args) def cat(self, path, version): """ Runs: git cat {{PATH}} {{REV_ARGS}} """ revision_args = self.build_revision_arguments(version) return self.pipe(['show', ''.join( [ ''.join(revision_args), ':', path.relpath(self.root) ] )]) def commit(self, path, msg): """ Runs: git commit -a -m {{MSG}} {{PATH}} """ if self.is_modified(): params = ['commit', '-a'] if msg!='' and msg!=None: params.append('-m') params.append(msg) if path!='' and path!=None: params.append('--') params.append(path) return self.run(params) def diff(self, versions, path=None): """ Runs: git diff --no-ext-diff {{REVISION_ARGS}} or git diff --no-ext-diff {{REVISION_ARGS}} -- {{PATH}} """ revision_args = self.build_revision_arguments(versions) revision_args = self.build_revision_arguments(revision_args, is_for_diff=True) if path==None: return self.pipe(['diff', '--no-ext-diff'] + revision_args) else: return self.pipe(['diff', '--no-ext-diff'] + revision_args + ['--', path]) def ignore(self, file_to_ignore_regexp): """ Build a .gitignore file including the file_to_ignore_content """ #TODO: append the rule instead of overwrite the full content self.root.file( '.gitignore' ).write( file_to_ignore_regexp ) def init_repo(self): self.init() self.ignore(".zim/\n") self.add('.') # add all existing files def repo_exists(self): return self.root.subdir('.git').exists() or self.root.file('.git').exists() def init(self): """ Runs: git init """ return self.run(['init']) def is_modified(self): """Returns true if the repo is not up-to-date, or False @returns: True if the repo is not up-to-date, or False """ # If status return an empty answer, this means the local repo is up-to-date status = ''.join( self.pipe(['status', '--porcelain']) ) return bool(status.strip()) def log(self, path=None): """ Runs: git log --date=iso --follow {{PATH}} or git log --date=iso """ if path: return self.pipe(['log', '--date=iso', '--follow', path]) else: return self.pipe(['log', '--date=iso']) def log_to_revision_list(self, log_op_output): versions = [] (rev, date, user, msg) = (None, None, None, None) seenmsg = False # seenmsg allow to get the complete commit message which is presented like this: # # [...] # description: # here is the # commit message # the end of it may be detected # because of the apparition of a line # starting by "changeset:" # # FIXME: there is a bug which will stop parsing if a blank line is included # in the commit message for line in log_op_output: if line.startswith('commit '): if not rev is None: versions.append((rev, date, user, msg)) (rev, date, user, msg) = (None, None, None, None) seenmsg = False rev = line[7:].strip() elif line.startswith('Author: '): user = line[7:].strip() elif line.startswith('Date: '): date = line[7:].strip() seenmsg = True msg = u'' elif seenmsg and line.startswith(' '): msg += line[4:] if not rev is None: versions.append((rev, date, user, msg)) versions.reverse() return versions def move(self, oldpath, newpath): """ Runs: git mv --after {{OLDPATH}} {{NEWPATH}} """ return self.run(['mv', '--after', oldpath, newpath]) def remove(self, path): """ Runs: git rm {{PATH}} """ return self.run(['rm', path]) def revert(self, path, version): """ Runs: hg revert {{PATH}} {{REV_ARGS}} is equivalent to git checkout {{REV_ARGS}} -- {{PATH}} or hg revert --no-backup --all {{REV_ARGS}} is equivalent to git reset --hard HEAD """ revision_params = self.build_revision_arguments(version) if path: self.run(['checkout'] + revision_params + ['--', path]) else: self.run(['reset', '--hard', 'HEAD']) def stage(self): self.run(['add', '-u']) self.run(['add', '-A']) def status(self, porcelain=False): """ Runs: git status @param porcelain: see --porcelain in git documentation, used for testing """ if porcelain: return self.pipe(['status', '--porcelain']) else: return self.pipe(['status']) zim-0.65/zim/plugins/versioncontrol/__init__.py0000775000175000017500000011612312613755160021611 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2014 Jaap Karssenberg # Copyright 2012 Damien Accorsi from __future__ import with_statement import gobject import gtk import os import logging from zim.fs import FS, File, TmpFile from zim.plugins import PluginClass, extends, WindowExtension, ObjectExtension from zim.actions import action from zim.signals import ConnectorMixin from zim.errors import Error from zim.applications import Application from zim.gui.applications import DesktopEntryFile from zim.config import value_is_coord, data_dirs from zim.gui.widgets import ErrorDialog, QuestionDialog, Dialog, \ PageEntry, IconButton, SingleClickTreeView, \ ScrolledWindow, ScrolledTextView, VPaned from zim.utils import natural_sort_key, FunctionThread if os.environ.get('ZIM_TEST_RUNNING'): TEST_MODE = True else: TEST_MODE = False # FUTURE allow vcs modules like bzr to have their own UI classes # these can add additional menu items e.g. Tools->Bazaar-> ... # or use their own graphical interfaces, like bzr gdiff # FUTURE add option to also pull & push versions automatically # FUTURE add versions... menu item to note right-click logger = logging.getLogger('zim.plugins.versioncontrol') class VersionControlPlugin(PluginClass): plugin_info = { 'name': _('Version Control'), # T: plugin name 'description': _('''\ This plugin adds version control for notebooks. This plugin supports the Bazaar, Git and Mercurial version control systems. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg & John Drinkwater & Damien Accorsi', 'help': 'Plugins:Version Control', } plugin_preferences = ( ('autosave', 'bool', _('Autosave version on regular intervals'), False), # T: Label for plugin preference ) @classmethod def check_dependencies(klass): has_bzr = VCS.check_dependencies(VCS.BZR) has_git = VCS.check_dependencies(VCS.GIT) has_hg = VCS.check_dependencies(VCS.HG) has_fossil = VCS.check_dependencies(VCS.FOSSIL) #TODO parameterize the return, so that a new backend will be automatically available return has_bzr|has_hg|has_git|has_fossil, [('bzr', has_bzr, False), ('hg', has_hg, False), ('git', has_git, False), ('fossil', has_fossil, False)] def extend(self, obj): name = obj.__class__.__name__ if name == 'MainWindow': nb = obj.ui.notebook # XXX nb_ext = self.get_extension(NotebookExtension, notebook=nb) assert nb_ext, 'No notebook extension found for: %s' % nb mw_ext = MainWindowExtension(self, obj, nb_ext) self.extensions.add(mw_ext) else: PluginClass.extend(self, obj) @extends('Notebook') class NotebookExtension(ObjectExtension): def __init__(self, plugin, notebook): ObjectExtension.__init__(self, plugin, notebook) self.plugin = plugin self.notebook = notebook self.detect_vcs() def _get_notebook_dir(self): if self.notebook.dir: return self.notebook.dir elif self.notebook.file: return self.notebook.file.dir else: assert False, 'Notebook is not based on a file or folder' def detect_vcs(self): dir = self._get_notebook_dir() self.vcs = VCS.detect_in_folder(dir) if self.vcs: # HACK - FIXME use proper FS signals here # git requires changes to be added to staging, bzr does not # so add a hook for when page is written, to update staging. # # For a more generic behavior, the update_staging is implemented # for all version control systems. If not required - eg. bzr, hg, # then nothing is done self.notebook.connect_after('stored-page', lambda o, n: self.vcs.update_staging() ) def init_vcs(self, vcs): dir = self._get_notebook_dir() self.vcs = VCS.create(vcs, dir, dir) if self.vcs: with self.notebook.lock: self.vcs.init() def teardown(self): if self.vcs: self.vcs.disconnect_all() def _monitor_thread(thread): if thread.done: if thread.error: error = thread.exc_info[1] logger.error('Error during async commit', exc_info=thread.exc_info) ErrorDialog(None, error, thread.exc_info).run() # XXX None should be window return False # stop signal else: return True # keep handler def monitor_thread(thread): gobject.idle_add(_monitor_thread, thread) @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' def __init__(self, plugin, window, notebook_ext): WindowExtension.__init__(self, plugin, window) self.notebook_ext = notebook_ext self._autosave_thread = None if self.notebook_ext.vcs is None: gaction = self.actiongroup.get_action('show_versions') gaction.set_sensitive(False) else: if self.plugin.preferences['autosave']: self.do_save_version_async() def on_quit(o): if self._autosave_thread and not self._autosave_thread.done: self._autosave_thread.join() if self.plugin.preferences['autosave']: self.do_save_version() self.window.ui.connect('quit', on_quit) # XXX def do_save_version_async(self, msg=None): if not self.notebook_ext.vcs: return if self._autosave_thread and not self._autosave_thread.done: self._autosave_thread.join() self._autosave_thread = FunctionThread(self.do_save_version, (msg,)) self._autosave_thread.start() monitor_thread(self._autosave_thread) def do_save_version(self, msg=None): if not self.notebook_ext.vcs: return if not msg: msg = _('Automatically saved version from zim') # T: default version comment for auto-saved versions self.window.ui.assert_save_page_if_modified() # XXX try: self.notebook_ext.vcs.commit(msg) except NoChangesError: logger.debug('No autosave version needed - no changes') @action(_('S_ave Version...'), 'gtk-save-as', 'S', readonly=False) # T: menu item def save_version(self): self.window.ui.assert_save_page_if_modified() # XXX if not self.notebook_ext.vcs: vcs = VersionControlInitDialog(self.window).run() if vcs is None: return # Canceled self.notebook_ext.init_vcs(vcs) if self.notebook_ext.vcs: gaction = self.actiongroup.get_action('show_versions') gaction.set_sensitive(True) with self.notebook_ext.notebook.lock: SaveVersionDialog(self.window, self, self.notebook_ext.vcs).run() @action(_('_Versions...')) # T: menu item def show_versions(self): self.window.ui.assert_save_page_if_modified() # XXX dialog = VersionsDialog.unique(self, self.window, self.notebook_ext.vcs, self.notebook_ext.notebook, self.window.ui.page # XXX ) dialog.present() class NoChangesError(Error): description = _('There are no changes in this notebook since the last version that was saved') # T: verbose error description def __init__(self, root): self.msg = _('No changes since last version') # T: Short error descriotion class VCS(object): """ This class is the main entry for all Version Control System Stuff. It is a factory, a dependencies checker, the enumeration of supported VCS. @implementation: If you add a VCS backend, then you have to: \ - add a file named .py - create there a class inheriting from VCSApplicationBase \ - add here the stuff to manage it """ # Enumeration of all available backends BZR = _('Bazaar') # T: option value HG = _('Mercurial') # T: option value GIT = _('Git') # T: option value FOSSIL = _('Fossil') # T: option value @classmethod def detect_in_folder(klass, dir): """Detect if a version control system has already been setup in the folder. It also create the instance by calling the VCS.create() method @param dir: a L{Dir} instance representing the notebook root folder @returns: a L{VCSBackend} instance which will manage the versioning or C{None} """ name, root = klass._detect_in_folder(dir) if name == 'bzr': vcs = VCS.create(VCS.BZR, root, dir) elif name == 'hg': vcs = VCS.create(VCS.HG, root, dir) elif name == 'git': vcs = VCS.create(VCS.GIT, root, dir) elif name == 'fossil': vcs = VCS.create(VCS.FOSSIL, root, dir) else: # else maybe detected something, but no backend available vcs = None if vcs: logger.info('VCS detected: %s - %s', name, root) return vcs else: logger.info('No VCS detected') return None @classmethod def _detect_in_folder(klass, dir): # split off because it is easier to test this way # # Included unsupported systems as well, to make sure we stop # looking for parents if these are detected. for path in reversed(list(dir)): if path.subdir('.bzr').exists(): return 'bzr', path elif path.subdir('.hg').exists(): return 'hg', path elif path.subdir('.git').exists() or path.file('.git').exists(): return 'git', path elif path.subdir('.svn').exists(): return 'svn', path elif path.file('.fslckout').exists() or path.file('_FOSSIL_').exists(): return 'fossil', path ## Commented CVS out since it potentially ## conflicts with like-named pages # elif path.subdir('CVS').exists(): # return 'cvs', path ## else: continue else: return None, None @classmethod def get_backend(klass, vcs): """Return the class of backend to instantiate according to vcs given as parameter. @param vcs: the wanted vcs backend (VCS.BZR, VCS.GIT, VCS.HG, ...) @returns: the related backend class. The returned class is a VCSApplicationBase child class """ vcs_klass = None if vcs == VCS.BZR: from zim.plugins.versioncontrol.bzr import BZRApplicationBackend vcs_klass = BZRApplicationBackend elif vcs == VCS.HG: from zim.plugins.versioncontrol.hg import HGApplicationBackend vcs_klass = HGApplicationBackend elif vcs == VCS.GIT: from zim.plugins.versioncontrol.git import GITApplicationBackend vcs_klass = GITApplicationBackend elif vcs == VCS.FOSSIL: from zim.plugins.versioncontrol.fossil import FOSSILApplicationBackend vcs_klass = FOSSILApplicationBackend else: assert False, 'Unkown VCS: %s' % vcs return vcs_klass @classmethod def create(klass, vcs, vcs_dir, notebook_dir): """Build the required instance of a Version Control System @param vcs: Version Control System to build (choose between VCS.BZR, VCS.HG, VCS.GIT, VCS.FOSSIL) @param vcs_dir: a L{Dir} instance representing the VCS root folder @param notebook_dir: a L{Dir} instance representing the notebook root folder (must be equal to or below vcs_dir) @returns: a C{VCSBackend} instance setup with the required backend """ if not (notebook_dir == vcs_dir or notebook_dir.ischild(vcs_dir)): raise AssertionError, 'Notebook %s is not part of version control dir %s' % (notebook_dir, vcs_dir) vcs_backend_klass = VCS.get_backend(vcs) return VCSBackend(vcs_dir, vcs_backend_klass(vcs_dir, notebook_dir)) @classmethod def check_dependencies(klass, vcs): """Check if the dependencies for the requested vcs are ok @param vcs: the requested vcs: VCS.BZR, VCS.GIT, VCS.HG or VCS.FOSSIL @returns: C{True} if dependencies are checked ok. """ return VCS.get_backend(vcs).tryexec() class VCSBackend(ConnectorMixin): """Parent class for all VCS backend implementations. It implements the required API. """ def __init__(self, dir, vcs_specific_app): """Initialize the instance in normal or test mode - in case of TEST_MODE off, it checks the file system for creation, move or delete of files - in case of TEST_MODE on, it does not check anything in order to avoid to interfer with dev environment @param dir: a L{Dir} object representing the repository working directory path @param vcs_specific_app: a backend object """ self._root = dir self._lock = FS.get_async_lock(self._root) self._app = vcs_specific_app if not TEST_MODE: # Avoid touching the bazaar repository with zim sources # when we write to tests/tmp etc. self.connectto_all(FS, ( 'path-created', 'path-moved', 'path-deleted' ) ) @property def vcs(self): return self._app @property def root(self): return self._root @property def lock(self): return self._lock def _ignored(self, path): """Return True if we should ignore this path TODO add specific ignore patterns in the _ignored_vcs_specific method for now we just hardcode zim specific logic @param path: a L{UnixFile} object representing the file path to check @returns: True if the path should be ignored or False """ return '.zim' in path.split() or self.vcs._ignored(path) def init(self): """Initialize a Bazaar repository in the self.root directory. If the directory does not exist, then create it @returns: nothing """ if self.vcs.repo_exists(): return if not self.root.exists(): self.root.touch() #~ with self.lock: # FIXME - conflicts with "git init" !??? self.vcs.init_repo() def on_path_created(self, fs, path): """Callback to add a new file or folder when added to the wiki Note: the VCS operation is asynchronous @param fs: the L{FSSingletonClass} instance representing the file system @param path: the L{UnixFile} object representing the newly created file or folder @returns: nothing """ if path.ischild(self.root) and not self._ignored(path): FunctionThread(self.vcs.add, (path,), lock=self._lock).start() def on_path_moved(self, fs, oldpath, newpath): """Callback to move the file in Bazaar when moved in the wiki Note: the VCS operation is asynchronous @param fs: the L{FSSingletonClass} instance representing the file system @param oldpath: the L{UnixFile} object representing the old path of the file or folder @param newpath: the L{UnixFile} object representing the new path of the file or folder @returns: nothing """ if newpath.ischild(self.root) and not self._ignored(newpath): if oldpath.ischild(self.root): # Parent of newpath needs to be versioned in order to make mv succeed FunctionThread(self.vcs.move, (oldpath, newpath), lock=self._lock).start() else: FunctionThread(self.vcs.add, (newpath,), lock=self._lock).start() elif oldpath.ischild(self.root) and not self._ignored(oldpath): self.on_path_deleted(self, fs, oldpath) def on_path_deleted(self, fs, path): """Callback to remove a file from Bazaar when deleted from the wiki Note: the VCS operation is asynchronous @param fs: the L{FSSingletonClass} instance representing the file system @param path: the L{UnixFile} object representing the path of the file or folder to delete @returns: nothing """ FunctionThread(self.vcs.remove, (path,), lock=self._lock).start() @property def modified(self): """return True if changes are detected, or False""" return ''.join( self.get_status() ).strip() != '' with self.lock: return self.vcs.is_modified() def get_status(self, **kwarg): """Returns repo status as a list of text lines @returns: list of text lines (like a shell command result) """ status = list() with self.lock: status = self.vcs.status(**kwarg) return status def get_diff(self, versions=None, file=None): """Returns the diff operation result of a repo or file @param versions: couple of version numbers (integer) @param file: L{UnixFile} object of the file to check, or None @returns: the diff result """ with self.lock: nc = ['=== No Changes\n'] diff = self.vcs.diff(versions, file) or nc return diff def get_annotated(self, file, version=None): """Returns the annotated version of a file @param file: L{UnixFile} object of the file to check, or None @param version: required version number (integer) or None @returns: the annotated version of the file result """ with self.lock: annotated = self.vcs.annotate(file, version) return annotated def commit(self, msg): """Run a commit operation. @param msg: commit message (str) @returns: nothing """ with self.lock: self._commit(msg) def _commit(self, msg): stat = ''.join(self.vcs.status()).strip() if not stat: raise NoChangesError(self.root) else: self.vcs.add() self.vcs.commit(None, msg) def revert(self, version=None, file=None): with self.lock: self.vcs.revert(file, version) def list_versions(self, file=None): """Returns a list of all versions, for a file or for the entire repo @param file: a L{UnixFile} object representing the path to the file, or None @returns: a list of tuples (revision (int), date, user (str), msg (str)) """ # TODO see if we can get this directly from bzrlib as well with self.lock: lines = self.vcs.log(file) versions = self.vcs.log_to_revision_list(lines) return versions def get_version(self, file, version): """FIXME Document""" with self.lock: version = self.vcs.cat(file, version) return version def update_staging(self): with self.lock: self.vcs.stage() class VCSApplicationBase(object): """This class is the base class for the classes representing the specific version control applications. This class is abstract and must be inherited. Subclasses of this class can be used by L{VCSBackend} to apply version control to a folder. """ def __init__(self, vcs_dir, notebook_dir): """Constructor. @param vcs_dir: a L{Dir} instance representing the VCS root folder @param notebook_dir: a L{Dir} instance representing the notebook root folder (must be equal to or below vcs_dir) """ if not (notebook_dir == vcs_dir or notebook_dir.ischild(vcs_dir)): raise AssertionError, 'Notebook %s is not part of version control dir %s' % (notebook_dir, vcs_dir) self._app = self.build_bin_application_instance() self.root = vcs_dir self.notebook_dir = notebook_dir @classmethod def build_bin_application_instance(cls): """Builds an L{Application} object for the backend command @returns: an L{Application} object @implementation: must be implemented in child classes. """ raise NotImplementedError @classmethod def tryexec(cls): """Check if the command associated with the backend is available. @returns: C{True} if the command is available """ return cls.build_bin_application_instance().tryexec() def run(self, params): """Execute a command with the associated binary with 'params' parameters. Note: the working directory is the root associated to the repository @param params: a list of parameters to be added to the command line @returns: nothing @implementation: should not be overriden by child classes """ self._app.run(params, self.root) def pipe(self, params): """Execute a command with the associated binary with 'params' parameters and return the command line output. @param params: a list of parameters to be added to the command line @returns: a list of str() representing each line of the output @implementation: should not be overriden by child classes """ return self._app.pipe(params, self.root) def _ignored(self, file): """return True if the file should be ignored by the version control system @param file: a L{File} representing the file that we want to know if it should be ignored @returns: C{True} if the file should be ignored by the VCS. @implementation: may be overridden if some files are to be ignored \ specifically for the backend """ return False ######## # # NOW ARE ALL REVISION CONTROL SYSTEM SHORTCUTS def add(self, file=None): """Add a file to the repository. If None, then the add must be for the \ entire repository @param file: a L{File} instance representing the file to add. @returns: C{True} if the command was successfull Exemple: for Mercurial, the implementation will run "hg add " or "hg add" if file=None (meaning the entire repository @implementation: must be implemented in child classes """ raise NotImplementedError def annotate(self, file, version): """return the annotated version of a file. This is commonly related to the VCS command annotate @param file: a L{File} instance representing the file @param version: a None/int/str representing the revision of the file @returns: a list of lines representing the command result output Eg. for mercurial, it will return something like: 0: line1 2: line1 ... @implementation: must be implemented in child classes """ raise NotImplementedError def cat(self, file, version): """Return the context of a file at a specific version @param file: a L{File} object in this repository @param version: a version id @returns: a list of lines """ raise NotImplementedError def commit(self, file, msg): """Execute a commit for the file or for the entire repository @param file: a L{File} instance representing the file or None for the entire repository @param msg: a str() representing the commit message @returns: C{True} if the command was successfull Example for Mercurial. It will run: - hg commit -m (file not None and message not empty - hg commit -m (file=None and message not empty) - hg commit (file not None and message empty) - hg commit (file=None and message empty) @implementation: must be implemented in child class """ raise NotImplementedError def diff(self, versions, file=None): """Returns the result of a diff between two revisions as a list of str() representing the diff operation output. @param versions: int, str, couple or tuple representing the versions to compare @param file: a L{File} instance representing the file, or None @returns: a list of str() representing the output of the diff operation Example for Mercurial. It could run: - hg diff --git - hg diff --git - ... Note: the --git option allow to show the result a better way @implementation: must be implemented in child class """ raise NotImplementedError def ignore(self, file_to_ignore_regexp): """initialize the .XXignore file used by the VCS. @param file_to_ignore_regexp: a str() representing the content of the \ .XXignore file. It's commonly a set of regular expressions separated by a line end. Note: the behavior is to overwrite the entire file content, so you must first concatenate the regexp if you need several. @returns: nothing @implementation: must be implemented in child class. The ignore file may be easyly created by running simply the following line of code: self.root.file('nameoftheignorefile').write(file_to_ignore_regexp) Example: for Mercurial, the content of the method is: self.root.file('.hgignore').write(file_to_ignore_regexp) """ #TODO: append the rule instead of overwrite the full content raise NotImplementedError def init_repo(self): """initialize a repository in the associated folder. Runs L{init()}, adds existing files etc. @returns: nothing. @implementation: must be implemented in the child class. """ raise NotImplementedError def repo_exists(self): """Returns True if a repository is already setup @returns: C{True} if a repository is already setup in the root directory @implementation: must be implemented in child classes. """ raise NotImplementedError def init(self): """ runs the VCS init command @returns: C{True} if the command was successfull @implementation: must be implemented in child class Example: for mercurial or bazaar it runs "hg init" (or "bzr init") """ raise NotImplementedError def is_modified(self): """Returns True if the repo is not up-to-date, or False @returns: C{True} if the repo is not up-to-date, or False @implementation: must be implemented in the child class. """ raise NotImplementedError def log(self, file=None): """Returns the history related to a file. @param file: a L{File} instance representing the file or None (for the entire repository) @returns: a list of str() representing the output of the command. (not parsed) @implementation: must be implemented in child class. It must return the \ output for a file or for the entire repository, and the \ order must be from the oldest to the newest commits """ raise NotImplementedError def log_to_revision_list(self, log_op_output): """Converts the result of a log() call into a list of tuples representing \ the commits. @param log_op_output: a list of str() representing the log operation output before being parsed. @returns: a list of tuple (revision-id, date, user, commit-message) \ representing the entire life. @implementation: must be implemented in the child class. \ Actually, this method is a "log" operation parser which will convert str lines into list of 4-str tuples : (revision-id, date, user, commit-message) """ raise NotImplementedError def move(self, oldfile, newfile): """Must implement the VCS operation required after a file has been moved into the repository. Note: this is only for files being move from somewhere in the repository to somewhere in the repository @param oldfile: a L{File} representing the old location of the file @param newfile: a L{File} representing the new location of the file @returns : C{True} if the VCS operation representing this move was successfull @implementation: must be implemented in child class. \ CAUTION: this must not implement a move operation but \ a "a file has moved on the filesystem" operation, \ ordering the VCS to take into account the new state. Example: with mercurial, it is implemented by running: hg mv --after """ raise NotImplementedError def remove(self, file): """Remove a file from the repository. @param file: a L{File} instance representing the file that have been deleted from the FS @returns: C{True} if the command was successfull @implementation: must be implemented in child class. \ CAUTION: this must implement the VCS operation required \ after a versionned file has been deleted from the file system. \ \ Example: in mercurial it has been implemented with: hg rm """ raise NotImplementedError def revert(self, file, version): """Reverts a file to an older version @param file: a L{File} instance representing the file or None for the entire repo @param version: a str() or int() representing the expected version @returns: C{True} if the command was successfull @implementation: must be implemented in child class Example: in mercurial it will run: - hg revert --no-backup if file is not None - hg revert --no-backup --all if file=None """ raise NotImplementedError def stage(self): """Fixme - to be documented Usefull for git, runs: git add -u git add -A @implementation: optional to be implemented in child class """ pass def status(self): """Returns the status of the repository @returns: a list of str() representing the output of a "status" command related to the repository @implementation: must be implemented in child classes """ raise NotImplementedError def get_side_by_side_app(): for dir in data_dirs('helpers/compare_files/'): for name in dir.list(): # XXX need object list file = dir.file(name) if name.endswith('.desktop') and file.exists(): app = DesktopEntryFile(file) if app.tryexec(): return app else: return None class VersionControlInitDialog(QuestionDialog): def __init__(self, ui): QuestionDialog.__init__(self, ui, ( _("Enable Version Control?"), # T: Question dialog _("Version control is currently not enabled for this notebook.\n" "Do you want to enable it?" ) # T: Detailed question ) ) self.combobox = gtk.combo_box_new_text() for option in (VCS.BZR, VCS.GIT, VCS.HG, VCS.FOSSIL): if VCS.check_dependencies(option): self.combobox.append_text(option) self.combobox.set_active(0) hbox = gtk.HBox(spacing=5) hbox.pack_end(self.combobox, False) hbox.pack_end(gtk.Label(_('Backend') + ':'), False) # T: option to chose versioncontrol backend self.vbox.pack_start(hbox, False) hbox.show_all() def run(self): if QuestionDialog.run(self): return self.combobox.get_active_text() else: return None class SaveVersionDialog(Dialog): def __init__(self, ui, window_ext, vcs): Dialog.__init__(self, ui, _('Save Version'), # T: dialog title button=(None, 'gtk-save'), help='Plugins:Version Control') self.window_ext = window_ext self.vcs = vcs self.vbox.pack_start( gtk.Label(_("Please enter a comment for this version")), False) # T: Dialog text vpaned = VPaned() self.vbox.add(vpaned) window, self.textview = ScrolledTextView(_('Saved version from zim')) # T: default version comment in the "save version" dialog self.textview.set_editable(True) vpaned.add1(window) vbox = gtk.VBox() vpaned.add2(vbox) label = gtk.Label(''+_('Details')+'') # T: section for version details in "save version" dialog label.set_use_markup(True) label.set_alignment(0, 0.5) vbox.pack_start(label, False) status = self.vcs.get_status() window, textview = ScrolledTextView(text=''.join(status), monospace=True) vbox.add(window) def do_response_ok(self): # notebook.lock already set by plugin.save_version() buffer = self.textview.get_buffer() start, end = buffer.get_bounds() msg = buffer.get_text(start, end, False).strip() if msg: self.window_ext.do_save_version_async(msg) return True else: return False class VersionsDialog(Dialog): def __init__(self, ui, vcs, notebook, page=None): Dialog.__init__(self, ui, _('Versions'), # T: dialog title buttons=gtk.BUTTONS_CLOSE, help='Plugins:Version Control') self.notebook = notebook self.vcs = vcs self._side_by_side_app = get_side_by_side_app() self.uistate.setdefault('windowsize', (600, 500), check=value_is_coord) self.uistate.setdefault('vpanepos', 300) self.vpaned = VPaned() self.vpaned.set_position(self.uistate['vpanepos']) self.vbox.add(self.vpaned) vbox = gtk.VBox(spacing=5) self.vpaned.pack1(vbox, resize=True) # Choice between whole notebook or page label = gtk.Label(''+_('Versions')+':') # section label label.set_use_markup(True) label.set_alignment(0, 0.5) vbox.pack_start(label, False) self.notebook_radio = gtk.RadioButton(None, _('Complete _notebook')) # T: Option in versions dialog to show version for complete notebook self.page_radio = gtk.RadioButton(self.notebook_radio, _('_Page')+':') # T: Option in versions dialog to show version for single page #~ recursive_box = gtk.CheckButton('Recursive') vbox.pack_start(self.notebook_radio, False) # Page entry hbox = gtk.HBox(spacing=5) vbox.pack_start(hbox, False) hbox.pack_start(self.page_radio, False) self.page_entry = PageEntry(self.notebook) if page: self.page_entry.set_path(page) hbox.pack_start(self.page_entry, False) # View annotated button ann_button = gtk.Button(_('View _Annotated')) # T: Button label ann_button.connect('clicked', lambda o: self.show_annotated()) hbox.pack_start(ann_button, False) # Help text label = gtk.Label('\n'+_( '''\ Select a version to see changes between that version and the current state. Or select multiple versions to see changes between those versions. ''' ).strip()+'') # T: Help text in versions dialog label.set_use_markup(True) #~ label.set_alignment(0, 0.5) vbox.pack_start(label, False) # Version list self.versionlist = VersionsTreeView() self.versionlist.load_versions(vcs.list_versions()) scrolled = ScrolledWindow(self.versionlist) vbox.add(scrolled) col = self.uistate.setdefault('sortcol', self.versionlist.REV_SORT_COL) order = self.uistate.setdefault('sortorder', gtk.SORT_DESCENDING) try: self.versionlist.get_model().set_sort_column_id(col, order) except: logger.exception('Invalid sort column: %s %s', col, order) # ----- vbox = gtk.VBox(spacing=5) self.vpaned.pack2(vbox, resize=False) label = gtk.Label(''+_('Comment')+'') # T: version details label.set_use_markup(True) label.set_alignment(0.0, 0.5) vbox.pack_start(label, False) # Comment text window, textview = ScrolledTextView() self.comment_textview = textview vbox.add(window) buttonbox = gtk.HButtonBox() buttonbox.set_layout(gtk.BUTTONBOX_END) vbox.pack_start(buttonbox, False) # Restore version button revert_button = gtk.Button(_('_Restore Version')) # T: Button label revert_button.connect('clicked', lambda o: self.restore_version()) buttonbox.add(revert_button) # Notebook Changes button diff_button = gtk.Button(_('Show _Changes')) # T: button in versions dialog for diff diff_button.connect('clicked', lambda o: self.show_changes()) buttonbox.add(diff_button) # Compare page button comp_button = gtk.Button(_('_Side by Side')) # T: button in versions dialog for side by side comparison comp_button.connect('clicked', lambda o: self.show_side_by_side()) buttonbox.add(comp_button) # UI interaction between selections and buttons def on_row_activated(o, iter, path): model = self.versionlist.get_model() comment = model[iter][VersionsTreeView.MSG_COL] buffer = textview.get_buffer() buffer.set_text(comment) self.versionlist.connect('row-activated', on_row_activated) def on_ui_change(o): usepage = self.page_radio.get_active() self.page_entry.set_sensitive(usepage) ann_button.set_sensitive(usepage) # side by side comparison can only be done for one page # revert can only be done to one version, not multiple selection = self.versionlist.get_selection() model, rows = selection.get_selected_rows() if not rows: revert_button.set_sensitive(False) diff_button.set_sensitive(False) comp_button.set_sensitive(False) elif len(rows) == 1: revert_button.set_sensitive(usepage) diff_button.set_sensitive(True) comp_button.set_sensitive(bool(usepage and self._side_by_side_app)) else: revert_button.set_sensitive(False) diff_button.set_sensitive(True) comp_button.set_sensitive(bool(usepage and self._side_by_side_app)) def on_page_change(o): pagesource = self._get_file() if pagesource: self.versionlist.load_versions(vcs.list_versions(self._get_file())) def on_book_change(o): self.versionlist.load_versions(vcs.list_versions()) self.page_radio.connect('toggled', on_ui_change) self.notebook_radio.connect('toggled', on_book_change) self.page_radio.connect('toggled', on_page_change) self.page_entry.connect('changed', on_page_change) selection = self.versionlist.get_selection() selection.connect('changed', on_ui_change) # select last version self.versionlist.get_selection().select_path((0,)) col = self.versionlist.get_column(0) self.versionlist.row_activated(0, col) def save_uistate(self): self.uistate['vpanepos'] = self.vpaned.get_position() col, order = self.versionlist.get_model().get_sort_column_id() self.uistate['sortcol'] = col self.uistate['sortorder'] = order def _get_file(self): if self.notebook_radio.get_active(): return None else: path = self.page_entry.get_path() if path: page = self.notebook.get_page(path) else: return None # TODO error message valid page name? if page \ and hasattr(page, 'source') \ and isinstance(page.source, File) \ and page.source.ischild(self.vcs.root): return page.source else: return None # TODO error message ? def show_annotated(self): # TODO check for gannotated file = self._get_file() assert not file is None annotated = self.vcs.get_annotated(file) TextDialog(self, _('Annotated Page Source'), annotated).run() # T: dialog title def restore_version(self): file = self._get_file() path = self.page_entry.get_path() version = self.versionlist.get_versions()[0] assert not file is None if QuestionDialog(self, ( _('Restore page to saved version?'), # T: Confirmation question _('Do you want to restore page: %(page)s\n' 'to saved version: %(version)s ?\n\n' 'All changes since the last saved version will be lost !') % {'page': path.name, 'version': str(version)} # T: Detailed question, "%(page)s" is replaced by the page, "%(version)s" by the version id ) ).run(): self.vcs.revert(file=file, version=version) self.ui.reload_page() # XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # TODO trigger vcs autosave here? def show_changes(self): # TODO check for gdiff file = self._get_file() versions = self.versionlist.get_versions() diff = self.vcs.get_diff(file=file, versions=versions) TextDialog(self, _('Changes'), diff).run() # T: dialog title def show_side_by_side(self): file = self._get_file() versions = self.versionlist.get_versions() if not (file and versions): raise AssertionError files = map(lambda v: self._get_tmp_file(file, v), versions) if len(files) == 1: tmp = TmpFile(file.basename + '--CURRENT', persistent=True) # need to be persistent, else it is cleaned up before application spawned tmp.writelines(file.readlines()) files.insert(0, tmp) self._side_by_side_app.spawn(files) def _get_tmp_file(self, file, version): text = self.vcs.get_version(file, version) tmp = TmpFile(file.basename + '--REV%s' % version, persistent=True) # need to be persistent, else it is cleaned up before application spawned tmp.writelines(text) return tmp class TextDialog(Dialog): def __init__(self, ui, title, lines): Dialog.__init__(self, ui, title, buttons=gtk.BUTTONS_CLOSE) self.set_default_size(600, 300) self.uistate.setdefault('windowsize', (600, 500), check=value_is_coord) window, textview = ScrolledTextView(''.join(lines), monospace=True) self.vbox.add(window) class VersionsTreeView(SingleClickTreeView): # We are on purpose _not_ a subclass of the BrowserTreeView widget # because we utilize multiple selection to select versions for diffs REV_SORT_COL = 0 REV_COL = 1 DATE_COL = 2 USER_COL = 3 MSG_COL = 4 def __init__(self): model = gtk.ListStore(str, str, str, str, str) # REV_SORT_COL, REV_COL, DATE_COL, USER_COL, MSG_COL gtk.TreeView.__init__(self, model) self.get_selection().set_mode(gtk.SELECTION_MULTIPLE) self.set_rubber_banding(True) cell_renderer = gtk.CellRendererText() for name, i in ( (_('Rev'), self.REV_COL), # T: Column header versions dialog (_('Date'), self.DATE_COL), # T: Column header versions dialog (_('Author'), self.USER_COL), # T: Column header versions dialog ): column = gtk.TreeViewColumn(name, cell_renderer, text=i) if i == self.REV_COL: column.set_sort_column_id(self.REV_SORT_COL) else: column.set_sort_column_id(i) if i == self.DATE_COL: column.set_expand(True) self.append_column(column) model.set_sort_column_id(self.REV_SORT_COL, gtk.SORT_DESCENDING) # By default sort by rev def load_versions(self, versions): model = self.get_model() model.clear() # Empty for when we update model.set_sort_column_id(self.REV_SORT_COL, gtk.SORT_DESCENDING) # By default sort by rev for version in versions: #~ print version key = natural_sort_key(version[0]) # key for REV_SORT_COL model.append((key,) + tuple(version)) def get_versions(self): model, rows = self.get_selection().get_selected_rows() if len(rows) == 1: rev = model[rows[0]][self.REV_COL] return (rev,) else: revs = [model[path][self.REV_COL] for path in rows] return (revs[0], revs[-1]) zim-0.65/zim/plugins/versioncontrol/hg.py0000664000175000017500000001310512537054570020443 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2012 Jaap Karssenberg # Copyright 2012 Damien Accorsi from __future__ import with_statement import os import logging import xml.etree.ElementTree # needed to compile with cElementTree import xml.etree.cElementTree as ET from zim.plugins.versioncontrol import VCSApplicationBase from zim.applications import Application logger = logging.getLogger('zim.vcs.hg') class HGApplicationBackend(VCSApplicationBase): @classmethod def build_bin_application_instance(cls): return Application(('hg', '--noninteractive', '--encoding', 'utf8'), encoding='utf-8') # force hg to run in non-interactive mode # which will force user name to be auto-setup def get_mandatory_params(self): return ['--noninteractive'] # force hg to run in non-interactive mode # which will force user name to be auto-setup def build_revision_arguments(self, versions): """Build a list including required string/int for running an VCS command # Accepts: None, int, string, (int,), (int, int) # Always returns a list # versions content: - None: return an empty list - int ou string: return ['-r', int] - tuple or list: return ['-r', '%i..%i'] It's all based on the fact that defining revision with current VCS is: -r revision -r rev1..rev2 """ if isinstance(versions, (tuple, list)): assert 1 <= len(versions) <= 2 if len(versions) == 2: versions = map(int, versions) versions.sort() return ['-r', '%i..%i' % tuple(versions)] else: versions = versions[0] if not versions is None: version = int(versions) return ['-r', '%i' % version] else: return [] ######## # # NOW ARE ALL REVISION CONTROL SYSTEM SHORTCUTS def add(self, path=None): """ Runs: hg add {{PATH}} """ if path is None: return self.run(['add', self.notebook_dir]) else: return self.run(['add', path]) def annotate(self, file, version): """FIXME Document return 0: line1 2: line1 ... """ revision_args = self.build_revision_arguments(version) return self.pipe(['annotate', file] + revision_args) def cat(self, path, version): """ Runs: hg cat {{PATH}} {{REV_ARGS}} """ revision_args = self.build_revision_arguments(version) return self.pipe(['cat', path] + revision_args) def commit(self, path, msg): """ Runs: hg commit -m {{MSG}} {{PATH}} """ params = ['commit'] if msg!='' and msg!=None: params.append('-m') params.append(msg) if path!='' and path!=None: params.append(path) return self.run(params) def diff(self, versions, path=None): """ Runs: hg diff --git {{REVISION_ARGS}} or hg diff --git {{REVISION_ARGS}} {{PATH}} """ revision_args = self.build_revision_arguments(versions) if path==None: return self.pipe(['diff', '--git'] + revision_args) # Using --git option allow to show the renaming of files else: return self.pipe(['diff', '--git', path] + revision_args) def ignore(self, file_to_ignore_regexp): """ Build a .hgignore file including the file_to_ignore_content @param file_to_ignore_regexp: str representing the .hgignore file content. this must be a list of regexp defining the file / path to ignore, separated by a\n char @returns: nothing """ #TODO: append the rule instead of overwrite the full content self.root.file( '.hgignore' ).write( file_to_ignore_regexp ) def init_repo(self): """Initialize a new repo The init operation consists in: - running the VCS init command - defining files to ignore - adding all other existing files @returns: nothing """ self.init() self.ignore('\.zim*$\n') self.add('.') # add all existing files def repo_exists(self): """Returns True if a repository is already setup, or False @returns: a boolean True if a repo is already setup, or False """ return self.root.subdir('.hg').exists() def init(self): """ Runs: hg init """ return self.run(['init']) def is_modified(self): """Returns true if the repo is not up-to-date, or False @returns: True if the repo is not up-to-date, or False """ # If status return an empty answer, this means the local repo is up-to-date return ''.join( self.status() ).strip() != '' def log(self, path=None): """ Runs: hg log --style xml {{PATH}} """ if path: return self.pipe(['log', '--style', 'xml', path]) else: return self.pipe(['log', '--style', 'xml']) def log_to_revision_list(self, log_op_output): # returns a list of tuple (revision-id, date, user, commit-message) versions = [] xml = ET.fromstring(''.join(log_op_output)) if not (xml and xml.tag == 'log'): raise AssertionError, 'Could not parse log' for entry in xml: rev = entry.attrib['revision'] date = entry.findtext('date') user = entry.findtext('author') msg = entry.findtext('msg') versions.append((rev, date, user, msg)) versions.sort() return versions def move(self, oldpath, newpath): """ Runs: hg mv --after {{OLDPATH}} {{NEWPATH}} """ return self.run(['mv', '--after', oldpath, newpath]) def remove(self, path): """ Runs: hg rm {{PATH}} """ return self.run(['rm', '-A', path]) def revert(self, path, version): """ Runs: hg revert --no-backup {{PATH}} {{REV_ARGS}} or hg revert --no-backup --all {{REV_ARGS}} """ revision_params = self.build_revision_arguments(version) if path: return self.run(['revert', '--no-backup', path] + revision_params) else: return self.run(['revert', '--no-backup', '--all'] + revision_params) def status(self): """ Runs: hg status """ return self.pipe(['status']) zim-0.65/zim/plugins/versioncontrol/fossil.py0000775000175000017500000001430012600720350021330 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2012 Jaap Karssenberg # Copyright 2012 Damien Accorsi from __future__ import with_statement import os import re import logging from zim.plugins.versioncontrol import VCSApplicationBase from zim.applications import Application logger = logging.getLogger('zim.vcs.fossil') RE_Date = re.compile(r"===\s*([0-9]+-[0-9]+-[0-9]+)\s*===") # 23:03:33 [8cf3ffde61] *MERGE* *BRANCH* Stas Bushuev wrote this message. (user: Xitsa tags: trunk) RE_LogRecord = re.compile(r"([0-9:-]+)\s*\[([0-9a-fA-F]+)\]\s*(\*\S+\* *)*(.*)\((.*)\)") RE_Tag = re.compile(r"(?:,\s*)?(\S+:)") RE_Time = re.compile(r"[0-9][0-9]:[0-9][0-9]:[0-9][0-9]") class FOSSILApplicationBackend(VCSApplicationBase): @classmethod def build_bin_application_instance(cls): return Application(('fossil',)) def build_revision_arguments(self, versions): """Build a list including required string/int for running an VCS command # Accepts: None, int, string, (string,), (string, string) # Always returns a list # versions content: - None: return an empty list - string: return ['--from', int] - tuple or list: return ['--from', from, '--to', to] It's all based on the fact that defining revision with current VCS is: --from revision --from rev1 --to rev2 """ if isinstance(versions, (tuple, list)): assert 1 <= len(versions) <= 2 if len(versions) == 2: return ['-r', versions[0], '--to', versions[1]] else: return ['-r', versions[0]] if versions is None: return [] return ['-r', versions] ######## # # NOW ARE ALL REVISION CONTROL SYSTEM SHORTCUTS def add(self, path=None): """ Runs: fossil add {{PATH}} """ if path is None: return self.run(['addremove', self.notebook_dir]) else: return self.run(['add', path]) def annotate(self, file, version): """FIXME Document return 0: line1 2: line1 ... """ # Annotate doesn't take a version return self.pipe(['annotate', file]) def cat(self, path, version): """ Runs: fossil cat {{PATH}} {{REV_ARGS}} """ revision_args = self.build_revision_arguments(version) return self.pipe(['cat', path] + revision_args) def commit(self, path, msg): """ Runs: fossil commit -m {{MSG}} {{PATH}} """ params = ['commit'] if msg!='' and msg!=None: params.append('-m') params.append(msg) # To minimize interaction params.append('--no-warnings') if path!='' and path!=None: params.append(path) return self.run(params) def diff(self, versions, path=None): """ Runs: fossil diff {{REVISION_ARGS}} or fossil diff {{REVISION_ARGS}} {{PATH}} """ revision_args = self.build_revision_arguments(versions) if path==None: return self.pipe(['diff'] + revision_args) # Using --git option allow to show the renaming of files else: return self.pipe(['diff'] + revision_args + [path]) def ignore(self, file_to_ignore_regexp): """ Configure settings for files to ignore @param file_to_ignore_regexp: str representing the ignore-glob content. this must be a list of regexp defining the file / path to ignore, separated by a comma. @returns: nothing """ return self.run(['settings', 'ignore-glob', file_to_ignore_regexp]) def init_repo(self): """Initialize a new repo The init operation consists in: - running the VCS init command - defining files to ignore - adding all other existing files @returns: nothing """ self.init() self.ignore('\.zim*/*,notebook.fossil') self.add('.') # add all existing files def repo_exists(self): """Returns True if a repository is already setup, or False @returns: a boolean True if a repo is already setup, or False """ return self.root.file('.fslckout').exists() or self.root.file('_FOSSIL_').exists() def init(self): """ Runs: fossil init Usually, the repository is located in some other place than checkout folder, but we put it in the notepad folder and then checkout it. """ infolder_repo = self.root.file('notebook.fossil') self.run(['init', infolder_repo]) return self.checkout(infolder_repo) def checkout(self, file): # Create working folder return self.run(['open', file]) def is_modified(self): """Returns true if the repo is not up-to-date, or False @returns: True if the repo is not up-to-date, or False """ # If status return an empty answer, this means the local repo is up-to-date return ''.join( self.status() ).strip() != '' def log(self, path=None): """ Runs: fossil timeline --type ci {{PATH}} "--type ci" option for file commits only """ options = ['--limit', '1000'] if not path is None: return self.pipe(['finfo'] + options + [path]) return self.pipe(['timeline', '--type', 'ci'] + options) def log_to_revision_list(self, log_op_output): # returns a list of tuple (revision-id, date, user, commit-message) def ExtractUserName(line): tags = RE_Tag.split(line) if len(tags) > 2: if tags[1] == "user:": return tags[2].strip() return "" def CombineDateTime(CurDate, TimeOrDate): if RE_Time.match(TimeOrDate): return CurDate + " " + TimeOrDate return TimeOrDate versions = [] CurDate = "" for line in log_op_output: (rev, date, user, msg) = (None, None, None, None) DateMatch = RE_Date.search(line) if DateMatch: CurDate = DateMatch.group(1) else: RecordMatch = RE_LogRecord.search(line) if RecordMatch: date = CombineDateTime(CurDate, RecordMatch.group(1)) rev = RecordMatch.group(2) msg = RecordMatch.group(4) user = ExtractUserName(RecordMatch.group(5)) versions.append((rev, date, user, msg)) return versions def move(self, oldpath, newpath): """ Runs: fossil mv {{OLDPATH}} {{NEWPATH}} """ return self.run(['mv', oldpath, newpath]) def remove(self, path): """ Runs: fossil rm {{PATH}} """ return self.run(['rm', path]) def revert(self, path, version): """ Runs: fossil revert {{PATH}} {{REV_ARGS}} or fossil revert {{REV_ARGS}} """ revision_params = self.build_revision_arguments(version) if path: return self.run(['revert', path] + revision_params) else: return self.run(['revert'] + revision_params) def status(self): """ Runs: fossil changes """ return self.pipe(['changes']) zim-0.65/zim/plugins/versioncontrol/bzr.py0000664000175000017500000001252212400332101020616 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2012 Jaap Karssenberg # Copyright 2012 Damien Accorsi from __future__ import with_statement import os import logging from zim.plugins.versioncontrol import VCSApplicationBase from zim.applications import Application, ApplicationError logger = logging.getLogger('zim.vcs.bzr') class BZRApplicationBackend(VCSApplicationBase): @classmethod def build_bin_application_instance(cls): return Application(('bzr',)) def build_revision_arguments(self, versions): """Build a list including required string/int for running an VCS command # Accepts: None, int, string, (int,), (int, int) # Always returns a list # versions content: - None: return an empty list - int ou string: return ['-r', int] - tuple or list: return ['-r', '%i..%i'] It's all based on the fact that defining revision with current VCS is: -r revision -r rev1..rev2 """ if isinstance(versions, (tuple, list)): assert 1 <= len(versions) <= 2 if len(versions) == 2: versions = map(int, versions) versions.sort() return ['-r', '%i..%i' % tuple(versions)] else: versions = versions[0] if not versions is None: version = int(versions) return ['-r', '%i' % version] else: return [] ######## # # NOW ARE ALL REVISION CONTROL SYSTEM SHORTCUTS def add(self, path=None): """ Runs: bzr add {{PATH}} """ if path is None: return self.run(['add', self.notebook_dir]) else: return self.run(['add', path]) def annotate(self, file, version): """FIXME Document return 1 | line1 2 | line2 ... """ revision_args = self.build_revision_arguments(version) return self.pipe(['annotate', file] + revision_args) def cat(self, path, version): """ Runs: bzr cat {{PATH}} {{REV_ARGS}} """ revision_args = self.build_revision_arguments(version) return self.pipe(['cat', path] + revision_args) def commit(self, path, msg): """ Runs: bzr commit -m {{MSG}} {{PATH}} """ params = ['commit'] if msg!='' and msg!=None: params.append('-m') params.append(msg) if path!='' and path!=None: params.append(path) return self.run(params) def diff(self, versions, path=None): """ Runs: bzr diff {{REVISION_ARGS}} or bzr diff {{REVISION_ARGS}} {{PATH}} """ revision_args = self.build_revision_arguments(versions) if path==None: return self.pipe(['diff'] + revision_args) # Using --git option allow to show the renaming of files else: return self.pipe(['diff', path] + revision_args) def ignore(self, file_to_ignore_regexp): """ Build a .bzrignore file including the file_to_ignore_content """ return self.run(['ignore', file_to_ignore_regexp]) def init_repo(self): self.init() if not self.test_whoami(): self.whoami('zim') # set a dummy user "zim" self.ignore('**/.zim/') self.add('.') def repo_exists(self): return self.root.subdir('.bzr').exists() def init(self): """ Runs: bzr init """ return self.run(['init']) def log(self, path=None): """ Runs: bzr log --forward {{PATH}} the "--forward" option allows to reverse order """ if path: return self.pipe(['log', '--forward', path]) else: return self.pipe(['log', '--forward']) def log_to_revision_list(self, log_op_output): versions = [] (rev, date, user, msg) = (None, None, None, None) seenmsg = False # seenmsg allow to get the complete commit message which is presented like this: # # [...] # description: # here is the # commit message # the end of it may be detected # because of the apparition of a line # starting by "changeset:" # # FIXME: there is a bug which will stop parsing if a blank line is included # in the commit message for line in log_op_output: if line.startswith('----'): if not rev is None: versions.append((rev, date, user, msg)) (rev, date, user, msg) = (None, None, None, None) elif line.startswith('revno: '): value = line[7:].strip() if ' ' in value: # e.g. "revno: 48 [merge]\n" i = value.index(' ') value = value[:i] rev = value elif line.startswith('committer: '): user = line[11:].strip() elif line.startswith('timestamp: '): date = line[11:].strip() elif line.startswith('message:'): seenmsg = True msg = u'' elif seenmsg and line.startswith(' '): msg += line[2:] if not rev is None: versions.append((rev, date, user, msg)) return versions def move(self, oldpath, newpath): """ Runs: bzr mv --after {{OLDPATH}} {{NEWPATH}} """ self.run(['add', '--no-recurse', newpath.dir]) return self.run(['mv', oldpath, newpath]) def remove(self, path): """ Runs: bzr rm {{PATH}} """ return self.run(['rm', path]) def revert(self, path, version): """ Runs: bzr revert {{PATH}} {{REV_ARGS}} or bzr revert {{REV_ARGS}} """ revision_params = self.build_revision_arguments(version) if path: return self.run(['revert', path] + revision_params) else: return self.run(['revert'] + revision_params) def status(self): """ Runs: bzr status """ return self.pipe(['status']) def whoami(self, user): """ Runs: bzr whoami zim """ return self.pipe(['whoami', user]) def test_whoami(self): """return True if the user is is setup or non-zero """ try: self.run(['whoami']) except ApplicationError, e: return False else: return True zim-0.65/zim/plugins/linkmap.py0000664000175000017500000001060412374655231016413 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''Plugin showing a map of links between pages based on GraphViz''' import gtk from zim.plugins import PluginClass, extends, WindowExtension from zim.actions import action from zim.notebook import Path from zim.index import LINK_DIR_BOTH from zim.applications import Application from zim.fs import Dir from zim.gui.widgets import ui_environment, Dialog, IconButton from zim.inc import xdot class LinkMapPlugin(PluginClass): plugin_info = { 'name': _('Link Map'), # T: plugin name 'description': _('''\ This plugin provides a dialog with a graphical representation of the linking structure of the notebook. It can be used as a kind of "mind map" showing how pages relate. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Link Map', } @classmethod def check_dependencies(klass): has_graphviz = Application(('fdp',)).tryexec() return has_graphviz, [('GraphViz', has_graphviz, True)] class LinkMap(object): def __init__(self, notebook, path, depth=2): self.notebook = notebook self.path = path self.depth = depth def _all_links(self): for page in self.notebook.index.walk(): for link in self.notebook.index.list_links(page): yield link def _links(self, path, depth, seen=None): if seen is None: seen = set() for link in self.notebook.index.list_links(path, direction=LINK_DIR_BOTH): key = (link.source.name, link.href.name) if not key in seen: yield link seen.add(key) if link.source == path: other = link.href else: other = link.source if depth > 0: for link in self._links(other, depth-1, seen): yield link def get_linkmap(self, format=None): dotcode = self.get_dotcode() # TODO pass format to dot -Tformat def get_dotcode(self): dotcode = [ 'digraph LINKS {', ' size="6,6";', #~ ' node [shape=box, style="rounded,filled", color="#204a87", fillcolor="#729fcf"];', ' node [shape=note, style="filled", color="#204a87", fillcolor="#729fcf"];', ' "%s" [color="#4e9a06", fillcolor="#8ae234", URL="%s"]' % (self.path.name, self.path.name), # special node ] seen = set() seen.add(self.path.name) for link in self._links(self.path, self.depth): for name in (link.source.name, link.href.name): if not name in seen: dotcode.append(' "%s" [URL="%s"];' % (name, name)) seen.add(name) dotcode.append( ' "%s" -> "%s";' % (link.source.name, link.href.name)) dotcode.append('}') #~ print '\n'.join(dotcode)+'\n' return '\n'.join(dotcode)+'\n' @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' @action(_('Show Link Map'), stock='zim-linkmap') # T: menu item def show_linkmap(self): linkmap = LinkMap(self.window.ui.notebook, self.window.ui.page) # XXX dialog = LinkMapDialog(self.window, linkmap, self.window.get_resource_opener()) dialog.show_all() class LinkMapDialog(Dialog): def __init__(self, ui, linkmap, opener): Dialog.__init__(self, ui, 'LinkMap', defaultwindowsize=(400, 400), buttons=gtk.BUTTONS_CLOSE) self.linkmap = linkmap self.opener = opener hbox = gtk.HBox(spacing=5) self.vbox.add(hbox) self.xdotview = xdot.DotWidget() self.xdotview.set_filter('fdp') self.xdotview.set_dotcode(linkmap.get_dotcode()) self.xdotview.connect('clicked', self.on_node_clicked) hbox.add(self.xdotview) vbox = gtk.VBox() hbox.pack_start(vbox, False) for stock, method in ( (gtk.STOCK_ZOOM_IN, self.xdotview.on_zoom_in ), (gtk.STOCK_ZOOM_OUT, self.xdotview.on_zoom_out), (gtk.STOCK_ZOOM_FIT, self.xdotview.on_zoom_fit), (gtk.STOCK_ZOOM_100, self.xdotview.on_zoom_100), ): button = IconButton(stock) button.connect('clicked', method) vbox.pack_start(button, False) def on_node_clicked(self, widget, name, event): self.opener.open_page(Path(name)) # And a bit of debug code... if __name__ == '__main__': import sys import zim import zim.notebook import gui notebook = zim.notebook.build_notebook(Dir(sys.argv[1])) path = notebook.resolve_path(sys.argv[2]) linkmap = LinkMap(notebook, path) dialog = LinkMapDialog(None, linkmap, None) dialog.show_all() dialog.run() zim-0.65/zim/plugins/attachmentbrowser/0000775000175000017500000000000012615422672020140 5ustar jaapjaap00000000000000zim-0.65/zim/plugins/attachmentbrowser/thumbnailer.py0000664000175000017500000002754312606211212023021 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # # Copyright 2010 Thorsten Hackbarth # 2011-2015 Jaap Karssenberg # License: same as zim (gpl) # # # !! NOTE: when changing this plugin, do test performance on a folder with lots of photos! # # Thumbnail handling following freedesktop.org spec mostly # # Spec version May 2012 -- http://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html # * storage # * XDG_CACHE_HOME/thumbnails/normal <= 128 x 128 # * XDG_CACHE_HOME/thumbnails/large <= 256 x 256 # * XDG_CACHE_HOME/thumbnails/fail # * thumbnail file creation # * Name is md5 hex of full uri # * Must have PNG attributes for mtime and uri (if mtime cannot be determined, do not create a thumbnail) # * Must write as tmp file in same dir and then rename atomic # * Permissions on files must be 0600 --> manager # * lookup / recreate # * Must equal orig mtime vs thumbnail mtime property (not thumbnail file mtime) # * Only store failures for permanent failures, to prevent re-doing them # * Failure is app specific, so subdir with app name and version # * Failure record is just empty png # * Don't attempt creation when not readable (do not store failure) # # Uri according to RFC 2396 # * file/// for files on localhost # * No clear consensus on encoding and white space - do most strict version # # The ThumbnailCreator should take case of the png attributes and # the usage of tmp file + atomic rename (on unix) # The ThumbnailManager implements the rest of the spec # # File.uri is already encoded, don't do anything else here from __future__ import with_statement import os import hashlib import time import threading import Queue import gtk import logging logger = logging.getLogger('zim.plugins.attachmentbrowser') import zim from zim.config import XDG_CACHE_HOME from zim.gui.widgets import rotate_pixbuf LOCAL_THUMB_STORAGE_NORMAL = XDG_CACHE_HOME.subdir('thumbnails/normal') LOCAL_THUMB_STORAGE_LARGE = XDG_CACHE_HOME.subdir('thumbnails/large') LOCAL_THUMB_STORAGE_FAIL = XDG_CACHE_HOME.subdir('thumbnails/fail/zim-%s' % zim.__version__) THUMB_SIZE_NORMAL = 128 THUMB_SIZE_LARGE = 256 class ThumbnailCreatorFailure(ValueError): pass from zim.fs import _replace_file as _atomic_rename def pixbufThumbnailCreator(file, thumbfile, thumbsize): '''Thumbnailer implementation that uses the C{gtk.gdk.Pixbuf} functions to create the thumbnail. ''' tmpfile = thumbfile.dir.file('zim-thumb.new~') options = { # no unicode allowed in options! 'tEXt::Thumb::URI': str( file.uri ), 'tEXt::Thumb::MTime': str( int( file.mtime() ) ), } try: pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(file.encodedpath, thumbsize, thumbsize) pixbuf = rotate_pixbuf(pixbuf) pixbuf.save(tmpfile.encodedpath, 'png', options) _atomic_rename(tmpfile.encodedpath, thumbfile.encodedpath) except: raise ThumbnailCreatorFailure else: return pixbuf class ThumbnailQueue(object): '''Wrapper for L{ThumbnailManager} that does that actual thumbnailing in a separate thread and manages the requests and the results with queues. ''' def __init__(self, thumbnailcreator=pixbufThumbnailCreator): self._thread = None self._in_queue = Queue.Queue() self._out_queue = Queue.Queue() self._thumbmanager = ThumbnailManager(thumbnailcreator) self._count = 0 self._count_lock = threading.Lock() self._running = threading.Event() def queue_empty(self): '''Returns C{True} when both input and output queue are empty''' # Guard total count of items in process # input + output + in between in main function # use lock to protect queue return self._count == 0 def queue_thumbnail_request(self, file, size, mtime=None): '''Add a new request to the queue @param file: a L{File} object @param size: the size of the thumbnail in pixels @param mtime: the mtime of a previous loaded thumbnail, if this matches the current file, the request will be dropped ''' with self._count_lock: self._count += 1 self._in_queue.put_nowait((file, size, mtime)) def start(self): if not (self._thread and self._thread.is_alive()): self._running.set() self._thread = threading.Thread( name=self.__class__.__name__, target=self._thread_main, ) self._thread.setDaemon(True) self._thread.start() def _thread_main(self): # Loop executed in the thread import time try: while self._running.is_set(): time.sleep(0.1) # give other threads a change as well file, size, mtime = self._in_queue.get_nowait() self._in_queue.task_done() try: if mtime and file.mtime() == mtime: self._count -= 1 # skip else: mtime = file.mtime() thumbfile, pixbuf = self._thumbmanager.get_thumbnail(file, size) if thumbfile and pixbuf: self._out_queue.put_nowait((file, size, thumbfile, pixbuf, mtime)) else: self._count -= 1 # skip except: logger.exception('Exception in thumbnail queue') self._count -= 1 # drop except Queue.Empty: pass finally: self._running.clear() def get_ready_thumbnail(self, block=False): '''Check output queue for a thumbnail that is ready @returns: a 5-tuple C{(file, size, thumbfile, pixbuf, mtime)} or 5 times C{None} when nothing is ready and C{block} is C{False}. ''' with self._count_lock: try: file, size, thumbfile, pixbuf, mtime = self._out_queue.get(block=block) self._out_queue.task_done() assert self._count > 0 self._count -= 1 return file, size, thumbfile, pixbuf, mtime except Queue.Empty: return (None, None, None, None, None) def clear_queue(self): def _clear_queue(queue): try: while True: queue.get_nowait() queue.task_done() except Queue.Empty: pass with self._count_lock: # nothing in or out while locked! self._running.clear() # stop thread from competing with us _clear_queue(self._in_queue) if self._thread and self._thread.is_alive(): self._thread.join() self._thread = None _clear_queue(self._out_queue) self._count = 0 class ThumbnailManager(object): '''This class implements thumbnails management (mostly) following the C{freedesktop.org} spec. ''' def __init__(self, thumbnailcreator=pixbufThumbnailCreator): self._thumbnailcreator = thumbnailcreator def get_thumbnail_file(self, file, size): '''Get L{File} object for thumbnail Does not guarantee that the thumbnail actually exists. Do not use this method to lookup the thumbnail, use L{get_thumbnail()} instead. @param file: the original file to be thumbnailed @param size: thumbnail size in pixels (C{THUMB_SIZE_NORMAL}, C{THUMB_SIZE_LARGE}, or integer) @returns: a L{File} object ''' basename = hashlib.md5(file.uri).hexdigest() + '.png' if size <= THUMB_SIZE_NORMAL: return LOCAL_THUMB_STORAGE_NORMAL.file(basename) else: return LOCAL_THUMB_STORAGE_LARGE.file(basename) def get_thumbnail(self, file, size, create=True): '''Looksup thumbnail and return it if a valid thumbnail is availabel. @param file: the file to be thumbnailed as L{File} object @param size: pixel size for thumbnail image as integer @param create: if C{True} we try to create the thumbnail if it doesn't exist @returns: a 2-tuple of the thumbnail file and a pixbuf object or 2 times C{None} ''' thumbfile = self.get_thumbnail_file(file, size) if thumbfile.exists(): # Check the thumbnail is valid pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(thumbfile.encodedpath, size, size) mtime = pixbuf.get_option('tEXt::Thumb::MTime') if mtime and int(mtime) == int(file.mtime()): return thumbfile, pixbuf else: pass # according to spec recreate when option is missing if create: try: return self.create_thumbnail(file, size) except ThumbnailCreatorFailure: return None, None else: return None, None def create_thumbnail(self, file, size): '''(Re-)create a thumbnail without any checking whether the old one is still valid. @param file: the file to be thumbnailed as L{File} object @param size: pixel size for thumbnail file as integer @returns: a 2-tuple of the thumbnail file and a pixbuf object @raises ThumbnailCreatorFailure: if creation fails unexpectedly ''' thumbfile = self.get_thumbnail_file(file, size) thumbsize = THUMB_SIZE_NORMAL if size <= THUMB_SIZE_NORMAL else THUMB_SIZE_LARGE thumbfile.dir.touch(mode=0700) pixbuf = self._thumbnailcreator(file, thumbfile, thumbsize) os.chmod(thumbfile.encodedpath, 0600) if not pixbuf: pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(thumbfile.encodedpath, size, size) elif thumbsize != size: w, h = pixbuf.get_width(), pixbuf.get_height() sw, sh = (size, int(size*float(h)/w)) if (w > h) else (int(size*float(w)/h), size) pixbuf = pixbuf.scale_simple(sw, sh, gtk.gdk.INTERP_NEAREST) return thumbfile, pixbuf def remove_thumbnails(self, file): '''Remove thumbnails for at all sizes To be used when thumbnails are outdated, e.g. when the original file is removed or updated. @param file: the original file ''' for size in (THUMB_SIZE_NORMAL, THUMB_SIZE_LARGE): thumbfile = self.get_thumbnail_file(file, size) try: thumbfile.remove() except OSError: pass #~ class ImageMagickThumbnailer(Thumbnailer): #~ def create_thumbnail(self, file, thumbfile, size): #~ magickextensions=('SVG','PDF','PS','EPS','DVI','DJVU','RAW','DOT','HTML','HTM','TTF','XCF') #~ textextensions=('SH','BAT','TXT','C','C++','CPP','H','H++','HPP','PY','PL') #'AVI','MPG','M2V','M4V','MPEG' #~ # TODO use mimetypes here ?? "image/" and "text/" -- or isimage() and istext() #~ tmpfile.touch() #~ pixbuf = None #~ extension=infile.path.split(".")[-1].upper() #~ if extension in magickextensions: #~ fileinfo=self._file_to_image_magick(infile,tmpfile,w,h,None) #~ if (fileinfo): #~ pixbuf = self._file_to_image_pixbbuf(tmpfile,outfile,w,h,fileinfo) #~ elif extension in textextensions: #~ #convert -size 400x caption:@- caption_manual.gif #~ fileinfo=self._file_to_image_txt(infile,tmpfile,w,h,None) #~ if (fileinfo): #~ pixbuf=self._file_to_image_pixbbuf(tmpfile,outfile,w,h,fileinfo) #~ else: #~ logger.debug('Can\'t convert: %s', infile) #~ try: #~ tmpfile.remove() #~ except OSError: #~ logger.exception('Could not delete tmp file: %s', tmpfile) #~ return pixbuf #~ def _file_to_image_magick(self,infile,outfile,w,h,fileinfo=None): #~ ''' pdf to thumbnail ''' #~ try: #~ logger.debug(' trying Imagemagick') #~ infile_p1=infile.path +'[0]' # !???? #~ #print infile_p1 #~ size=str(w)+'x'+str(h) #~ cmd = ('convert','-size', size, '-trim','+repage','-resize',size+'>') #~ Application(cmd).run((infile_p1, outfile.path)) #~ return True #~ except: #~ logger.exception('Error running %s', cmd) #~ return False #~ def _file_to_image_txt(self,infile,outfile,w,h,fileinfo=None): #~ try: #~ textcont='caption:' #~ size=str(h/4*3)+'x'+str(h) #~ linecount=0; #~ # lines: 18 at 128px #~ # linewidth 35 at 128px #~ while linecount<(h/32+10): #~ line = file.readline() #~ if not line: #~ break #~ linecount+=1 #~ textcont+=line[0:w/24+12] #~ if (len(line)>(w/24+12) ): #~ textcont+='\n' #~ logger.debug('Trying TXT') #~ cmd = ('convert','-font','Courier','-size', size)# '-frame', '1' ) #~ Application(cmd).run((textcont,outfile.path)) #~ return True #~ except: #~ logger.debug(' Error converting TXT') #~ return False # class GnomeThumbnailer(Thumbnailer): # def _file_to_image_gnome(self,infile,outfile,w,h,fileinfo=None): # ''' gnome thumbnailer ''' # global gnome_thumbnailer # if (not gnome_thumbnailer) # return False # try: # logger.debug(' trying Gnome-Thumbnailer') # #print infile_p1 # size=str(w)+'x'+str(h) # cmd = ('/usr/bin/gnome-video-thumbnailer, size, '-trim','+repage','-resize',size+'>') # #print cmd # pdftopng = Application(cmd) # pdftopng.run((infile, outfile)) # return True # except: # logger.debug(' Error converting PDF') zim-0.65/zim/plugins/attachmentbrowser/filebrowser.py0000664000175000017500000003152512605530247023040 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # # Copyright 2010 Thorsten Hackbarth # 2011-2015 Jaap Karssenberg # License: same as zim (gpl) # # # !! NOTE: when changing this plugin, do test performance on a folder with lots of photos! # import datetime import gobject import gtk import logging logger = logging.getLogger('zim.plugins.attachmentbrowser') from zim.fs import File, Dir, format_file_size, is_hidden_file from zim.gui.applications import get_mime_icon, get_mime_description, \ OpenWithMenu from zim.gui.clipboard import \ URI_TARGETS, URI_TARGET_NAMES, \ pack_urilist, unpack_urilist from .thumbnailer import ThumbnailQueue, ThumbnailManager, \ THUMB_SIZE_NORMAL, THUMB_SIZE_LARGE MIN_THUMB_SIZE = 64 # don't render thumbs when icon size is smaller than this MAX_ICON_SIZE = 128 # never render icons larger than this - thumbs go up def render_file_icon(widget, size): # Sizes defined in gtk source, # gtkiconfactory.c for gtk+ 2.18.9 # # (gtk.ICON_SIZE_MENU, 16), # (gtk.ICON_SIZE_BUTTON, 20), # (gtk.ICON_SIZE_SMALL_TOOLBAR, 18), # (gtk.ICON_SIZE_LARGE_TOOLBAR, 24), # (gtk.ICON_SIZE_DND, 32), # (gtk.ICON_SIZE_DIALOG, 48), # # We expect sizes in list: 16, 32, 64, 128 # But only give back 16 or 32, bigger icons # do not look good assert size in (16, 32, 64, 128) if size == 16: pixbuf = widget.render_icon(gtk.STOCK_FILE, gtk.ICON_SIZE_MENU) else: pixbuf = widget.render_icon(gtk.STOCK_FILE, gtk.ICON_SIZE_DND) # Not sure how much sizes depend on theming, # so we scale down if needed, do not scale up if pixbuf.get_width() > size or pixbuf.get_height() > size: return pixbuf.scale_simple(size, size, gtk.gdk.INTERP_BILINEAR) else: return pixbuf BASENAME_COL = 0 PIXBUF_COL = 1 MTIME_COL = 2 class FileBrowserIconView(gtk.IconView): # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'folder_changed': (gobject.SIGNAL_RUN_LAST, None, ()), } def __init__(self, opener, icon_size=THUMB_SIZE_NORMAL, use_thumbnails=True): self.opener = opener self.use_thumbnails = use_thumbnails self.icon_size = None self.folder = None self._thumbnailer = ThumbnailQueue() self._idle_event_id = None self._monitor = None self._mtime = None gtk.IconView.__init__(self, gtk.ListStore(str, gtk.gdk.Pixbuf, object) ) # BASENAME_COL, PIXBUF_COL, MTIME_COL self.set_text_column(BASENAME_COL) self.set_pixbuf_column(PIXBUF_COL) self.set_icon_size(icon_size) self.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, URI_TARGETS, gtk.gdk.ACTION_LINK | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE ) self.enable_model_drag_dest( URI_TARGETS, gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE ) self.connect('drag-data-get', self.on_drag_data_get) self.connect('drag-data-received', self.on_drag_data_received) if gtk.gtk_version >= (2, 12) \ and gtk.pygtk_version >= (2, 12): # custom tooltip self.props.has_tooltip = True self.connect("query-tooltip", self._query_tooltip_cb) # Store colors self._sensitive_color = None self._insensitive_color = None def _init_base_color(*a): # This is handled on expose event, because style does not # yet reflect theming on construction self._sensitive_color = self.style.base[gtk.STATE_NORMAL] self._insensitive_color = self.style.base[gtk.STATE_INSENSITIVE] self._update_state() self.disconnect(self._expose_event_id) # only need this once self._expose_event_id = self.connect('expose-event', _init_base_color) self.connect('button-press-event', self.on_button_press_event) self.connect('item-activated', self.on_item_activated) def set_icon_size(self, icon_size): self.icon_size = icon_size self.refresh(icon_size_changed=True) def set_folder(self, folder): self.teardown_folder() # clears _thumbnailer and _monitor self.folder = folder self.refresh() id = self.folder.connect('changed', self._on_folder_changed) self._monitor = (self.folder, id) def refresh(self, icon_size_changed=False): if self.folder is None: return # Not yet initialized else: try: self._mtime = self.folder.mtime() except OSError: # folder went missing? self.teardown_folder() self._update_state() return else: self._update_state() #~ import time #~ print "start", time.time() self._thumbnailer.clear_queue() if self._idle_event_id: gobject.source_remove(self._idle_event_id) self._idle_event_id = None # Get cache, clear model cache = {} model = self.get_model() for str, pixbuf, mtime in model: cache[str] = (pixbuf, mtime) model.clear() # Cache for mime icons - speed up lookup min_icon_size = min((self.icon_size, MAX_ICON_SIZE)) # Avoid huge icons file_icon = render_file_icon(self, min_icon_size) mime_cache = {} def my_get_mime_icon(file): mt = file.get_mimetype() if not mt in mime_cache: mime_cache[mt] = get_mime_icon(file, min_icon_size) or file_icon return mime_cache[mt] # Add (new) files & queue thumbnails max_text = 1 show_thumbs = self.use_thumbnails and self.icon_size >= MIN_THUMB_SIZE for basename in self.folder.list(): file = self.folder.file(basename) if file.isdir() or is_hidden_file(file): continue max_text = max(max_text, len(basename)) pixbuf, mtime = cache.pop(basename, (None, None)) if show_thumbs and file.isimage(): if not pixbuf: pixbuf = my_get_mime_icon(file) # temporary icon mtime = None if icon_size_changed: self._thumbnailer.queue_thumbnail_request(file, self.icon_size) else: self._thumbnailer.queue_thumbnail_request(file, self.icon_size, mtime) elif pixbuf is None or icon_size_changed: pixbuf = my_get_mime_icon(file) mtime = None else: pass # re-use from cache model.append((basename, pixbuf, mtime)) self._set_orientation_and_size(max_text) if not self._thumbnailer.queue_empty(): self._thumbnailer.start() # delay till here - else reduces our speed on loading self._idle_event_id = \ gobject.idle_add(self._on_check_thumbnail_queue) #~ print "stop ", time.time() def _on_check_thumbnail_queue(self): file, size, thumbfile, pixbuf, mtime = \ self._thumbnailer.get_ready_thumbnail() if file is not None: basename = file.basename model = self.get_model() def update(model, path, iter): if model[iter][BASENAME_COL] == basename: model[iter][PIXBUF_COL] = pixbuf model[iter][MTIME_COL] = mtime model.foreach(update) cont = not self._thumbnailer.queue_empty() if not cont: self._idle_event_id = None return cont # if False event is stopped def _set_orientation_and_size(self, max_text_length): # Set item width to force wrapping text for long items # Set to icon size + some space for padding etc. # And set orientation etc. text_size = max_text_length * 13 # XXX assume 13x per char icon_size = self.icon_size if icon_size < 64: # Text next to the icons if icon_size > 16 and max_text_length > 15: # Wrap text over 2 rows self.set_item_width( icon_size + int((text_size+1) / 2) ) else: # Single row self.set_item_width(icon_size + text_size) self.set_orientation(gtk.ORIENTATION_HORIZONTAL) self.set_row_spacing(0) self.set_column_spacing(0) else: # Text below the icons self.set_item_width(max((icon_size + 12, 96))) self.set_orientation(gtk.ORIENTATION_VERTICAL) self.set_row_spacing(3) self.set_column_spacing(3) def _update_state(self): # Here we set color like sensitive or insensitive widget without # really making the widget insensitive - reason is to allow # drag & drop for a non-existing folder; making the widget # insensitive also blocks drag & drop. if self.folder is None or not self.folder.exists(): self.modify_base( gtk.STATE_NORMAL, self._insensitive_color) else: self.modify_base( gtk.STATE_NORMAL, self._sensitive_color) def teardown_folder(self): try: if self._monitor: dir, id = self._monitor dir.disconnect(id) except: logger.exception('Could not cancel file monitor') finally: self._monitor = None if self._idle_event_id: gobject.source_remove(self._idle_event_id) self._idle_event_id = None try: self._thumbnailer.clear_queue() except: logger.exception('Could not stop thumbnailer') self.get_model().clear() def _on_folder_changed(self, *a): if self.folder and self.folder.mtime() != self._mtime: logger.debug('Folder change detected: %s', self.folder) self.refresh() self.emit('folder-changed') def on_item_activated(self, iconview, path): store = iconview.get_model() iter = store.get_iter(path) file = self.folder.file(store[iter][BASENAME_COL]) self.opener.open_file(file) def on_button_press_event(self, iconview, event): # print 'on_button_press_event' if event.button == 3: popup_menu=gtk.Menu() x = int(event.x) y = int(event.y) time = event.time pathinfo = iconview.get_path_at_pos(x, y) if pathinfo is not None: iconview.grab_focus() popup_menu.popup(None, None, None, event.button, time) self.do_populate_popup(popup_menu, pathinfo) # FIXME should use a signal here return True return False def do_populate_popup(self, menu, pathinfo): # print "do_populate_popup" store = self.get_model() iter = store.get_iter(pathinfo) file = self.folder.file(store[iter][BASENAME_COL]) item = gtk.MenuItem(_('Open With...')) # T: menu item menu.prepend(item) window = self.get_toplevel() submenu = OpenWithMenu(window, file) # XXX any widget should do to find window item.set_submenu(submenu) item = gtk.MenuItem(_('_Open')) # T: menu item to open file or folder item.connect('activate', lambda o: self.opener.open_file(file)) menu.prepend(item) menu.show_all() def _query_tooltip_cb(self, widget, x, y, keyboard_tip, tooltip): context = widget.get_tooltip_context(x, y, keyboard_tip) if not context: return False thumbman = ThumbnailManager() model, path, iter = context name = model[iter][BASENAME_COL] file = self.folder.file(name) mtime = file.mtime() if mtime: mdate = datetime.datetime.fromtimestamp(file.mtime()).strftime('%c') # TODO: fix datetime format else: mdate = _('Unknown') # T: unspecified value for file modification time size = format_file_size(file.size()) thumbfile, pixbuf = thumbman.get_thumbnail(file, THUMB_SIZE_LARGE) if not pixbuf: pixbuf = get_mime_icon(file, 64) or render_file_icon(self, 64) mtype = file.get_mimetype() mtype_desc = get_mime_description(mtype) if mtype_desc: mtype_desc = mtype_desc + " (%s)" % mtype # E.g. "PDF document (application/pdf)" f_label = _('Name') # T: label for file name t_label = _('Type') # T: label for file type s_label = _('Size') # T: label for file size m_label = _('Modified') # T: label for file modification date tooltip.set_markup( "%s\n\n%s: %s\n%s: %s\n%s:\n%s" % ( name, t_label, mtype_desc or mtype, s_label, size, m_label, mdate, )) tooltip.set_icon(pixbuf) widget.set_tooltip_item(tooltip, path) return True # TODO - test drag and drop def on_drag_data_get(self, iconview, dragcontext, selectiondata, info, time): assert selectiondata.target in URI_TARGET_NAMES paths = self.iconview.get_selected_items() if paths: model = self.iconview.get_model() path_to_uri = lambda p: self.folder.file(model[p][BASENAME_COL]).uri uris = map(path_to_uri, paths) data = pack_urilist(uris) selectiondata.set(URI_TARGET_NAMES[0], 8, data) def on_drag_data_received(self, iconview, dragcontext, x, y, selectiondata, info, time): assert selectiondata.target in URI_TARGET_NAMES names = unpack_urilist(selectiondata.data) files = [File(uri) for uri in names if uri.startswith('file://')] action = dragcontext.action logger.debug('Drag received %s, %s', action, files) if action == gtk.gdk.ACTION_MOVE: self._move_files(files) elif action == gtk.gdk.ACTION_ASK: menu = gtk.Menu() item = gtk.MenuItem(_('_Move Here')) # T: popup menu action on drag-drop of a file item.connect('activate', lambda o: self._move_files(files)) menu.append(item) item = gtk.MenuItem(_('_Copy Here')) # T: popup menu action on drag-drop of a file item.connect('activate', lambda o: self._copy_files(files)) menu.append(item) menu.append(gtk.SeparatorMenuItem()) item = gtk.MenuItem(_('Cancel')) # T: popup menu action on drag-drop of a file # cancel action needs no action menu.append(item) menu.show_all() menu.popup(None, None, None, 1, time) else: # Assume gtk.gdk.ACTION_COPY or gtk.gdk.ACTION_DEFAULT # on windows we get "0" which is not mapped to any action self._copy_files(files) def _move_files(self, files): for file in files: newfile = self.folder.new_file(file.basename) file.rename(newfile) self.refresh() def _copy_files(self, files): for file in files: newfile = self.folder.new_file(file.basename) file.copyto(newfile) self.refresh() zim-0.65/zim/plugins/attachmentbrowser/__init__.py0000664000175000017500000002322512605526477022264 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # # Copyright 2010 Thorsten Hackbarth # 2011-2015 Jaap Karssenberg # License: same as zim (gpl) # # # !! NOTE: when changing this plugin, do test performance on a folder with lots of photos! # # ChangeLog # 2015-10-04 Reworked threads to better avoid blocking user interface (Jaap) # 2013-03-03 Change to new plugin extension structure (Jaap) # 2013-02-25 Added zooming icon size, made icon rendering more robust (Jaap) # 2012-08-17 Added mimetype icons, statusbar toggle button, and gio monitor support (Jaap) # 2012-07-20 Updated code for pane uistate (Jaap) # 2012-04-17 Allow drag&drop when folder does not exist yet + fix drag&drop on windows (Jaap) # 2012-02-29 Further work on making iconview look nice and support drag&drop (Jaap) # 2012-02-27 Complete refactoring of thumbnail manager + test case (Jaap) # 2012-02-26 Rewrote direct filessystem calls in order to support non-utf8 file systems (Jaap) # 2011-01-25 Refactored widget and plugin code (Jaap) # tested on gtk < 2.12 (tooltip interface) # add pref for image magick (convert cmd exists on win32 but is not the same) # added buttons to side of widget # 2011-01-02 Fixed use of uistate and updated for new framework to add to the mainwindow (Jaap) # 2010-11-14 Fixed Bug 664551 # 2010-08-31 freedesktop.org thumbnail spec mostly implemented # 2010-06-29 1st working version # # TODO: # [ ] Action for deleting files in context menu # [ ] Copy / cut files in context menu # [ ] Button to clean up the folder - only show when the folder is empty # [ ] Avoid scaling up small images when thumbnailing (check spec on this) # [ ] Store failures as well '''Zim plugin to display files in attachments folder.''' import logging import gtk from zim.plugins import PluginClass, WindowExtension, extends from zim.actions import toggle_action from zim.gui.widgets import Button, BOTTOM_PANE, PANE_POSITIONS, \ IconButton, ScrolledWindow, button_set_statusbar_style, \ WindowSidePaneWidget, uistate_property from .filebrowser import FileBrowserIconView, THUMB_SIZE_LARGE logger = logging.getLogger('zim.plugins.attachmentbrowser') MIN_ICON_ZOOM = 16 DEFAULT_ICON_ZOOM = 64 class AttachmentBrowserPlugin(PluginClass): plugin_info = { 'name': _('Attachment Browser'), # T: plugin name 'description': _('''\ This plugin shows the attachments folder of the current page as an icon view at bottom pane. '''), # T: plugin description 'author': 'Thorsten Hackbarth \nJaap Karssenberg ', 'help': 'Plugins:Attachment Browser', } plugin_preferences = ( # key, type, label, default ('pane', 'choice', _('Position in the window'), BOTTOM_PANE, PANE_POSITIONS), # T: option for plugin preferences # ('preview_size', 'int', _('Tooltip preview size [px]'), (THUMB_SIZE_MIN,480,THUMB_SIZE_MAX)), # T: input label # ('thumb_quality', 'int', _('Preview jpeg Quality [0..100]'), (0,50,100)), # T: input label #~ ('use_imagemagick', 'bool', _('Use ImageMagick for thumbnailing'), False), # T: input label ) #~ @classmethod #~ def check_dependencies(klass): #~ return [("ImageMagick",Application(('convert',None)).tryexec())] @extends('MainWindow') class AttachmentBrowserWindowExtension(WindowExtension): TAB_NAME = _('Attachments') # T: label for attachment browser pane uimanager_xml = ''' ''' def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.preferences = plugin.preferences self._monitor = None # Init statusbar button self.statusbar_frame = gtk.Frame() self.statusbar_frame.set_shadow_type(gtk.SHADOW_IN) self.window.statusbar.pack_end(self.statusbar_frame, False) self.statusbar_button = gtk.ToggleButton('') # translated below button_set_statusbar_style(self.statusbar_button) self.statusbar_button.set_use_underline(True) self.__class__.toggle_attachmentbrowser.connect_actionable( self, self.statusbar_button) self.statusbar_frame.add(self.statusbar_button) self.statusbar_frame.show_all() # Init browser widget opener = self.window.get_resource_opener() self.widget = AttachmentBrowserPluginWidget(self, opener, self.preferences) # FIXME FIXME FIXME - get rid of ui object here self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) # XXX if self.window.ui.page: self.on_open_page(self.window.ui, self.window.ui.page, self.window.ui.page) self.connectto(self.window.ui, 'open-page') self.connectto(self.window.ui, 'close-page') self.connectto(self.window, 'pane-state-changed') def on_preferences_changed(self, preferences): if self.widget is None: return try: self.window.remove(self.widget) except ValueError: pass self.window.add_tab(self.TAB_NAME, self.widget, preferences['pane']) self.widget.show_all() @toggle_action( _('Attachment Browser'), # T: Menu item gtk.STOCK_DIRECTORY, tooltip=_('Show Attachment Browser') # T: Toolbar item tooltip ) def toggle_attachmentbrowser(self, active): # This toggle is called to focus on our widget # but also after the fact when we detect focus changed # so check state explicitly and don't do more than needed visible, size, tab = self.window.get_pane_state(self.preferences['pane']) if active: if not (visible and tab == self.TAB_NAME): self.window.set_pane_state( self.preferences['pane'], True, activetab=self.TAB_NAME, grab_focus=True) # else pass else: if visible and tab == self.TAB_NAME: self.window.set_pane_state( self.preferences['pane'], False) # else pass def on_pane_state_changed(self, window, pane, visible, active): if pane != self.preferences['pane']: return if visible and active == self.TAB_NAME: self.toggle_attachmentbrowser(True) else: self.toggle_attachmentbrowser(False) def on_open_page(self, ui, page, path): dir = self.window.ui.notebook.get_attachments_dir(page) # XXX -> page.get_attachemnts_dir() self.widget.iconview.set_folder(dir) self._refresh_statusbar() def on_close_page(self, ui, page, final): self.widget.iconview.teardown_folder() def _refresh_statusbar(self): model = self.widget.iconview.get_model() # XXX n = len(model) self.statusbar_button.set_label( ngettext('%i _Attachment', '%i _Attachments', n) % n) # T: Label for the statusbar, %i is the number of attachments for the current page def teardown(self): self.widget.iconview.teardown_folder() self.toggle_attachmentbrowser(False) self.window.remove(self.widget) if self.statusbar_frame: self.window.statusbar.remove(self.statusbar_frame) self.widget = None class AttachmentBrowserPluginWidget(gtk.HBox, WindowSidePaneWidget): '''Wrapper aroung the L{FileBrowserIconView} that adds the buttons for zoom / open folder / etc. ... ''' icon_size = uistate_property('icon_size', DEFAULT_ICON_ZOOM) def __init__(self, extension, opener, preferences): gtk.HBox.__init__(self) self.extension = extension # XXX self.opener = opener self.uistate = extension.uistate self.preferences = preferences use_thumbs = self.preferences.setdefault('use_thumbnails', True) # Hidden setting self.iconview = FileBrowserIconView(opener, self.icon_size, use_thumbs) self.add(ScrolledWindow(self.iconview, shadow=gtk.SHADOW_NONE)) self.buttonbox = gtk.VBox() self.pack_end(self.buttonbox, False) open_folder_button = IconButton(gtk.STOCK_OPEN, relief=False) open_folder_button.connect('clicked', self.on_open_folder) self.buttonbox.pack_start(open_folder_button, False) refresh_button = IconButton(gtk.STOCK_REFRESH, relief=False) refresh_button.connect('clicked', lambda o: self.on_refresh_button()) self.buttonbox.pack_start(refresh_button, False) zoomin = IconButton(gtk.STOCK_ZOOM_IN, relief=False) zoomout = IconButton(gtk.STOCK_ZOOM_OUT, relief=False) zoomin.connect('clicked', lambda o: self.on_zoom_in()) zoomout.connect('clicked', lambda o: self.on_zoom_out()) self.buttonbox.pack_end(zoomout, False) self.buttonbox.pack_end(zoomin, False) self.zoomin_button = zoomin self.zoomout_button = zoomout self.set_icon_size(self.icon_size) self.iconview.connect('folder-changed', lambda o: self.extension._refresh_statusbar()) def embed_closebutton(self, button): if button: self.buttonbox.pack_start(button, False) self.buttonbox.reorder_child(button, 0) else: for widget in self.buttonbox.get_children(): if hasattr(widget, 'window_close_button'): self.buttonbox.remove(widget) return True def on_open_folder(self, o): # Callback for the "open folder" button self.opener.open_dir(self.iconview.folder) self.iconview.refresh() def on_refresh_button(self): self.iconview.refresh() self.extension._refresh_statusbar() # XXX def on_zoom_in(self): self.set_icon_size( min((self.icon_size * 2, THUMB_SIZE_LARGE))) # 16 > 32 > 64 > 128 > 256 def on_zoom_out(self): self.set_icon_size( max((self.icon_size/2, MIN_ICON_ZOOM))) # 16 < 32 < 64 < 128 < 256 def set_icon_size(self, icon_size): self.iconview.set_icon_size(icon_size) self.zoomin_button.set_sensitive(False) self.zoomout_button.set_sensitive(False) self.zoomin_button.set_sensitive(icon_size < THUMB_SIZE_LARGE) self.zoomout_button.set_sensitive(icon_size > MIN_ICON_ZOOM) self.icon_size = icon_size # Do this last - avoid store state after fail zim-0.65/zim/plugins/tableofcontents.py0000664000175000017500000003755112601033111020140 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012, 2013 Jaap Karssenberg from __future__ import with_statement import gobject import gtk import pango import re import datetime from zim.plugins import PluginClass, WindowExtension, extends from zim.notebook import Path from zim.formats import HEADING from zim.gui.widgets import LEFT_PANE, PANE_POSITIONS, BrowserTreeView, populate_popup_add_separator, TableVBox from zim.gui.pageview import FIND_REGEX, SCROLL_TO_MARK_MARGIN, _is_heading_tag from zim.signals import ConnectorMixin # FIXME, these methods should be supported by pageview - need anchors - now it is a HACK _is_heading = lambda iter: bool(filter(_is_heading_tag, iter.get_tags())) def find_heading(buffer, heading): '''Find a heading @param buffer: the C{gtk.TextBuffer} @param heading: text of the heading @returns: a C{gtk.TextIter} for the new cursor position or C{None} ''' regex = "^%s$" % re.escape(heading) with buffer.tmp_cursor(): if buffer.finder.find(regex, FIND_REGEX): iter = buffer.get_insert_iter() start = iter.get_offset() else: return None while not _is_heading(iter): if buffer.finder.find_next(): iter = buffer.get_insert_iter() if iter.get_offset() == start: return None # break infinite loop else: return None if _is_heading(iter): return iter else: return None def select_heading(buffer, heading): iter = find_heading(buffer, heading) if iter: buffer.place_cursor(iter) buffer.select_line() return True else: return False class ToCPlugin(PluginClass): plugin_info = { 'name': _('Table of Contents'), # T: plugin name 'description': _('''\ This plugin adds an extra widget showing a table of contents for the current page. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Table Of Contents', } # TODO add controls for changing levels in ToC plugin_preferences = ( # key, type, label, default ('pane', 'choice', _('Position in the window'), LEFT_PANE, PANE_POSITIONS), # T: option for plugin preferences ('floating', 'bool', _('Show ToC as floating widget instead of in sidepane'), True), # T: option for plugin preferences ('show_h1', 'bool', _('Show the page title heading in the ToC'), False), # T: option for plugin preferences ) # TODO disable pane setting if not embedded def __init__(self, config=None): PluginClass.__init__(self, config) self.on_preferences_changed(self.preferences) self.preferences.connect('changed', self.on_preferences_changed) def on_preferences_changed(self, preferences): if preferences['floating']: self.set_extension_class('MainWindow', MainWindowExtensionFloating) else: self.set_extension_class('MainWindow', MainWindowExtensionEmbedded) @extends('MainWindow', autoload=False) class MainWindowExtensionEmbedded(WindowExtension): def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.widget = SidePaneToC(self.window.ui, self.window.pageview) # XXX self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) def on_preferences_changed(self, preferences): if self.widget is None: return try: self.window.remove(self.widget) except ValueError: pass self.window.add_tab( _('ToC'), self.widget, preferences['pane']) # T: widget label self.widget.show_all() self.widget.set_show_h1(preferences['show_h1']) def teardown(self): self.window.remove(self.widget) self.widget.disconnect_all() self.widget = None @extends('MainWindow', autoload=False) class MainWindowExtensionFloating(WindowExtension): def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.widget = FloatingToC(self.window.ui, self.window.pageview) # XXX self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) def on_preferences_changed(self, preferences): self.widget.set_show_h1(preferences['show_h1']) def teardown(self): self.widget.disconnect_all() self.widget.destroy() TEXT_COL = 0 class ToCTreeView(BrowserTreeView): def __init__(self, ellipsis): BrowserTreeView.__init__(self, ToCTreeModel()) self.set_headers_visible(False) self.get_selection().set_mode(gtk.SELECTION_MULTIPLE) # Allow select multiple cell_renderer = gtk.CellRendererText() if ellipsis: cell_renderer.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn('_heading_', cell_renderer, text=TEXT_COL) column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) # Without this sizing, column width only grows and never shrinks self.append_column(column) class ToCTreeModel(gtk.TreeStore): def __init__(self): gtk.TreeStore.__init__(self, str) # TEXT_COL def populate(self, parsetree, show_h1): self.clear() headings = [] for heading in parsetree.findall(HEADING): headings.append( (int(heading.attrib['level']), heading.gettext()) ) if not show_h1 \ and headings \ and headings[0][0] == 1 \ and all(h[0] > 1 for h in headings[1:]): headings.pop(0) # do not show first heading stack = [(-1, None)] for level, text in headings: assert level > -1 # just to be sure while stack[-1][0] >= level: stack.pop() parent = stack[-1][1] iter = self.append(parent, (text,)) stack.append((level, iter)) class ToCWidget(ConnectorMixin, gtk.ScrolledWindow): def __init__(self, ui, pageview, ellipsis, show_h1=False): gtk.ScrolledWindow.__init__(self) self.show_h1 = show_h1 self.treeview = ToCTreeView(ellipsis) self.treeview.connect('row-activated', self.on_heading_activated) self.treeview.connect('populate-popup', self.on_populate_popup) self.add(self.treeview) # XXX remove ui - use signals from pageview for this self.connectto(ui, 'open-page') self.connectto(ui.notebook, 'stored-page') self.pageview = pageview if self.pageview.page: self.load_page(self.pageview.page) def set_show_h1(self, show_h1): if show_h1 != self.show_h1: self.show_h1 = show_h1 if self.pageview.page: self.load_page(self.pageview.page) def on_open_page(self, ui, page, path): self.load_page(page) def on_stored_page(self, notebook, page): if page == self.pageview.page: self.load_page(page) def load_page(self, page): model = self.treeview.get_model() tree = page.get_parsetree() if tree is None: model.clear() else: model.populate(tree, self.show_h1) self.treeview.expand_all() def on_heading_activated(self, treeview, path, column): self.select_heading(path) def select_heading(self, path): '''Returns a C{gtk.TextIter} for a C{gtk.TreePath} pointing to a heading or C{None}. ''' model = self.treeview.get_model() text = model[path][TEXT_COL].decode('utf-8') textview = self.pageview.view buffer = textview.get_buffer() if select_heading(buffer, text): textview.scroll_to_mark(buffer.get_insert(), SCROLL_TO_MARK_MARGIN) return True else: return False def select_section(self, buffer, path): '''Select all text between two headings @param buffer: the C{gtk.TextBuffer} to select in @param path: the C{gtk.TreePath} for the heading of the section ''' model = self.treeview.get_model() starttext = model[path][TEXT_COL].decode('utf-8') nextpath = path[:-1] + (path[-1]+1,) if nextpath in model: endtext = model[nextpath][TEXT_COL].decode('utf-8') else: endtext = None textview = self.pageview.view buffer = textview.get_buffer() start = find_heading(buffer, starttext) if endtext: end = find_heading(buffer, endtext) else: end = buffer.get_end_iter() if start and end: buffer.select_range(start, end) def on_populate_popup(self, treeview, menu): model, paths = treeview.get_selection().get_selected_rows() if not paths: can_promote = False can_demote = False else: can_promote = self.can_promote(paths) can_demote = self.can_demote(paths) populate_popup_add_separator(menu, prepend=True) for text, sensitive, handler in ( (_('Demote'), can_demote, self.on_demote), # T: action to lower level of heading in the text (_('Promote'), can_promote, self.on_promote), # T: action to raise level of heading in the text ): item = gtk.MenuItem(text) menu.prepend(item) if sensitive: item.connect('activate', handler) else: item.set_sensitive(False) def can_promote(self, paths): # All headings have level larger than 1 return paths and all(len(p) > 1 for p in paths) def on_promote(self, *a): # Promote selected paths and all their children model, paths = self.treeview.get_selection().get_selected_rows() if not self.can_promote(paths): return False seen = set() for path in paths: iter = model.get_iter(path) for i in self._walk(model, iter): p = model.get_path(i) if not p in seen: if self.show_h1: newlevel = len(p) - 1 else: newlevel = len(p) self._format(p, newlevel) seen.add(p) self.load_page(self.pageview.page) return True def can_demote(self, paths): # All headings below max level and all have a potential parent # Potential parents should be on the same level above the selected # path, so as long as the path is not the first on it's level it # has one. # Or the current parent path also has to be in the list if not paths \ or any(len(p) >= 6 for p in paths): return False for p in paths: if p[-1] == 0 and not p[:-1] in paths: return False else: return True def on_demote(self, *a): # Demote selected paths and all their children # note can not demote below level 6 model, paths = self.treeview.get_selection().get_selected_rows() if not self.can_demote(paths): return False seen = set() for path in paths: # FIXME parent may have different real level if levels are # inconsistent - this should result in an offset being applied # But need to check actual heading tags being used to know for sure iter = model.get_iter(path) for i in self._walk(model, iter): p = model.get_path(i) if not p in seen: if self.show_h1: newlevel = len(p) + 1 else: newlevel = len(p) + 2 self._format(p, newlevel) seen.add(p) self.load_page(self.pageview.page) return True def _walk(self, model, iter): # yield iter and all its (grand)children yield iter child = model.iter_children(iter) while child: for i in self._walk(model, child): yield i child = model.iter_next(child) def _format(self, path, level): assert level > 0 and level < 7 if self.select_heading(path): self.pageview.toggle_format('h' + str(level)) class SidePaneToC(ToCWidget): def __init__(self, ui, pageview): ToCWidget.__init__(self, ui, pageview, ellipsis=True) self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) self.set_shadow_type(gtk.SHADOW_IN) self.set_size_request(-1, 200) # Fixed Height class FloatingToC(TableVBox, ConnectorMixin): # This class does all the work to keep the floating window in # the right place, and with the right size # Depends on TableVBox to draw nice line border around it TEXTVIEW_OFFSET = 5 def __init__(self, ui, pageview): TableVBox.__init__(self) hscroll = gtk.HScrollbar(gtk.Adjustment()) self._hscroll_height = hscroll.size_request()[1] self.head = gtk.Label(_('ToC')) self.head.set_padding(5, 1) self.widget = ToCWidget(ui, pageview, ellipsis=False) self.widget.set_shadow_type(gtk.SHADOW_NONE) self.widget.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) # Setting horizontal scroll automatic as well # makes the scrollbars visible at all times once they are shown once # custom control implemented below self._head_event_box = gtk.EventBox() self._head_event_box.add(self.head) self._head_event_box.connect('button-release-event', self.on_toggle) self.pack_start(self._head_event_box, False) self.pack_start(self.widget) ## Add self to textview # Need to wrap in event box to make widget visible # probably because Containers normally don't have their own # gdk window. So would paint directly on background window. self.textview = pageview.view self._text_view_allocation = ( self.textview.allocation.width, self.textview.allocation.height ) self._event_box = gtk.EventBox() self._event_box.add(self) self.textview.add_child_in_window(self._event_box, gtk.TEXT_WINDOW_WIDGET, 0, 0) self.connectto(self.textview, 'size-allocate', handler=self.on_size_allocate_textview, ) self.connectto(self, 'size-allocate', handler=self.update_position, ) self._event_box.show_all() def set_show_h1(self, show_h1): self.widget.set_show_h1(show_h1) def disconnect_all(self): self.widget.disconnect_all() ConnectorMixin.disconnect_all(self) def destroy(self): self._event_box.destroy() TableVBox.destroy(self) def on_toggle(self, *a): self.widget.set_property('visible', not self.widget.get_property('visible') ) self.queue_draw() def do_size_request(self, requisition): # Base size request on the actual treeview, not on the # scrolled window. If we limit the size, assume the scrolled # window to take care of it text_window = self.textview.get_window(gtk.TEXT_WINDOW_WIDGET) if text_window is None: # Textview not yet initialized (?) return TableVBox.do_size_request(self, requisition) text_x, text_y, text_w, text_h, text_z = text_window.get_geometry() head_w, head_h = self.head.size_request() border = self.get_border_width() spacing = self.get_spacing() if self.widget.get_property('visible'): tree_w, tree_h = self.widget.treeview.size_request() tree_h = max(tree_h, head_h) # always show empty space if no content tree_w += 1 # Allow minimal frame for scrolledwindow tree_h += 1 total_w = max(head_w, tree_w) + 2 * border total_h = head_h + tree_h + 2 * border + spacing else: total_w = head_w + 2 * border total_h = head_h + 2 * border max_w = 0.5 * text_w - self.TEXTVIEW_OFFSET max_h = 0.7 * text_h - self.TEXTVIEW_OFFSET if total_w > max_w: # We are going to show a srollbar at the bottom # the +3 is a hack to give enough space so vscroll is # not triggered unnecessary total_h += self._hscroll_height + 3 requisition.width = min(max_w, total_w) requisition.height = min(max_h, total_h) def do_size_allocate(self, allocation): # Need to overload this one as well, to make sure we get what # we wanted self.allocation=allocation border = self.get_border_width() spacing = self.get_spacing() head_height = self.head.get_child_requisition()[1] tree_w, tree_h = self.widget.treeview.get_child_requisition() self._head_event_box.size_allocate(gtk.gdk.Rectangle( x=allocation.x + border, y=allocation.y + border, width=allocation.width - 2*border, height=head_height )) if self.widget.get_property('visible'): body_w = allocation.width - 2*border body_h = allocation.height - 2*border - spacing - head_height h_policy = gtk.POLICY_ALWAYS if tree_w > body_w else gtk.POLICY_NEVER self.widget.set_policy(h_policy, gtk.POLICY_AUTOMATIC) self.widget.size_allocate(gtk.gdk.Rectangle( x=allocation.x + border, y=allocation.y + border + head_height + spacing, width=body_w, height=body_h )) def on_size_allocate_textview(self, textview, a): new_allocation = (a.width, a.height) if new_allocation != self._text_view_allocation: self.queue_resize() # resize results in size_allocate, which results in update_position self._text_view_allocation = new_allocation def update_position(self, *a): text_window = self.textview.get_window(gtk.TEXT_WINDOW_WIDGET) if text_window is not None: text_x, text_y, text_w, text_h, text_z = text_window.get_geometry() x = text_w - self.allocation.width - self.TEXTVIEW_OFFSET y = self.TEXTVIEW_OFFSET self.textview.move_child(self._event_box, x, y) else: pass # Textview not yet initialized (?) # Need to register classes defining gobject signals gobject.type_register(FloatingToC) zim-0.65/zim/plugins/gnuplot_ploteditor.py0000664000175000017500000000575112521367703020722 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # # gnuplot_ploteditor.py # # This is a plugin for Zim, which allows inserting Gnuplot scripts to # have Zim generate plots from them. # # Author: Alessandro Magni # Date: 2010-10-12 # Copyright (c) 2010, released under the GNU GPL v2 or higher # # import glob from zim.plugins.base.imagegenerator import \ ImageGeneratorPlugin, ImageGeneratorClass, MainWindowExtensionBase from zim.fs import File, TmpFile from zim.config import data_file from zim.templates import get_template from zim.applications import Application, ApplicationError # TODO put these commands in preferences gnuplot_cmd = ('gnuplot',) class InsertGnuplotPlugin(ImageGeneratorPlugin): plugin_info = { 'name': _('Insert Gnuplot'), # T: plugin name 'description': _('''\ This plugin provides a plot editor for zim based on Gnuplot. '''), # T: plugin description 'help': 'Plugins:Gnuplot Editor', 'author': 'Alessandro Magni', } object_type = 'gnuplot' short_label = _('Gnuplot') # T: menu item insert_label = _('Insert Gnuplot') # T: menu item edit_label = _('_Edit Gnuplot') # T: menu item syntax = None @classmethod def check_dependencies(klass): has_gnuplot = Application(gnuplot_cmd).tryexec() return has_gnuplot, [('Gnuplot', has_gnuplot, True)] class MainWindowExtension(MainWindowExtensionBase): def build_generator(self): page = self.window.ui.page # XXX notebook = self.window.ui.notebook # XXX attachment_folder = notebook.get_attachments_dir(page) #~ print ">>>", notebook, page, attachment_folder return GnuplotGenerator(self.plugin, attachment_folder) class GnuplotGenerator(ImageGeneratorClass): uses_log_file = False object_type = 'gnuplot' scriptname = 'gnuplot.gnu' imagename = 'gnuplot.png' def __init__(self, plugin, attachment_folder=None): ImageGeneratorClass.__init__(self, plugin) self.template = get_template('plugins', 'gnuploteditor.gnu') self.attachment_folder = attachment_folder self.plotscriptfile = TmpFile(self.scriptname) def generate_image(self, text): plotscriptfile = self.plotscriptfile pngfile = File(plotscriptfile.path[:-4] + '.png') template_vars = { # they go in the template 'gnuplot_script': text, 'png_fname': pngfile.path, } if self.attachment_folder and self.attachment_folder.exists(): template_vars['attachment_folder'] = self.attachment_folder.path else: template_vars['attachment_folder'] = '' # Write to tmp file using the template for the header / footer lines = [] self.template.process(lines, template_vars) plotscriptfile.writelines(lines) #~ print '>>>\n%s<<<' % plotscriptfile.read() # Call Gnuplot try: gnu_gp = Application(gnuplot_cmd) gnu_gp.run(args=( plotscriptfile.basename, ), cwd=plotscriptfile.dir) # you call it as % gnuplot output.plt except ApplicationError: return None, None # Sorry - no log else: return pngfile, None def cleanup(self): path = self.plotscriptfile.path for path in glob.glob(path[:-4]+'.*'): File(path).remove() zim-0.65/zim/plugins/quicknote.py0000664000175000017500000003606412377623276017001 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2010-2014 Jaap Karssenberg import gtk import re from datetime import date as dateclass from zim.plugins import PluginClass, WindowExtension, extends from zim.command import Command from zim.actions import action from zim.config import data_file, ConfigManager from zim.notebook import Notebook, PageNameError, NotebookInfo, \ resolve_notebook, build_notebook from zim.ipc import start_server_if_not_running, ServerProxy from zim.gui.widgets import Dialog, ScrolledTextView, IconButton, \ InputForm, gtk_window_set_default_icon, QuestionDialog from zim.gui.clipboard import Clipboard, SelectionClipboard from zim.gui.notebookdialog import NotebookComboBox from zim.templates import get_template import logging logger = logging.getLogger('zim.plugins.quicknote') usagehelp = '''\ usage: zim --plugin quicknote [OPTIONS] Options: --help, -h Print this help text and exit --notebook URI Select the notebook in the dialog --page STRING Fill in full page name --section STRING Fill in the page section in the dialog --basename STRING Fill in the page name in the dialog --append [true|false] Set whether to append or create new page --text TEXT Provide the text directly --input stdin Provide the text on stdin --input clipboard Take the text from the clipboard --encoding base64 Text is encoded in base64 --encoding url Text is url encoded (In both cases expects UTF-8 after decoding) --attachments FOLDER Import all files in FOLDER as attachments, wiki input can refer these files relatively --option url=STRING Set template parameter ''' class QuickNotePluginCommand(Command): options = ( ('help', 'h', 'Print this help text and exit'), ('notebook=', '', 'Select the notebook in the dialog'), ('page=', '', 'Fill in full page name'), ('section=', '', 'Fill in the page section in the dialog'), ('namespace=', '', 'Fill in the page section in the dialog'), # backward compatibility ('basename=', '', 'Fill in the page name in the dialog'), ('append=', '', 'Set whether to append or create new page ("true" or "false")'), ('text=', '', 'Provide the text directly'), ('input=', '', 'Provide the text on stdin ("stdin") or take the text from the clipboard ("clipboard")'), ('encoding=', '', 'Text encoding ("base64" or "url")'), ('attachments=', '', 'Import all files in FOLDER as attachments, wiki input can refer these files relatively'), ('option=', '', 'Set template parameter, e.g. "url=URL"'), ) def parse_options(self, *args): self.opts['option'] = [] # allow list if all(not a.startswith('-') for a in args): # Backward compartibility for options not prefixed by "--" # used "=" as separator for values # template options came as "option:KEY=VALUE" for arg in args: if arg.startswith('option:'): self.opts['option'].append(arg[7:]) elif arg == 'help': self.opts['help'] = True else: key, value = arg.split('=', 1) self.opts[key] = value else: Command.parse_options(self, *args) self.template_options = {} for arg in self.opts['option']: key, value = arg.split('=', 1) self.template_options[key] = value if 'append' in self.opts: self.opts['append'] = \ self.opts['append'].lower() == 'true' def get_text(self): if 'input' in self.opts: if self.opts['input'] == 'stdin': import sys text = sys.stdin.read() elif self.opts['input'] == 'clipboard': text = \ SelectionClipboard.get_text() \ or Clipboard.get_text() else: raise AssertionError, 'Unknown input type: %s' % self.opts['input'] else: text = self.opts.get('text') if text and 'encoding' in self.opts: if self.opts['encoding'] == 'base64': import base64 text = base64.b64decode(text) elif self.opts['encoding'] == 'url': from zim.parsing import url_decode, URL_ENCODE_DATA text = url_decode(text, mode=URL_ENCODE_DATA) else: raise AssertionError, 'Unknown encoding: %s' % self.opts['encoding'] if text and not isinstance(text, unicode): text = text.decode('utf-8') return text def run(self): if self.opts.get('help'): print usagehelp # TODO handle this in Command base class else: gtk_window_set_default_icon() if 'notebook' in self.opts: notebook = resolve_notebook(self.opts['notebook']) else: notebook = None dialog = QuickNoteDialog(None, notebook=notebook, namespace=self.opts.get('namespace'), basename=self.opts.get('basename'), append=self.opts.get('append'), text=self.get_text(), template_options=self.template_options, attachments=self.opts.get('attachments') ) dialog.run() class QuickNotePlugin(PluginClass): plugin_info = { 'name': _('Quick Note'), # T: plugin name 'description': _('''\ This plugin adds a dialog to quickly drop some text or clipboard content into a zim page. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Quick Note', } #~ plugin_preferences = ( # key, type, label, default #~ ) @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' @action(_('Quick Note...'), stock='gtk-new') # T: menu item def show_quick_note(self): ui = self.window.ui # XXX notebook = self.window.ui.notebook # XXX dialog = BoundQuickNoteDialog.unique(self, self.window, notebook, ui) dialog.show() class BoundQuickNoteDialog(Dialog): '''Dialog bound to a specific notebook''' def __init__(self, window, notebook, ui, page=None, namespace=None, basename=None, append=None, text=None, template_options=None, attachments=None ): Dialog.__init__(self, window, _('Quick Note')) self._ui = ui self._updating_title = False self._title_set_manually = not basename is None self.attachments = attachments self.uistate.setdefault('namespace', None, basestring) namespace = namespace or self.uistate['namespace'] self.form = InputForm(notebook=notebook) self.vbox.pack_start(self.form, False) self._init_inputs(namespace, basename, append, text, template_options) def _init_inputs(self, namespace, basename, append, text, template_options, custom=None): if template_options is None: template_options = {} else: template_options = template_options.copy() if namespace is not None and basename is not None: page = namespace + ':' + basename else: page = namespace or basename self.form.add_inputs( ( ('page', 'page', _('Page')), ('namespace', 'namespace', _('Page section')), # T: text entry field ('new_page', 'bool', _('Create a new page for each note')), # T: checkbox in Quick Note dialog ('basename', 'string', _('Title')) # T: text entry field ) ) self.form.update({ 'page': page, 'namespace': namespace, 'new_page': True, 'basename': basename, } ) self.uistate.setdefault('open_page', True) self.uistate.setdefault('new_page', True) if basename: self.uistate['new_page'] = True # Be consistent with input # Set up the inputs and set page/ namespace to switch on # toggling the checkbox self.form.widgets['page'].set_no_show_all(True) self.form.widgets['namespace'].set_no_show_all(True) if append is None: self.form['new_page'] = bool(self.uistate['new_page']) else: self.form['new_page'] = not append def switch_input(*a): if self.form['new_page']: self.form.widgets['page'].hide() self.form.widgets['namespace'].show() self.form.widgets['basename'].set_sensitive(True) else: self.form.widgets['page'].show() self.form.widgets['namespace'].hide() self.form.widgets['basename'].set_sensitive(False) switch_input() self.form.widgets['new_page'].connect('toggled', switch_input) self.open_page = gtk.CheckButton(_('Open _Page')) # T: Option in quicknote dialog # Don't use "O" as accelerator here to avoid conflict with "Ok" self.open_page.set_active(self.uistate['open_page']) self.action_area.pack_start(self.open_page, False) self.action_area.set_child_secondary(self.open_page, True) # Add the main textview and hook up the basename field to # sync with first line of the textview window, textview = ScrolledTextView() self.textview = textview self.textview.set_editable(True) self.vbox.add(window) self.form.widgets['basename'].connect('changed', self.on_title_changed) self.textview.get_buffer().connect('changed', self.on_text_changed) # Initialize text from template template = get_template('plugins', 'quicknote.txt') template_options['text'] = text or '' template_options.setdefault('url', '') lines = [] template.process(lines, template_options) buffer = self.textview.get_buffer() buffer.set_text(''.join(lines)) begin, end = buffer.get_bounds() buffer.place_cursor(begin) buffer.set_modified(False) self.connect('delete-event', self.do_delete_event) def do_response(self, id): if id == gtk.RESPONSE_DELETE_EVENT: if self.textview.get_buffer().get_modified(): ok = QuestionDialog(self, _('Discard note?')).run() # T: confirm closing quick note dialog if ok: Dialog.do_response(self, id) # else pass else: Dialog.do_response(self, id) else: Dialog.do_response(self, id) def do_delete_event(self, *a): # Block deletion if do_response did not yet destroy the dialog return True def run(self): self.textview.grab_focus() Dialog.run(self) def show(self): self.textview.grab_focus() Dialog.show(self) def save_uistate(self): self.uistate['new_page'] = self.form['new_page'] self.uistate['open_page'] = self.open_page.get_active() if self.uistate['new_page']: self.uistate['namespace'] = self.form['namespace'] else: self.uistate['namespace'] = self.form['page'] def on_title_changed(self, o): o.set_input_valid(True) if not self._updating_title: self._title_set_manually = True def on_text_changed(self, buffer): if not self._title_set_manually: # Automatically generate a (valid) page name self._updating_title = True bounds = buffer.get_bounds() title = buffer.get_text(*bounds).strip()[:50] # Cut off at 50 characters to prevent using a whole paragraph title = title.replace(':', '') if '\n' in title: title, _ = title.split('\n', 1) try: title = Notebook.cleanup_pathname(title, purge=True) self.form['basename'] = title except PageNameError: pass self._updating_title = False def _get_ui(self): return self._ui def do_response_ok(self): # NOTE: Keep in mind that this method should also work using # a proxy object for the ui. This is why we have the get_ui() # argument to construct a proxy. buffer = self.textview.get_buffer() bounds = buffer.get_bounds() text = buffer.get_text(*bounds) # HACK: change "[]" at start of line into "[ ]" so checkboxes get inserted correctly text = re.sub(r'(?m)^(\s*)\[\](\s)', r'\1[ ]\2', text) # Specify "(?m)" instead of re.M since "flags" keyword is not # supported in python 2.6 ui = self._get_ui() if ui is None: return False if self.form['new_page']: if not self.form.widgets['namespace'].get_input_valid() \ or not self.form['basename']: if not self.form['basename']: entry = self.form.widgets['basename'] entry.set_input_valid(False, show_empty_invalid=True) return False path = self.form['namespace'].name + ':' + self.form['basename'] ui.new_page_from_text(text, path, attachments=self.attachments, open_page=self.open_page.get_active() ) else: if not self.form.widgets['page'].get_input_valid() \ or not self.form['page']: return False path = self.form['page'].name if self.attachments: ui.import_attachments(path, self.attachments) ui.append_text_to_page(path, '\n----\n'+text) if self.open_page.get_active(): ui.present(path) # also works with proxy return True class QuickNoteDialog(BoundQuickNoteDialog): '''Dialog which includes a notebook chooser''' def __init__(self, window, notebook=None, page=None, namespace=None, basename=None, append=None, text=None, template_options=None, attachments=None ): assert page is None, 'TODO' manager = ConfigManager() # FIXME should be passed in self.config = manager.get_config_dict('quicknote.conf') self.uistate = self.config['QuickNoteDialog'] Dialog.__init__(self, window, _('Quick Note')) self._updating_title = False self._title_set_manually = not basename is None self.attachments = attachments if notebook and not isinstance(notebook, basestring): notebook = notebook.uri self.uistate.setdefault('lastnotebook', None, basestring) if self.uistate['lastnotebook']: notebook = notebook or self.uistate['lastnotebook'] self.config['Namespaces'].setdefault(notebook, None, basestring) namespace = namespace or self.config['Namespaces'][notebook] self.form = InputForm() self.vbox.pack_start(self.form, False) # TODO dropdown could use an option "Other..." label = gtk.Label(_('Notebook')+': ') label.set_alignment(0.0, 0.5) self.form.attach(label, 0,1, 0,1, xoptions=gtk.FILL) # T: Field to select Notebook from drop down list self.notebookcombobox = NotebookComboBox(current=notebook) self.notebookcombobox.connect('changed', self.on_notebook_changed) self.form.attach(self.notebookcombobox, 1,2, 0,1) self._init_inputs(namespace, basename, append, text, template_options) self.uistate['lastnotebook'] = notebook self._set_autocomplete(notebook) def save_uistate(self): notebook = self.notebookcombobox.get_notebook() self.uistate['lastnotebook'] = notebook self.uistate['new_page'] = self.form['new_page'] self.uistate['open_page'] = self.open_page.get_active() if notebook is not None: if self.uistate['new_page']: self.config['Namespaces'][notebook] = self.form['namespace'] else: self.config['Namespaces'][notebook] = self.form['page'] self.config.write() def on_notebook_changed(self, o): notebook = self.notebookcombobox.get_notebook() if not notebook or notebook == self.uistate['lastnotebook']: return self.uistate['lastnotebook'] = notebook self.config['Namespaces'].setdefault(notebook, None, basestring) namespace = self.config['Namespaces'][notebook] if namespace: self.form['namespace'] = namespace self._set_autocomplete(notebook) def _set_autocomplete(self, notebook): if notebook: if isinstance(notebook, basestring): notebook = NotebookInfo(notebook) obj, x = build_notebook(notebook) self.form.widgets['namespace'].notebook = obj self.form.widgets['page'].notebook = obj logger.debug('Notebook for autocomplete: %s (%s)', obj, notebook) else: self.form.widgets['namespace'].notebook = None self.form.widgets['page'].notebook = None logger.debug('Notebook for autocomplete unset') def _get_ui(self): start_server_if_not_running() notebook = self.notebookcombobox.get_notebook() if notebook: return ServerProxy().get_notebook(notebook) else: return None zim-0.65/zim/plugins/insertsymbol.py0000664000175000017500000001356512430471302017507 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2010 Jaap Karssenberg import gtk import logging from zim.plugins import PluginClass, extends, WindowExtension from zim.actions import action from zim.gui.widgets import Dialog, Button, InputEntry, ScrolledWindow logger = logging.getLogger('zim.plugins.insertsymbol') VERBATIM = 'code' VERBATIM_BLOCK = 'pre' class InsertSymbolPlugin(PluginClass): plugin_info = { 'name': _('Insert Symbol'), # T: plugin name 'description': _('''\ This plugin adds the 'Insert Symbol' dialog and allows auto-formatting typographic characters. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Insert Symbol', } def __init__(self, config=None): PluginClass.__init__(self, config) self.symbols = {} self.symbol_order = [] def load_file(self): self.symbols = {} self.symbol_order = [] file = self.config.get_config_file('symbols.list') for line in file.readlines(): line = line.strip() if not line or line.startswith('#'): continue try: if '#' in line: line, _ = line.split('#', 1) line = line.strip() shortcut, code = line.split() symbol = unichr(int(code)) if not shortcut in self.symbols: self.symbols[shortcut] = symbol self.symbol_order.append(shortcut) else: logger.exception('Shortcut defined twice: %s', shortcut) except: logger.exception('Could not parse symbol: %s', line) def get_symbols(self): for shortcut in self.symbol_order: symbol = self.symbols[shortcut] yield symbol, shortcut @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.connectto(window.pageview.view, 'end-of-word') if not plugin.symbols: plugin.load_file() @action(_('Sy_mbol...')) # T: menu item def insert_symbol(self): '''Run the InsertSymbolDialog''' InsertSymbolDialog(self.window, self.plugin, self.window.pageview).run() def on_end_of_word(self, textview, start, end, word, char, editmode): '''Handler for the end-of-word signal from the textview''' # We check for non-space char because e.g. typing "-->" will # emit end-of-word with "--" as word and ">" as character. # This should be distinguished from the case when e.g. typing # "-- " emits end-of-word with "--" as word and " " (space) as # the char. if VERBATIM in editmode \ or VERBATIM_BLOCK in editmode \ or not (char.isspace() or char == ';'): return symbol = self.plugin.symbols.get(word) if not symbol and word.count('\\') == 1: # do this after testing the whole word, we have e.g. "=\=" # also avoid replacing end of e.g. "C:\foo\bar\left", # so match exactly one "\" prefix, key = word.split('\\', 1) symbol = self.plugin.symbols.get('\\' + key) if symbol: start.forward_chars(len(prefix)) if not symbol: return # replace word with symbol buffer = textview.get_buffer() mark = buffer.create_mark(None, end, left_gravity=False) if char == ';': end = end.copy() end.forward_char() # include the ';' in the delete buffer.delete(start, end) else: buffer.delete(start, end) iter = buffer.get_iter_at_mark(mark) buffer.insert(iter, symbol) buffer.delete_mark(mark) # block other handlers textview.stop_emission('end-of-word') class InsertSymbolDialog(Dialog): def __init__(self, ui, plugin, pageview): Dialog.__init__(self, ui, _('Insert Symbol'), # T: Dialog title button=(_('_Insert'), 'gtk-ok'), # T: Button label defaultwindowsize=(350, 400) ) self.plugin = plugin self.pageview = pageview if not plugin.symbols: plugin.load_file() self.textentry = InputEntry() self.vbox.pack_start(self.textentry, False) # TODO make this iconview single-click model = gtk.ListStore(str, str) # text, shortcut self.iconview = gtk.IconView(model) self.iconview.set_text_column(0) self.iconview.set_column_spacing(0) self.iconview.set_row_spacing(0) if gtk.gtk_version >= (2, 12) \ and gtk.pygtk_version >= (2, 12): self.iconview.set_property('has-tooltip', True) self.iconview.connect('query-tooltip', self.on_query_tooltip) self.iconview.connect('item-activated', self.on_activated) self.vbox.add(ScrolledWindow(self.iconview)) button = gtk.Button(stock=gtk.STOCK_EDIT) button.connect('clicked', self.on_edit) self.action_area.add(button) self.action_area.reorder_child(button, 0) self.load_symbols() def load_symbols(self): model = self.iconview.get_model() model.clear() for symbol, shortcut in self.plugin.get_symbols(): model.append((symbol, shortcut)) def on_query_tooltip(self, iconview, x, y, keyboard, tooltip): if keyboard: return False x, y = iconview.convert_widget_to_bin_window_coords(x, y) path = iconview.get_path_at_pos(x, y) if path is None: return False model = iconview.get_model() iter = model.get_iter(path) text = model.get_value(iter, 1) if not text: return False tooltip.set_text(text) return True def on_activated(self, iconview, path): model = iconview.get_model() iter = model.get_iter(path) text = model.get_value(iter, 0) text = text.decode('utf-8') pos = self.textentry.get_position() self.textentry.insert_text(text, pos) self.textentry.set_position(pos + len(text)) def on_edit(self, button): file = self.confg.get_config_file('symbols.list') if self.ui.edit_config_file(file): self.plugin.load_file() self.load_symbols() def run(self): self.iconview.grab_focus() Dialog.run(self) def do_response_ok(self): text = self.textentry.get_text() textview = self.pageview.view buffer = textview.get_buffer() buffer.insert_at_cursor(text) return True zim-0.65/zim/plugins/gnu_r_ploteditor.py0000664000175000017500000000573312521367744020351 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # # ploteditor.py # # This is a plugin for Zim, which allows inserting GNU R scripts to # have Zim generate plots from them. # # Author: Lee Braiden # Date: 2010-03-13 # Copyright (c) 2010, released under the GNU GPL v2 or higher # # Heavily based on equationeditor.py plugin as of: # bzr revno 212, (2010-03-10), marked as # Copyright 2009 Jaap Karssenberg # import glob import re from zim.plugins.base.imagegenerator import ImageGeneratorPlugin, ImageGeneratorClass from zim.fs import File, TmpFile from zim.config import data_file from zim.templates import get_template from zim.applications import Application # TODO put these commands in preferences gnu_r_cmd = ('R',) class InsertGNURPlotPlugin(ImageGeneratorPlugin): plugin_info = { 'name': _('Insert GNU R Plot'), # T: plugin name 'description': _('''\ This plugin provides a plot editor for zim based on GNU R. '''), # T: plugin description 'help': 'Plugins:GNU R Plot Editor', 'author': 'Lee Braiden', } object_type = 'gnu_r_plot' short_label = _('GNU _R Plot') # T: menu item insert_label = _('Insert GNU R Plot') # T: menu item edit_label = _('_Edit GNU R Plot') # T: menu item syntax = 'r' @classmethod def check_dependencies(klass): has_gnur = Application(gnu_r_cmd).tryexec() return has_gnur, [('GNU R', has_gnur, True)] class GNURPlotGenerator(ImageGeneratorClass): uses_log_file = False object_type = 'gnu_r_plot' scriptname = 'gnu_r_plot.r' imagename = 'gnu_r_plot.png' def __init__(self, plugin): ImageGeneratorClass.__init__(self, plugin) self.template = get_template('plugins', 'gnu_r_editor.r') self.plotscriptfile = TmpFile(self.scriptname) def generate_image(self, text): plotscriptfile = self.plotscriptfile pngfile = File(plotscriptfile.path[:-2] + '.png') plot_width = 480 # default image width (px) plot_height = 480 # default image height (px) # LOOK for image size in comments of the script r=re.search(r"^#\s*WIDTH\s*=\s*([0-9]+)$", text,re.M) if r: plot_width=int(r.group(1)) r=re.search(r"^#\s*HEIGHT\s*=\s*([0-9]+)$", text,re.M) if r: plot_height=int(r.group(1)) template_vars = { 'gnu_r_plot_script': text, 'r_width': plot_width, 'r_height': plot_height, 'png_fname': pngfile.path.replace('\\', '/'), # Even on windows, GNU R expects unix path seperator } # Write to tmp file usign the template for the header / footer lines = [] self.template.process(lines, template_vars) plotscriptfile.writelines(lines) #print '>>>%s<<<' % plotscriptfile.read() # Call GNU R try: gnu_r = Application(gnu_r_cmd) #~ gnu_r.run(args=('-f', plotscriptfile.basename, ), cwd=plotscriptfile.dir) gnu_r.run(args=('-f', plotscriptfile.basename, '--vanilla'), cwd=plotscriptfile.dir) except: return None, None # Sorry, no log else: return pngfile, None def cleanup(self): path = self.plotscriptfile.path for path in glob.glob(path[:-2]+'.*'): File(path).remove() zim-0.65/zim/plugins/sourceview.py0000664000175000017500000002562712607507447017172 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jiří Janoušek # Copyright 2014 Jaap Karssenberg import gtk import pango import logging logger = logging.getLogger('zim.pugin.sourceview') try: import gtksourceview2 except: gtksourceview2 = None from zim.plugins import PluginClass, WindowExtension, extends from zim.actions import action from zim.utils import WeakSet from zim.objectmanager import ObjectManager, CustomObjectClass from zim.config import String, Boolean from zim.gui.widgets import Dialog, ScrolledWindow from zim.gui.objectmanager import CustomObjectWidget, TextViewWidget from zim.formats.html import html_encode if gtksourceview2: lm = gtksourceview2.LanguageManager() lang_ids = lm.get_language_ids() lang_names = [lm.get_language(i).get_name() for i in lang_ids] LANGUAGES = dict((lm.get_language(i).get_name(), i) for i in lang_ids) else: LANGUAGES = {} #~ print LANGUAGES OBJECT_TYPE = 'code' class SourceViewPlugin(PluginClass): plugin_info = { 'name': _('Source View'), # T: plugin name 'description': _('''\ This plugin allows inserting 'Code Blocks' in the page. These will be shown as emdedded widgets with syntax highlighting, line numbers etc. '''), # T: plugin description 'author': 'Jiří Janoušek', 'help': 'Plugins:Source View', 'object_types': (OBJECT_TYPE, ), } plugin_preferences = ( # key, type, label, default ('auto_indent', 'bool', _('Auto indenting'), True), # T: preference option for sourceview plugin ('smart_home_end', 'bool', _('Smart Home key'), True), # T: preference option for sourceview plugin ('highlight_current_line', 'bool', _('Highlight current line'), False), # T: preference option for sourceview plugin ('show_right_margin', 'bool', _('Show right margin'), False), # T: preference option for sourceview plugin ('right_margin_position', 'int', _('Right margin position'), 72, (1, 1000)), # T: preference option for sourceview plugin ('tab_width', 'int', _('Tab width'), 4, (1, 80)), # T: preference option for sourceview plugin ) @classmethod def check_dependencies(klass): check = not gtksourceview2 is None return check, [('gtksourceview2', check, True)] def __init__(self, config=None): PluginClass.__init__(self, config) self.connectto(self.preferences, 'changed', self.on_preferences_changed) def create_object(self, attrib, text): '''Factory method for SourceViewObject objects''' obj = SourceViewObject(attrib, text, self.preferences) return obj def on_preferences_changed(self, preferences): '''Update preferences on open objects''' for obj in ObjectManager.get_active_objects(OBJECT_TYPE): obj.preferences_changed() @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) ObjectManager.register_object(OBJECT_TYPE, self.plugin.create_object) # XXX use pageview attribute instead of singleton def teardown(self): ObjectManager.unregister_object(OBJECT_TYPE) @action(_('Code Block'), readonly=False) # T: menu item def insert_sourceview(self): '''Inserts new SourceView''' lang = InsertCodeBlockDialog(self.window.ui).run() # XXX if not lang: return # dialog cancelled else: obj = self.plugin.create_object({'type': OBJECT_TYPE, 'lang': lang}, '') pageview = self.window.pageview # XXX pageview.insert_object(obj) class InsertCodeBlockDialog(Dialog): def __init__(self, ui): Dialog.__init__(self, ui, _('Insert Code Block')) # T: dialog title names = sorted(LANGUAGES, key=lambda k: k.lower()) self.add_form( (('lang', 'choice', _('Syntax'), names),) # T: input label ) # Set previous used language self.uistate.define(lang=String(None)) if 'lang' in self.uistate: for name, id in LANGUAGES.items(): if self.uistate['lang'] == id: try: self.form['lang'] = name except ValueError: pass break def do_response_ok(self): name = self.form['lang'] if name: self.result = LANGUAGES[name] self.uistate['lang'] = LANGUAGES[name] return True else: return False # no syntax selected class SourceViewObject(CustomObjectClass): OBJECT_ATTR = { 'type': String('code'), 'lang': String(None), 'linenumbers': Boolean(True), } def __init__(self, attrib, data, preferences): if data.endswith('\n'): data = data[:-1] # If we have trailing \n it looks like an extra empty line # in the buffer, so we default remove one CustomObjectClass.__init__(self, attrib, data) self.preferences = preferences self.buffer = None self._widgets = WeakSet() def get_widget(self): if not self.buffer: self.buffer = gtksourceview2.Buffer() self.buffer.set_text(self._data) self.buffer.connect('modified-changed', self.on_modified_changed) self.buffer.set_highlight_matching_brackets(True) self.buffer.set_modified(False) self._data = None try: if self._attrib['lang']: self.buffer.set_language(lm.get_language(self._attrib['lang'])) except: logger.exception('Could not set language for sourceview: %s', lang) widget = SourceViewWidget(self, self.buffer) self._widgets.add(widget) widget.view.set_show_line_numbers(self._attrib['linenumbers']) widget.set_preferences(self.preferences) return widget def preferences_changed(self): for widget in self._widgets: widget.set_preferences(self.preferences) def on_modified_changed(self, buffer): # Sourceview changed, set change on oject, reset state of # sourceview buffer so we get a new signal with next change if buffer.get_modified(): self.set_modified(True) buffer.set_modified(False) def get_data(self): '''Returns data as text.''' if self.buffer: bounds = self.buffer.get_bounds() text = self.buffer.get_text(bounds[0], bounds[1]) text += '\n' # Make sure we always have a trailing \n return text else: return self._data def dump(self, format, dumper, linker=None): if format == "html": if self._attrib['lang']: # class="brush: language;" works with SyntaxHighlighter 2.0.278 # by Alex Gorbatchev # TODO: not all GtkSourceView language ids match with SyntaxHighlighter # language ids. # TODO: some template instruction to be able to use other highlighters as well? output = ['
    \n' % html_encode(self._attrib['lang'])]
    			else:
    				output = ['
    \n']
    			data = self.get_data()
    			data = html_encode(data) # XXX currently dumper gives encoded lines - NOK
    			if self._attrib['linenumbers']:
    				for i, l in enumerate(data.splitlines(1)):
    					output.append('%i ' % (i+1) + l)
    			else:
    				output.append(data)
    			output.append('
    \n') return output return CustomObjectClass.dump(self, format, dumper, linker) def set_language(self, lang): '''Set language in SourceView.''' self._attrib['lang'] = lang self.set_modified(True) if self.buffer: if lang is None: self.buffer.set_language(None) else: self.buffer.set_language(lm.get_language(lang)) def show_line_numbers(self, show): '''Toggles line numbers in SourceView.''' self._attrib['linenumbers'] = show self.set_modified(True) for widget in self._widgets: widget.view.set_show_line_numbers(show) class SourceViewWidget(TextViewWidget): def __init__(self, obj, buffer): CustomObjectWidget.__init__(self) self.set_has_cursor(True) self.buffer = buffer self.obj = obj self.view = gtksourceview2.View(self.buffer) self.view.modify_font(pango.FontDescription('monospace')) self.view.set_auto_indent(True) self.view.set_smart_home_end(True) self.view.set_highlight_current_line(True) self.view.set_right_margin_position(80) self.view.set_show_right_margin(True) self.view.set_tab_width(4) # simple toolbar #~ bar = gtk.HBox() # FIXME: use gtk.Toolbar stuff #~ lang_selector = gtk.combo_box_new_text() #~ lang_selector.append_text('(None)') #~ for l in lang_names: lang_selector.append_text(l) #~ try: #~ lang_selector.set_active(lang_ids.index(self._attrib['lang'])+1) #~ self.set_language(self._attrib['lang'] or None, False) #~ except (ValueError, KeyError): #~ lang_selector.set_active(0) #~ self.set_language(None, False) #~ lang_selector.connect('changed', self.on_lang_changed) #~ bar.pack_start(lang_selector, False, False) #~ line_numbers = gtk.ToggleButton('Line numbers') #~ try: #~ line_numbers.set_active(self._attrib['linenumbers']=='true') #~ self.show_line_numbers(self._attrib['linenumbers'], False) #~ except (ValueError, KeyError): #~ line_numbers.set_active(True) #~ self.show_line_numbers(True, False) #~ line_numbers.connect('toggled', self.on_line_numbers_toggled) #~ bar.pack_start(line_numbers, False, False) # TODO: other toolbar options # TODO: autohide toolbar if textbuffer is not active # Pack everything #~ self.vbox.pack_start(bar, False, False) win = ScrolledWindow(self.view, gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER, gtk.SHADOW_NONE) # only horizontal scroll self.vbox.pack_start(win) # Hook up signals self.view.connect('populate-popup', self.on_populate_popup) self.view.connect('move-cursor', self.on_move_cursor) def set_preferences(self, preferences): self.view.set_auto_indent(preferences['auto_indent']) self.view.set_smart_home_end(preferences['smart_home_end']) self.view.set_highlight_current_line(preferences['highlight_current_line']) self.view.set_right_margin_position(preferences['right_margin_position']) self.view.set_show_right_margin(preferences['show_right_margin']) self.view.set_tab_width(preferences['tab_width']) #~ def on_lang_changed(self, selector): #~ '''Callback for language selector''' #~ lang = selector.get_active() #~ self.set_language(lang_ids[lang-1] if lang>0 else '') #~ def on_line_numbers_toggled(self, button): #~ '''Callback for toggling line numbers.''' #~ self.show_line_numbers(button.get_active()) def on_populate_popup(self, view, menu): menu.prepend(gtk.SeparatorMenuItem()) def activate_linenumbers(item): self.obj.show_line_numbers(item.get_active()) item = gtk.CheckMenuItem(_('Show Line Numbers')) # T: preference option for sourceview plugin item.set_active(self.obj._attrib['linenumbers']) item.connect_after('activate', activate_linenumbers) menu.prepend(item) def activate_lang(item): self.obj.set_language(item.zim_sourceview_languageid) item = gtk.MenuItem(_('Syntax')) submenu = gtk.Menu() for lang in sorted(LANGUAGES, key=lambda k: k.lower()): langitem = gtk.MenuItem(lang) langitem.connect('activate', activate_lang) langitem.zim_sourceview_languageid = LANGUAGES[lang] submenu.append(langitem) item.set_submenu(submenu) menu.prepend(item) menu.show_all() # TODO: undo(), redo() stuff zim-0.65/zim/plugins/linesorter.py0000664000175000017500000000543312375120010017131 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 NorfCran # License: same as zim (gpl) from __future__ import with_statement import gtk from zim.plugins import PluginClass, extends, WindowExtension from zim.actions import action from zim.gui.widgets import ui_environment, MessageDialog from zim.utils import natural_sort_key #from zim.gui.clipboard import parsetree_from_selectiondata import logging logger = logging.getLogger('zim.plugins.linesorter') class LineSorterPlugin(PluginClass): plugin_info = { 'name': _('Line Sorter'), # T: plugin name 'description': _('''\ This plugin sorts selected lines in alphabetical order. If the list is already sorted the order will be reversed (A-Z to Z-A). '''), # T: plugin description 'author': 'NorfCran', 'help': 'Plugins:Line Sorter', } @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' @action(_('_Sort lines'), stock='gtk-sort-ascending') # T: menu item def sort_selected_lines(self): buffer = self.window.pageview.view.get_buffer() try: sel_start, sel_end = buffer.get_selection_bounds() except ValueError: MessageDialog(self.ui, _('Please select more than one line of text, first.')).run() # T: Error message in "" dialog, %s will be replaced by application name return first_lineno = sel_start.get_line() last_lineno = sel_end.get_line() with buffer.user_action: # Get iters for full selection iter_end_line = buffer.get_iter_at_line(last_lineno) iter_end_line.forward_line() # include \n at end of line if iter_end_line.is_end() and not iter_end_line.starts_line(): # no \n at end of buffer, insert it buffer.insert(iter_end_line, '\n') iter_end_line = buffer.get_end_iter() iter_begin_line = buffer.get_iter_at_line(first_lineno) # Make a list of tuples, first element of each tuple is # text only sort key (no formatting), second element # is parsetree per line lines = [] for line_nr in range(first_lineno, last_lineno+1): start, end = buffer.get_line_bounds(line_nr) text = buffer.get_text(start, end) tree = buffer.get_parsetree(bounds=(start, end)) lines.append((natural_sort_key(text), tree)) #~ logger.debug("Content of selected lines (text, tree): %s", lines) # Sort the list of tuples sorted_lines = sorted(lines) if lines == sorted_lines: # reverse if already sorted sorted_lines.reverse() #~ logger.debug("Sorted lines: %s", sorted_lines) # Replace selection buffer.delete(iter_begin_line, iter_end_line) for line in sorted_lines: buffer.insert_parsetree_at_cursor(line[1]) zim-0.65/zim/plugins/spell.py0000664000175000017500000001305512601504546016075 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008,2015 Jaap Karssenberg '''Spell check plugin based on gtkspell''' import locale import logging logger = logging.getLogger('zim.plugins.spell') from zim.plugins import PluginClass, WindowExtension, extends from zim.signals import SIGNAL_AFTER from zim.actions import toggle_action from zim.gui.widgets import ErrorDialog # Try which of the two bindings is available import gtk # ensure gtkspellcheck detects right gtk binding try: import gtkspellcheck except ImportError: gtkspellcheck = None try: import gtkspell except ImportError: gtkspell = None else: gtkspell = None # Hotfix for robustness of loading languages in gtkspellcheck # try to be robust for future versions breaking this or not needing it # See https://github.com/koehlma/pygtkspellcheck/issues/22 if gtkspellcheck \ and hasattr(gtkspellcheck.SpellChecker, '_LanguageList') \ and hasattr(gtkspellcheck.SpellChecker._LanguageList, 'from_broker') : from pylocales import code_to_name orig_from_broker = gtkspellcheck.SpellChecker._LanguageList.from_broker @classmethod def new_from_broker(cls, broker): try: return orig_from_broker(broker) except: lang = [] for language in broker.list_languages(): try: lang.append((language, code_to_name(language))) except: logger.exception('While loading language for: %s', language) return cls(sorted(lang, key=lambda language: language[1])) gtkspellcheck.SpellChecker._LanguageList.from_broker = new_from_broker ##### class SpellPlugin(PluginClass): plugin_info = { 'name': _('Spell Checker'), # T: plugin name 'description': _('''\ Adds spell checking support using gtkspell. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Spell Checker', } plugin_preferences = ( ('language', 'string', 'Default Language', ''), ) @classmethod def check_dependencies(klass): return bool(gtkspellcheck or gtkspell), [ ('gtkspellcheck', not gtkspellcheck is None, True), ('gtkspell', not gtkspell is None, True) ] @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self._adapter = GtkspellcheckAdapter if gtkspellcheck else GtkspellAdapter self.uistate.setdefault('active', False) self.toggle_spellcheck(self.uistate['active']) self.connectto(self.window.ui, 'open-page', order=SIGNAL_AFTER) # XXX @toggle_action( _('Check _spelling'), # T: menu item stock='gtk-spell-check', accelerator='F7' ) def toggle_spellcheck(self, active): textview = self.window.pageview.view checker = getattr(textview, '_gtkspell', None) if active: if checker: checker.enable() else: self.setup() elif not active: if checker: checker.disable() # else pass self.uistate['active'] = active def on_open_page(self, ui, page, record): textview = self.window.pageview.view checker = getattr(textview, '_gtkspell', None) if checker: checker.on_new_buffer() def setup(self): textview = self.window.pageview.view lang = self.plugin.preferences['language'] or locale.getdefaultlocale()[0] logger.debug('Spellcheck language: %s', lang) try: checker = self._adapter(textview, lang) except: ErrorDialog(self.window.ui, ( _('Could not load spell checking'), # T: error message _('This could mean you don\'t have the proper\ndictionaries installed') # T: error message explanation ) ).run() else: textview._gtkspell = checker def teardown(self): textview = self.window.pageview.view if hasattr(textview, '_gtkspell') \ and textview._gtkspell is not None: textview._gtkspell.detach() textview._gtkspell = None class GtkspellcheckAdapter(object): def __init__(self, textview, lang): self._lang = lang self._textview = textview self._checker = None self.enable() def on_new_buffer(self): if self._checker: # wanted to use checker.buffer_initialize() here, # but gives issue, see https://github.com/koehlma/pygtkspellcheck/issues/24 self.detach() self.enable() def enable(self): if self._checker: self._checker.enable() else: self._clean_tag_table() self._checker = gtkspellcheck.SpellChecker(self._textview, self._lang) def disable(self): if self._checker: self._checker.disable() def detach(self): if self._checker: self._checker.disable() self._clean_tag_table() self._checker = None def _clean_tag_table(self): ## cleanup tag table - else next loading will fail prefix='gtkspellchecker' table = self._textview.get_buffer().get_tag_table() tags = [] table.foreach(lambda tag, data: tags.append(tag)) for tag in tags: name = tag.get_property('name') if name and name.startswith(prefix): table.remove(tag) class GtkspellAdapter(object): def __init__(self, textview, lang): self._lang = lang self._textview = textview self._checker = None self.enable() def on_new_buffer(self): pass def enable(self): if not self._checker: self._checker = gtkspell.Spell(self._textview, self._lang) def disable(self): self.detach() def detach(self): if self._checker: self._checker.detach() self._checker = None zim-0.65/zim/plugins/screenshot.py0000664000175000017500000001565212614412356017141 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2014 Jaap Karssenberg # Copyright 2014 Andri Kusumah import time from platform import os import gtk from zim.plugins import PluginClass, WindowExtension, extends from zim.actions import action from zim.fs import TmpFile from zim.applications import Application from zim.gui.widgets import ui_environment, Dialog, ErrorDialog PLATFORM = os.name if ui_environment['platform'] == 'maemo': # don't know what os.name return on maemo PLATFORM = 'maemo' """ TESTED: - import (imagemagick) - scrot UNTESTED: - boxcutter (windows, http://keepnote.org/boxcutter/) - screenshot-tool (maemo) """ COMMAND = 'import' SUPPORTED_COMMANDS_BY_PLATFORM = dict([ ('posix', ('import', 'scrot')), ('nt', ('boxcutter',)), ('maemo', ('screenshot-tool',)), ]) SUPPORTED_COMMANDS = SUPPORTED_COMMANDS_BY_PLATFORM[PLATFORM] if len(SUPPORTED_COMMANDS): COMMAND = SUPPORTED_COMMANDS[0] # set first available tool as default class ScreenshotPicker(object): cmd_options = dict([ ('scrot', { 'select': ('--select', '--border'), 'full': ('--multidisp',), 'delay': '-d', }), ('import', { 'select': ('-silent',), 'full': ('-silent', '-window', 'root'), 'delay': '-delay', }), ('boxcutter', { 'select': None, 'full': ('--fullscreen',), 'delay': None, }), ('screenshot-tool', { 'select': None, 'full': (), 'delay': '-d', }) ]) cmd_default = COMMAND final_cmd_options = () def __init__(self, cmd, select=False, delay=0): cmd = self.select_cmd(cmd) screenshot_mode = 'select' if select is True else 'full' self.final_cmd_options += self.cmd_options[cmd][screenshot_mode] if str(delay).isdigit() and int(delay) > 0 and self.cmd_options[cmd]['delay'] is not None: self.final_cmd_options += (self.cmd_options[cmd]['delay'], str(delay)) @classmethod def select_cmd(cls, cmd=None): if cmd is None or cmd not in SUPPORTED_COMMANDS or cmd not in cls.cmd_options: cmd = cls.cmd_default return cmd @classmethod def get_cmd_options(cls, cmd=None, select=False, delay=0): cmd = cls.select_cmd(cmd) delay = delay if str(delay).isdigit() and int(delay) > 0 else 0 me = cls(cmd, select, str(delay)) return me.final_cmd_options @classmethod def has_delay_cmd(cls, cmd=None): cmd = cls.select_cmd(cmd) return True if cls.cmd_options[cmd]['delay'] is not None else False @classmethod def has_select_cmd(cls, cmd): cmd = cls.select_cmd(cmd) return True if cls.cmd_options[cmd]['select'] is not None else False class InsertScreenshotPlugin(PluginClass): plugin_info = { 'name': _('Insert Screenshot'), # T: plugin name 'description': _('''\ This plugin allows taking a screenshot and directly insert it in a zim page. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Insert Screenshot', } plugin_preferences = ( # key, type, label, default ('screenshot_command', 'choice', _('Screenshot Command'), COMMAND, SUPPORTED_COMMANDS), # T: plugin preference ) screenshot_cmd = COMMAND def __init__(self, config=None): PluginClass.__init__(self, config) self.on_preferences_changed(self.preferences) self.preferences.connect('changed', self.on_preferences_changed) def on_preferences_changed(self, preferences): self.screenshot_cmd = preferences['screenshot_command'] @classmethod def check_dependencies(cls): cmds = [] is_ok = False if len(SUPPORTED_COMMANDS): for cmd in SUPPORTED_COMMANDS: has_tool = Application(cmd).tryexec() if has_tool: is_ok = True cmds.append((cmd, True, False)) else: cmds.append((cmd, False, False)) return is_ok, cmds @extends('MainWindow') class MainWindowExtension(WindowExtension): uimanager_xml = ''' ''' screenshot_command = COMMAND plugin = None def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.on_preferences_changed(plugin.preferences) self.connectto(plugin.preferences, 'changed', self.on_preferences_changed) self.plugin = plugin def on_preferences_changed(self, preferences): if preferences['screenshot_command']: self.screenshot_command = preferences['screenshot_command'] @action(_('_Screenshot...')) # T: menu item for insert screenshot plugin def insert_screenshot(self): notebook = self.window.ui.notebook # XXX page = self.window.ui.page # XXX dialog = InsertScreenshotDialog.unique(self, self.window, notebook, page, self.plugin.preferences['screenshot_command']) dialog.show_all() class InsertScreenshotDialog(Dialog): screenshot_command = COMMAND def __init__(self, window, notebook, page, screenshot_command): Dialog.__init__(self, window, _('Insert Screenshot')) # T: dialog title self.screenshot_command = screenshot_command if ScreenshotPicker.has_select_cmd(self.screenshot_command): self.screen_radio = gtk.RadioButton(None, _('Capture whole screen')) # T: option in 'insert screenshot' dialog self.select_radio = gtk.RadioButton(self.screen_radio, _('Select window or region')) # T: option in 'insert screenshot' dialog self.vbox.add(self.screen_radio) self.vbox.add(self.select_radio) self.notebook = notebook self.page = page if ScreenshotPicker.has_delay_cmd(self.screenshot_command): hbox = gtk.HBox() self.vbox.add(hbox) hbox.add(gtk.Label(_('Delay') + ': ')) # T: input in 'insert screenshot' dialog self.time_spin = gtk.SpinButton() self.time_spin.set_range(0, 99) self.time_spin.set_increments(1, 5) self.time_spin.set_value(0) hbox.add(self.time_spin) hbox.add(gtk.Label(' ' + _('seconds'))) # T: label behind timer def do_response_ok(self): tmpfile = TmpFile('insert-screenshot.png') selection_mode = False delay = 0 if ScreenshotPicker.has_select_cmd(self.screenshot_command) and self.select_radio.get_active(): selection_mode = True if ScreenshotPicker.has_delay_cmd(self.screenshot_command): delay = self.time_spin.get_value_as_int() options = ScreenshotPicker.get_cmd_options(self.screenshot_command, selection_mode, str(delay)) helper = Application((self.screenshot_command,) + options) def callback(status, tmpfile): if status == helper.STATUS_OK: name = time.strftime('screenshot_%Y-%m-%d-%H%M%S.png') imgdir = self.notebook.get_attachments_dir(self.page) imgfile = imgdir.new_file(name) tmpfile.rename(imgfile) pageview = self.ui.mainwindow.pageview pageview.insert_image(imgfile, interactive=False, force=True) else: ErrorDialog(self.ui, _('Some error occurred while running "%s"') % self.screenshot_command).run() # T: Error message in "insert screenshot" dialog, %s will be replaced by application name tmpfile.dir.touch() helper.spawn((tmpfile,), callback, tmpfile) return True zim-0.65/zim/plugins/equationeditor.py0000664000175000017500000000557412601025220020004 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009 Jaap Karssenberg import glob from zim.plugins.base.imagegenerator import ImageGeneratorPlugin, ImageGeneratorClass from zim.fs import File, TmpFile from zim.config import data_file from zim.templates import get_template from zim.applications import Application, ApplicationError # TODO put these commands in preferences latexcmd = ('latex', '-no-shell-escape', '-halt-on-error') dvipngcmd = ('dvipng', '-q', '-bg', 'Transparent', '-T', 'tight', '-o') class InsertEquationPlugin(ImageGeneratorPlugin): plugin_info = { 'name': _('Insert Equation'), # T: plugin name 'description': _('''\ This plugin provides an equation editor for zim based on latex. This is a core plugin shipping with zim. '''), # T: plugin description 'help': 'Plugins:Equation Editor', 'author': 'Jaap Karssenberg', } object_type = 'equation' short_label = _('E_quation') # T: menu item insert_label = _('Insert Equation') # T: menu item edit_label = _('_Edit Equation') # T: menu item syntax = 'latex' @classmethod def check_dependencies(klass): has_latex = Application(latexcmd).tryexec() has_dvipng = Application(dvipngcmd).tryexec() return (has_latex and has_dvipng), \ [('latex', has_latex, True), ('dvipng', has_dvipng, True)] class EquationGenerator(ImageGeneratorClass): object_type = 'equation' scriptname = 'equation.tex' imagename = 'equation.png' def __init__(self, plugin): ImageGeneratorClass.__init__(self, plugin) self.template = get_template('plugins', 'equationeditor.tex') self.texfile = TmpFile(self.scriptname) def generate_image(self, text): # Filter out empty lines, not allowed in latex equation blocks if isinstance(text, basestring): text = text.splitlines(True) text = (line for line in text if line and not line.isspace()) text = ''.join(text) #~ print '>>>%s<<<' % text # Write to tmp file using the template for the header / footer lines = [] self.template.process(lines, {'equation': text}) self.texfile.writelines(lines) #~ print '>>>%s<<<' % self.texfile.read() # Call latex logfile = File(self.texfile.path[:-4] + '.log') # len('.tex') == 4 #~ print ">>>", self.texfile, logfile try: latex = Application(latexcmd) latex.run((self.texfile.basename,), cwd=self.texfile.dir) except ApplicationError: # log should have details of failure return None, logfile # Call dvipng dvifile = File(self.texfile.path[:-4] + '.dvi') # len('.tex') == 4 pngfile = File(self.texfile.path[:-4] + '.png') # len('.tex') == 4 dvipng = Application(dvipngcmd) dvipng.run((pngfile, dvifile)) # output, input # No try .. except here - should never fail # TODO dvipng can start processing before latex finished - can we win speed there ? return pngfile, logfile def cleanup(self): path = self.texfile.path for path in glob.glob(path[:-4]+'.*'): File(path).remove() zim-0.65/zim/plugins/trayicon.py0000664000175000017500000002643712430471327016616 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2014 Jaap Karssenberg import gobject import gtk import logging from zim.plugins import PluginClass, WindowExtension from zim.config import data_file, ConfigManager from zim.command import Command from zim.ipc import start_server_if_not_running, ServerProxy, RemoteObject from zim.notebook import get_notebook_list, NotebookInfo, NotebookInfoList from zim.gui.widgets import gtk_window_set_default_icon # Try if we are on Ubunutu with app-indicator support try: import appindicator except ImportError: appindicator = None logger = logging.getLogger('zim.plugins.trayicon') class TrayIconPluginCommand(Command): '''Class to handle "zim --plugin trayicon" ''' def run(self): start_server_if_not_running() config = ConfigManager() preferences = config.get_config_dict('preferences.conf')['TrayIconPlugin'] preferences.setdefault('classic', False) if appindicator and not preferences['classic']: obj = RemoteObject('zim.plugins.trayicon.AppIndicatorTrayIcon') else: obj = RemoteObject('zim.plugins.trayicon.DaemonTrayIcon') server = ServerProxy() if not server.has_object(obj): server.init_object(obj) class TrayIconPlugin(PluginClass): plugin_info = { 'name': _('Tray Icon'), # T: plugin name 'description': _('''\ This plugin adds a tray icon for quick access. This plugin depends on Gtk+ version 2.10 or newer. This is a core plugin shipping with zim. '''), # T: plugin description 'author': 'Jaap Karssenberg', 'help': 'Plugins:Tray Icon', } plugin_preferences = ( # key, type, label, default ('classic', 'bool', _('Classic trayicon,\ndo not use new style status icon on Ubuntu'), False), # T: preferences option ('standalone', 'bool', _('Show a separate icon for each notebook'), False), # T: preferences option ) @classmethod def check_dependencies(klass): version_ok = (gtk.gtk_version >= (2, 10, 0) and gtk.pygtk_version >= (2, 10, 0)) return (version_ok, [ ('GTK >= 2.10', version_ok, True), ('Unity appindicator', bool(appindicator), False), ]) def __init__(self, config=None): PluginClass.__init__(self, config) self.preferences.connect('changed', self.on_preferences_changed) self.on_preferences_changed(self.preferences) def on_preferences_changed(self, preferences): klass = self.get_extension_class() self.set_extension_class('MainWindow', klass) def get_extension_class(self): import zim.ipc if zim.ipc.in_child_process() \ and not self.preferences['standalone']: if appindicator and not self.preferences['classic']: extension = AppIndicatorMainWindowExtension else: extension = DaemonMainWindowExtension else: extension = StandAloneMainWindowExtension logger.debug('Trayicon using class: %s', extension.__name__) return extension class TrayIconBase(object): '''Base class for the zim tray icon. Contains code to create the tray icon menus. ''' def get_trayicon_menu(self): '''Returns the main 'tray icon menu''' menu = gtk.Menu() item = gtk.MenuItem(_('_Quick Note...')) # T: menu item in tray icon menu item.connect_object('activate', self.__class__.do_quick_note, self) menu.append(item) menu.append(gtk.SeparatorMenuItem()) notebooks = self.list_all_notebooks() self.populate_menu_with_notebooks(menu, notebooks) item = gtk.MenuItem(' '+_('_Other...')) # Hack - using ' ' to indent visually # T: menu item in tray icon menu item.connect_object('activate', self.__class__.do_open_notebook, self) menu.append(item) menu.append(gtk.SeparatorMenuItem()) item = gtk.MenuItem(_('_Quit')) # T: menu item in tray icon menu item.connect_object('activate', self.__class__.do_quit, self) menu.append(item) return menu def list_open_notebooks(self): '''Returns a list of open notebook. This method is to be implemented in child classes. @returns: a list of L{NotebookInfo} objects ''' # should return (name, uri) pairs raise NotImplementedError def list_all_notebooks(self): '''Returns a list of all notebooks known in the current context This method mixes notebooks from L{list_open_notebooks()} with input from L{get_notebook_list()}. Open notebooks will have the C{active} attribute set. @returns: a list of L{NotebookInfo} objects ''' uris = set() notebooks = [info for info in get_notebook_list()] for info in self.list_open_notebooks(): if info in notebooks: # info from notebook list is updated already i = notebooks.index(info) notebooks[i].active = True else: info.update() info.active = True notebooks.append(info) for info in notebooks: if not info.active: info.active = False # None -> False return notebooks def populate_menu_with_notebooks(self, menu, notebooks): '''Populate a menu with a list of notebooks''' # TODO put checkbox behind open notebooks when we run in daemon mode item = gtk.MenuItem(_('Notebooks')) # T: menu item in tray icon menu item.set_sensitive(False) menu.append(item) if isinstance(notebooks, NotebookInfoList): notebooks = [info for info in notebooks] # copy notebooks.sort(key=lambda info: info.name) for info in notebooks: #~ print '>>>', info item = gtk.MenuItem(' ' + info.name) # Hack - using ' ' to indent visually if info.active: child = item.get_child() if isinstance(child, gtk.Label): # FIXME this doesn't seem to work in Ubuntu menu :( child.set_markup(' ' + info.name + '') # Hack - using ' ' to indent visually item.connect('activate', lambda o, u: self.do_activate_notebook(u), info.uri) menu.append(item) def do_activate_notebook(self, uri): '''Open a specific notebook. To be overloaded in child class. ''' raise NotImplementedError def do_quit(self): '''Quit zim. To be overloaded in child class. ''' raise NotImplementedError def do_open_notebook(self): '''Opens the notebook dialogs''' from zim.gui.notebookdialog import NotebookDialog NotebookDialog.unique(self, self, callback=self.do_activate_notebook).show() def do_quick_note(self): '''Show the dialog from the quicknote plugin''' from zim.plugins.quicknote import QuickNoteDialog dialog = QuickNoteDialog(None) dialog.show() class StatusIconTrayIcon(TrayIconBase, gtk.StatusIcon): '''Base class for a tray icon based on gtk.StatusIcon''' def __init__(self): gtk.StatusIcon.__init__(self) icon_theme = gtk.icon_theme_get_default() if icon_theme.has_icon('zim-panel'): self.set_from_icon_name('zim-panel') else: icon = data_file('zim.png').path self.set_from_file(icon) self.set_tooltip(_('Zim Desktop Wiki')) # T: tooltip for tray icon self.connect('popup-menu', self.__class__.do_popup_menu) def do_activate(self): open_notebooks = list(self.list_open_notebooks()) if len(open_notebooks) == 0: # No open notebooks, open default or prompt full list notebooks = get_notebook_list() if notebooks.default: self.do_activate_notebook(notebooks.default) else: self.do_popup_menu_notebooks(notebooks) elif len(open_notebooks) == 1: # Only one open notebook - present it self.do_activate_notebook(open_notebooks[0].uri) else: # Let the user choose from the open notebooks self.do_popup_menu_notebooks(open_notebooks) def do_popup_menu_notebooks(self, list, button=1, activate_time=0): menu = gtk.Menu() self.populate_menu_with_notebooks(menu, list) menu.show_all() menu.popup(None, None, gtk.status_icon_position_menu, button, activate_time, self) def do_popup_menu(self, button=3, activate_time=0): #~ print '>>', button, activate_time menu = self.get_trayicon_menu() menu.show_all() menu.popup(None, None, gtk.status_icon_position_menu, button, activate_time, self) # Need to register classes overriding gobject signals gobject.type_register(StatusIconTrayIcon) class StandAloneTrayIcon(StatusIconTrayIcon): '''This class defines the tray icon used for a single stand-alone notebook. ''' def __init__(self, window): StatusIconTrayIcon.__init__(self) self.window = window self.notebook = self.window.ui.notebook # XXX self.set_tooltip(self.notebook.name) if self.notebook.icon: self.set_from_file(self.notebook.icon) def list_open_notebooks(self): # No daemon, so we only know one open notebook info = NotebookInfo(self.notebook.uri, name=self.notebook.name) info.active = True return [ info ] def do_activate_notebook(self, uri): # Open a notebook using the ui object if uri == self.notebook.uri: self.window.ui.toggle_present() # XXX else: self.window.ui.open_notebook(uri) # XXX # Can not toggle, so just open it def do_quit(self): self.window.ui.quit() # XXX class DaemonTrayIconMixin(object): '''Mixin class for using the tray icon in combination with the background process. Sub classes should run as a separate child process. ''' def __init__(self): self.server = ServerProxy() def main(self): # Set window icon in case we open the notebook dialog gtk_window_set_default_icon() gtk.main() def quit(self): gtk.main_quit() def list_open_notebooks(self): for uri in self.server.list_notebooks(): info = NotebookInfo(uri) info.active = True yield info def do_activate_notebook(self, uri): self.server.get_notebook(uri).toggle_present() def do_quit(self): self.server.quit() class DaemonTrayIcon(DaemonTrayIconMixin, StatusIconTrayIcon): '''Trayicon using the daemon and based on gtk.StatusIcon''' def __init__(self): StatusIconTrayIcon.__init__(self) DaemonTrayIconMixin.__init__(self) class AppIndicatorTrayIcon(DaemonTrayIconMixin, TrayIconBase): '''Trayicon using the daemon and based on appindicator''' def __init__(self): DaemonTrayIconMixin.__init__(self) # Note that even though we specify the icon "zim", the # ubuntu appindicator framework will first check for an icon # "zim-panel". This way it finds the mono color icons. self.appindicator = appindicator.Indicator( 'zim-desktop-wiki', 'zim', appindicator.CATEGORY_APPLICATION_STATUS) self.appindicator.set_status(appindicator.STATUS_ACTIVE) def main(self): ServerProxy().connect('notebook-list-changed', self) self.on_notebook_list_changed() DaemonTrayIconMixin.main(self) def on_notebook_list_changed(self): menu = self.get_trayicon_menu() menu.show_all() self.appindicator.set_menu(menu) class StandAloneMainWindowExtension(WindowExtension): def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.window.ui.hideonclose = True # XXX self.icon = StandAloneTrayIcon(self.window) def teardown(self): self.window.ui.hideonclose = False # XXX self.icon.set_property('visible', False) self.icon = None class DaemonMainWindowExtension(WindowExtension): trayiconclass = DaemonTrayIcon def __init__(self, plugin, window): WindowExtension.__init__(self, plugin, window) self.window.ui.hideonclose = True # XXX self.proxyobject = None obj = RemoteObject('zim.plugins.trayicon.' + self.trayiconclass.__name__) server = ServerProxy() self.proxyobject = server.get_proxy(obj) # getting the object implicitly starts it, if it didn't exist yet def on_destroy(self, window): pass # Maybe other processes still running - wait for daemon def teardown(self): self.window.ui.hideonclose = False # XXX self.proxyobject.quit() class AppIndicatorMainWindowExtension(DaemonMainWindowExtension): trayiconclass = AppIndicatorTrayIcon zim-0.65/zim/plugins/tableeditor.py0000664000175000017500000012462012614743222017255 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Author: Tobias Haupenthal # Plugin created: 2015 # # # This plugin includes a whole featureset. Please be familiar with the documentation in 'Plugins:Table Editor', # before you do here any code change. # # - Suggestions for the future: # better column sort-algorithm "sort-by-number-or-string" # undo / redo - not trivial, because currently only position in textview is saved # ideas: save everytime the whole table OR save a tuple (position in textview, row, column) import gobject import gtk import logging import re import pango logger = logging.getLogger('zim.plugin.tableeditor') from zim.actions import action from zim.plugins import PluginClass, extends, WindowExtension from zim.utils import WeakSet from zim.objectmanager import ObjectManager, CustomObjectClass from zim.config import String from zim.main import get_zim_application from zim.gui.widgets import Dialog, ScrolledWindow, IconButton, InputEntry from zim.gui.objectmanager import CustomObjectWidget from zim.formats import ElementTreeModule as ElementTree from zim.formats import TABLE, HEADROW, HEADDATA, TABLEROW, TABLEDATA OBJECT_TYPE = 'table' SYNTAX_CELL_INPUT = [ ('&', '&'), ('>', '>'), ('<', '<'), ('"', '"'), (''', "'"), ('\n', '\\n') ] # Regex replacement strings: Wiki-Parsetree -> Pango (Table cell) -> Input (Table cell editing) # the target pattern is easier to read, the source pattern is generated out of it # With this syntax text can be format within a table-cell SYNTAX_WIKI_PANGO2 = [ (r'\1', r'\1', r'**\1**'), (r'\1', r'\1', r'__\1__'), (r'\1', r'\1', r"''\1''"), (r'\1', r'\1', r'~~\1~~'), # Link url without link text - Link url has always size = 0 (r'\1', r'\1\1', r'[[\1]]'), # Link url with link text - Link url has always size = 0 (r'\2', r'\2\1', r'[[\2|\1]]'), (r'\1', r'\1', r'//\1//') ] # Possible alignments in edit-table-dialog COLUMNS_ALIGNMENTS = {'left': ['left', gtk.STOCK_JUSTIFY_LEFT, _('Left')], # T: alignment option 'center': ['center', gtk.STOCK_JUSTIFY_CENTER, _('Center')], # T: alignment option 'right': ['right', gtk.STOCK_JUSTIFY_RIGHT, _('Right')], # T: alignment option 'normal': ['normal', None, _('Unspecified')],} # T: alignment option def reg_replace(string): ''' Target pattern is translated into source regex pattern :param string: target pattern :return:source pattern ''' string = string.replace('*', '\*').replace('[', '\[').replace(']', '\]') \ .replace(r'\1', '(.+?)', 1).replace(r'\2', '(.+?)', 1).replace('|', '\|') return re.compile(string) # Regex compiled search patterns SYNTAX_WIKI_PANGO = [tuple(map(reg_replace, expr_list)) for expr_list in SYNTAX_WIKI_PANGO2] class TableEditorPlugin(PluginClass): ''' This is the plugin for displaying tables within the wiki. A table consists always of a header with at least one header-cell and at least one or several rows. The number of cells in a row must be equal to the header. Currently there are two attributes, which have a tuple format, so they can describe all columns: - aligns: left, center, right - wraps: 0 / display text in a row 1 / long text will be broken and wrapped Most other files which are linked to this plugin are: - zim.gui.pageview - zim.formats.wiki ''' plugin_info = { 'name': _('Table Editor'), # T: plugin name 'description': _('''\ With this plugin you can embed a 'Table' into the wiki page. Tables will be shown as GTK TreeView widgets. Exporting them to various formats (i.e. HTML/LaTeX) completes the feature set. '''), # T: plugin description 'object_types': (OBJECT_TYPE, ), 'help': 'Plugins:Table Editor', 'author': 'Tobias Haupenthal', } global LINES_NONE, LINES_HORIZONTAL, LINES_VERTICAL, LINES_BOTH # Hack - to make sure translation is loaded LINES_BOTH = _('with lines') # T: option value LINES_NONE = _('no grid lines') # T: option value LINES_HORIZONTAL = _('horizontal lines') # T: option value LINES_VERTICAL = _('vertical lines') # T: option value plugin_preferences = ( # key, type, label, default ('show_helper_toolbar', 'bool', _('Show helper toolbar'), True), # T: preference description # option for displaying grid-lines within the table ('grid_lines', 'choice', _('Grid lines'), LINES_BOTH, (LINES_BOTH, LINES_NONE, LINES_HORIZONTAL, LINES_VERTICAL)), # T: preference description ) def __init__(self, config=None): ''' Constructor ''' PluginClass.__init__(self, config) ObjectManager.register_object(OBJECT_TYPE, self.create_table) self.connectto(self.preferences, 'changed', self.on_preferences_changed) def create_table(self, attrib, text): ''' Automatic way for displaying the table-object as a table within the wiki, :param attrib: {type: 'table', wraps:'1,0,1' , aligns:'left,right,center' } :param text: XML - formated as a zim-tree table-object OR tuple of [header], [row1], [row2] :return: a TableViewObject ''' assert ElementTree.iselement(text) (header, rows) = self._tabledom_to_list(text) return TableViewObject(attrib, header, rows, self.preferences) def _tabledom_to_list(self, tabledata): ''' Extracts necessary data out of a xml-table into a list structure :param tabledata: XML - formated as a zim-tree table-object :return: tuple of header-list and list of row lists - ([h1,h2],[[r11,r12],[r21,r22]) ''' header = map(lambda head: head.text.decode('utf-8'), tabledata.findall('thead/th')) header = map(CellFormatReplacer.zim_to_cell, header) rows = [] for trow in tabledata.findall('trow'): row = trow.findall('td') row = [ElementTree.tostring(r, 'utf-8').replace('', '').replace('', '') for r in row] row = map(CellFormatReplacer.zim_to_cell, row) rows.append(row) return header, rows def on_preferences_changed(self, preferences): '''Update preferences on open table objects''' for obj in ObjectManager.get_active_objects(OBJECT_TYPE): obj.preferences_changed() class CellFormatReplacer: ''' Static class for converting formated text from one into the other format: - cell: in a wiki pageview the table-cell must be of this format - input: if a user is editing the cell, this format is used - zimtree: Format for zimtree xml structure ''' @staticmethod def cell_to_input(text, with_pango=False): ''' Displayed table-cell will converted to gtk-entry input text ''' if with_pango: for pattern, replace in zip(SYNTAX_WIKI_PANGO, SYNTAX_WIKI_PANGO2): text = pattern[1].sub(replace[2], text) for k, v in SYNTAX_CELL_INPUT: text = text.replace(k, v) return text @staticmethod def input_to_cell(text, with_pango=False): for k, v in SYNTAX_CELL_INPUT: text = text.replace(v, k) if with_pango: # Links without text are handled as [[link]] and not as [[link|text]], therefore reverse order of replacements for pattern, replace in zip(reversed(SYNTAX_WIKI_PANGO), reversed(SYNTAX_WIKI_PANGO2)): text = pattern[2].sub(replace[1], text) return text @staticmethod def zim_to_cell(text): for pattern, replace in zip(SYNTAX_WIKI_PANGO, SYNTAX_WIKI_PANGO2): text = pattern[0].sub(replace[1], text) return text @staticmethod def cell_to_zim(text): for pattern, replace in zip(SYNTAX_WIKI_PANGO, SYNTAX_WIKI_PANGO2): text = pattern[1].sub(replace[0], text) return text @extends('MainWindow') class MainWindowExtension(WindowExtension): ''' Connector between the zim application with its toolbar and menu and the tableview-object In GTK there is no native table symbol. So this image is needed: data/pixmaps/insert-table.png ''' uimanager_xml = ''' ''' def __init__(self, plugin, window): ''' Constructor ''' WindowExtension.__init__(self, plugin, window) # reload tables on current page after plugin activation if self.window.ui.page: self.window.ui.reload_page() def teardown(self): ''' Deconstructor ''' ObjectManager.unregister_object(OBJECT_TYPE) self.window.ui.reload_page() @action(_('Table'), stock='zim-insert-table', readonly=False) # T: menu item def insert_table(self): '''Run the EditTableDialog''' col_model = EditTableDialog(self.window).run() if not col_model: return _ids, headers, aligns, wraps = ([], [], [], []) for model in col_model: headers.append(model[1]) aligns.append(model[3]) wraps.append(model[2]) attrib = {'aligns': aligns, 'wraps': wraps} rows = [len(headers) * [' ']] obj = TableViewObject(attrib, headers, rows, self.plugin.preferences) pageview = self.window.pageview # XXX pageview.insert_object(obj) class TableViewObject(CustomObjectClass): '''data presenter of an inserted table within a page''' OBJECT_ATTR = { 'type': String('table'), 'aligns': String(''), # i.e. String(left,right,center) 'wraps': String('') # i.e. String(0,1,0) } def __init__(self, attrib, header, rows, preferences): ''' Creates a new object which can displayed within the page :param attrib: aligns, wraps :param header: titles of the table as list :param rows: body-rows of the table as list of lists :param preferences: optionally some preferences ''' _attrib = {} for k, v in attrib.iteritems(): if isinstance(v, list): v = ','.join(map(str, v)) _attrib[k] = v CustomObjectClass.__init__(self, _attrib, [header]+rows) self.attrib = {'type': OBJECT_TYPE} # just to be sure self._tableattrib = attrib self._header = header self._rows = rows self._widgets = WeakSet() self._liststore = None # shared model between widgets self.preferences = preferences # getters and setters for attributes def get_aligns(self): ''' get the list of align-attributes ''' return self._attrib['aligns'].split(',') def set_aligns(self, data): ''' Set list of align attributes for the current table. Each item belongs to a column.''' assert(isinstance(data, list)) self._attrib['aligns'] = ','.join(data) def get_wraps(self): ''' get the list of wrap-attributes ''' return map(int, self._attrib['wraps'].split(',')) def set_wraps(self, data): ''' Set list of wrap attributes for the current table. Each item belongs to a column.''' assert(isinstance(data, list)) self._attrib['wraps'] = ','.join(str(item) for item in data) def _get_liststore(self, reset=False): if reset or not self._liststore: cols = [str]*len(self._header) self._liststore = gtk.ListStore(*cols) for trow in self._rows: self._liststore.append(trow) self._liststore.connect('row-changed', self.on_modified_changed) return self._liststore def get_widget(self): ''' Creates a new table-widget which can displayed on the wiki-page ''' liststore = self._get_liststore() attrib = {'aligns': self.get_aligns(), 'wraps': self.get_wraps()} widget = TableViewWidget(self, liststore, self._header, attrib) self._widgets.add(widget) widget.set_preferences(self.preferences) return widget def preferences_changed(self): ''' Updates all created table-widgets, if preferences have changed ''' for widget in self._widgets: widget.set_preferences(self.preferences) def on_sort_column_changed(self, liststore): ''' Trigger after a column-header is clicked and therefore its sort order has changed ''' self.set_modified(True) def on_modified_changed(self, liststore, path, treeiter): ''' Trigger after a table cell content is changed by the user ''' self.set_modified(True) def get_data(self): '''Returns table-object into textual data, for saving it as text.''' headers = self._header attrs = {'aligns': self._attrib['aligns'], 'wraps': self._attrib['wraps']} if not self._liststore: rows = self._rows else: rows = [] for treerow in self._liststore: rows.append(map( lambda cell: CellFormatReplacer.cell_to_input(cell, True), treerow )) return headers, rows, attrs def change_model(self, new_model): ''' Replace liststore with new model and notify widgets to update their treeview. :param new_model: tuple of lists for ([id], [header], [warps], [aligns]) ''' # prepare results out of dialog-window id_mapping, headers, aligns, wraps = ({}, [], [], []) for i, model in enumerate(new_model): if model[0] != -1: id_mapping[i] = model[0] header = model[1] if model[1] else ' ' headers.append(header) aligns.append(model[3]) wraps.append(model[2]) # update data if self._liststore: liststore = self._get_liststore() self._rows = self._update_rows(liststore, id_mapping, len(headers)) liststore = self._get_liststore(reset=True) else: liststore = None self._rows = self._update_rows(self._rows, id_mapping, len(headers)) self.set_aligns(aligns) self.set_wraps(wraps) self.set_modified(True) # notify widgets for widget in self._widgets: assert liststore is not None, 'Huh?' attrib = {'aligns': self.get_aligns(), 'wraps': self.get_wraps()} widget.on_model_changed(liststore, headers, attrib) self.preferences_changed() # reset prefs on widgets def _update_rows(self, old_rows, id_mapping, nr_cols): ''' Old value of cells are used in the new table, but only if its column is not deleted ''' new_rows = [] for oldrow in old_rows: newrow = [' ']*nr_cols for v, k in id_mapping.iteritems(): newrow[v] = oldrow[k] new_rows.append(newrow) return new_rows def build_parsetree_of_table(self, builder, iter): logger.debug("Anchor with TableObject: %s", self) # inserts a newline before and after table-object bound = iter.copy() bound.backward_char() char_before_table = bound.get_slice(iter) need_newline_infront = char_before_table.decode('utf-8') != "\n".decode('utf-8') bound = iter.copy() bound.forward_char() iter2 = bound.copy() bound.forward_char() char_after_table = iter2.get_slice(bound) need_newline_behind = char_after_table.decode('utf-8') != "\n".decode('utf-8') # headers, rows, attrib = self.get_data() #~ print "Table data:", headers, rows, attrib if need_newline_infront: builder.data('\n') builder.start(TABLE, attrib) builder.start(HEADROW) for header in headers: builder.append(HEADDATA, header) builder.end(HEADROW) for row in rows: builder.start(TABLEROW) for cell in row: builder.append(TABLEDATA, cell) builder.end(TABLEROW) builder.end(TABLE) if need_newline_behind: builder.data('\n') GTK_GRIDLINES = { LINES_BOTH: gtk.TREE_VIEW_GRID_LINES_BOTH, LINES_NONE: gtk.TREE_VIEW_GRID_LINES_NONE, LINES_HORIZONTAL: gtk.TREE_VIEW_GRID_LINES_HORIZONTAL, LINES_VERTICAL: gtk.TREE_VIEW_GRID_LINES_VERTICAL, } class TableViewWidget(CustomObjectWidget): __gsignals__ = { 'size-request': 'override', } def __init__(self, obj, liststore, headers, attrs): ''' This is a group of GTK Gui elements which are directly displayed within the wiki textarea On initilizing also some signals are registered and a toolbar is initialized :param obj: a Table-View-Object :param liststore: a gtk.ListStore object :param headers: list of titles :param attrs: table settings, like alignment and wrapping :return: ''' CustomObjectWidget.__init__(self) self.textarea_width = 0 # used in pageview self._has_cursor = False # Skip table object, if someone moves cursor around in textview # used here self.obj = obj self._timer = None # NONE or number of current gobject.timer, which is running self._keep_toolbar_open = False # a cell is currently edited, toolbar should not be hidden self._cellinput_canceled = None # cell changes should be skipped self._toolbar_enabled = True # sets if toolbar should be shown beneath a selected table # Toolbar for table actions self.toolbar = self.create_toolbar() self.toolbar.show_all() self.toolbar.set_no_show_all(True) self.toolbar.hide() # Create treeview self._init_treeview(liststore, headers, attrs) # package gui elements self.vbox.pack_end(self.toolbar) self.scroll_win = ScrolledWindow(self.treeview, gtk.POLICY_NEVER, gtk.POLICY_NEVER, gtk.SHADOW_NONE) self.vbox.pack_start(self.scroll_win) def _init_treeview(self, liststore, headers, attrs): # Actual gtk table object self.treeview = self.create_treeview(liststore, headers, attrs) # Hook up signals & set options self.treeview.connect('button-press-event', self.on_button_press_event) self.treeview.connect('focus-in-event', self.on_focus_in, self.toolbar) self.treeview.connect('focus-out-event', self.on_focus_out, self.toolbar) self.treeview.connect('move-cursor', self.on_move_cursor) # Set options self.treeview.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH) self.treeview.set_receives_default(True) self.treeview.set_size_request(-1, -1) self.treeview.set_border_width(2) # disable interactive column search self.treeview.set_enable_search(False) gtk.binding_entry_remove(gtk.TreeView, gtk.keysyms.f, gtk.gdk.CONTROL_MASK) self.treeview.set_search_column(-1) def on_model_changed(self, liststore, headers, attrs): '''Called by TableViewObject when columns changed, replaces the treeview idget with a new one for the new model ''' self.scroll_win.remove(self.treeview) self._init_treeview(liststore, headers, attrs) self.scroll_win.add(self.treeview) self.scroll_win.show_all() def do_size_request(self, requisition): wraps = self.obj.get_wraps() if not any(wraps): return CustomObjectWidget.do_size_request(self, requisition) # Negotiate how to wrap .. for col in self.treeview.get_columns(): cr = col.get_cell_renderers()[0] cr.set_property('wrap-width', -1) # reset size #~ col.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) # allow column shrinks #~ col.set_max_width(0) # shrink column #~ col.set_max_width(-1) # reset value #~ col.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY) # reset value CustomObjectWidget.do_size_request(self, requisition) #~ print "Widget requests: %i textview: %i" % (requisition.width, self._textview_width) if requisition.width > self._textview_width: # Figure out width of fixed cols fixed = 0 for col, wrap in zip(self.treeview.get_columns(), wraps): if not wrap: fixed += col.get_width() nwrap = sum(wraps) wrap_size = (self._textview_width - fixed) // nwrap # Set width for wrappable cols #~ print "Fixed, nwrap, wrap_size", (fixed, nwrap, wrap_size) for col, wrap in zip(self.treeview.get_columns(), wraps): if wrap: cr = col.get_cell_renderers()[0] cr.set_property('wrap-width', wrap_size) # reset size # Update request CustomObjectWidget.do_size_request(self, requisition) else: pass def on_focus_in(self, treeview, event, toolbar): '''After a table is selected, this function will be triggered''' self._keep_toolbar_open = False if self._timer: gobject.source_remove(self._timer) if self._toolbar_enabled: toolbar.show() def on_focus_out(self, treeview, event, toolbar): '''After a table is deselected, this function will be triggered''' def receive_alarm(): if self._keep_toolbar_open: self._timer = None if self._timer: self._timer = None treeview.get_selection().unselect_all() if self._toolbar_enabled: toolbar.hide() return False self._timer = gobject.timeout_add(500, receive_alarm) def create_toolbar(self): '''This function creates a toolbar which is displayed next to the table''' toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL) toolbar.set_style(gtk.TOOLBAR_ICONS) toolbar.set_border_width(1) tooltips = gtk.Tooltips() for pos, stock, handler, data, tooltip in ( (0, gtk.STOCK_ADD, self.on_add_row, None, _('Add row')), # T: tooltip on mouse hover (1, gtk.STOCK_DELETE, self.on_delete_row, None, _('Remove row')), # T: tooltip on mouse hover (2, gtk.STOCK_COPY, self.on_clone_row, None, _('Clone row')), # T: tooltip on mouse hover (3, None, None, None, None), (4, gtk.STOCK_GO_UP, self.on_move_row, -1, _('Row up')), # T: tooltip on mouse hover (5, gtk.STOCK_GO_DOWN, self.on_move_row, 1, _('Row down')), # T: tooltip on mouse hover (6, None, None, None, None), (7, gtk.STOCK_PREFERENCES, self.on_change_columns, None, _('Change columns')), # T: tooltip on mouse hover (8, None, None, None, None), (9, gtk.STOCK_HELP, self.on_open_help, None, _('Open help')), # T: tooltip on mouse hover ): if stock is None: toolbar.insert(gtk.SeparatorToolItem(), pos) else: button = gtk.ToolButton(stock) if data: button.connect('clicked', handler, data) else: button.connect('clicked', handler) tooltips.set_tip(button, tooltip) toolbar.insert(button, pos) toolbar.set_size_request(300,-1) toolbar.set_icon_size(gtk.ICON_SIZE_MENU) return toolbar def _column_alignment(self, aligntext): ''' The column alignment must be converted from numeric to keywords ''' if aligntext == 'left': align = 0.0 elif aligntext == 'center': align = 0.5 elif aligntext == 'right': align = 1.0 else: align = None return align def create_treeview(self, liststore, headers, attrs): ''' Initializes a treeview with its model (liststore) and all its columns :param headers: a list of title values for the column-headers :param rows: a list of list of cells, for the table body :param attrs: some more attributes, which define the layout of a column :return: gtk.treeview ''' treeview = gtk.TreeView(liststore) for i, headcol in enumerate(headers): cell = gtk.CellRendererText() tview_column = gtk.TreeViewColumn(headcol, cell) tview_column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) # allow column shrinks treeview.append_column(tview_column) # set title as label header_label = self.create_headerlabel(headcol) tview_column.set_widget(header_label) # set properties of column tview_column.set_attributes(cell, markup=i) cell.set_property('editable', True) cell.set_property('yalign', 0.0) # no vertical alignment, text starts on the top tview_column.set_sort_column_id(i) # set sort function liststore.set_sort_func(i, self.sort_by_number_or_string, i) # set alignment - left center right align = self._column_alignment(attrs['aligns'][i]) if align: tview_column.set_alignment(align) cell.set_alignment(align, 0.0) # set wrap mode, wrap-size is set elsewhere if attrs['wraps'][i]: cell.set_property('wrap-mode', pango.WRAP_WORD) # callbacks after an action cell.connect('edited', self.on_cell_changed, treeview.get_model(), i) cell.connect('editing-started', self.on_cell_editing_started, treeview.get_model(), i) cell.connect('editing-canceled', self.on_cell_editing_canceled) return treeview def create_headerlabel(self, title): return TableViewWidget.create_headerlabel(title) @staticmethod def create_headerlabel(title): ''' Sets options for the treeview header''' col_widget = gtk.VBox() col_widget.show() col_label = gtk.Label(''+title+'') col_label.set_use_markup(True) col_label.show() col_widget.pack_start(col_label) #col_align.add(col_label) '''col_entry = InputEntry() col_entry.set_name('treeview-header-entry') col_entry.show() col_widget.pack_start(col_entry)''' return col_widget def get_treeview(self): # treeview of current table return self.treeview def set_preferences(self, preferences): self._toolbar_enabled = preferences.get('show_helper_toolbar', True) self.treeview.set_grid_lines(GTK_GRIDLINES[preferences.get('grid_lines', LINES_BOTH)]) def on_move_cursor(self, view, step_size, count): ''' If you try to move the cursor out of the tableditor release the cursor to the parent textview ''' return None # let parent handle this signal def fetch_cell_by_event(self, event, treeview): ''' Looks for the cell where the mouse clicked on it ''' liststore = treeview.get_model() (xpos, ypos) = event.get_coords() (treepath, treecol, xrel, yrel) = treeview.get_path_at_pos(int(xpos), int(ypos)) treeiter = liststore.get_iter(treepath) cellvalue = liststore.get_value(treeiter, treeview.get_columns().index(treecol)) return cellvalue def get_linkurl(self, celltext): ''' Checks a cellvalue if it contains a link and returns only the link value ''' linkregex = r'.*?(.*?)' matches = re.match(linkregex, celltext) linkvalue = matches.group(1) if matches else None return linkvalue def on_button_press_event(self, treeview, event): ''' Displays a context-menu on right button click Opens the link of a tablecell on CTRL pressed and left button click ''' if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1 and event.get_state() & gtk.gdk.CONTROL_MASK: # With CTRL + LEFT-Mouse-Click link of cell is opened cellvalue = self.fetch_cell_by_event(event, treeview) linkvalue = self.get_linkurl(cellvalue) if linkvalue: self.obj.emit('link-clicked', {'href': linkvalue}) return if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: # Right button opens context menu self._keep_toolbar_open = True cellvalue = self.fetch_cell_by_event(event, treeview) linkvalue = self.get_linkurl(cellvalue) linkitem_is_activated = (linkvalue is not None) menu = gtk.Menu() for stock, handler, data, tooltip in ( (gtk.STOCK_ADD, self.on_add_row, None, _('Add row')), # T: menu item (gtk.STOCK_DELETE, self.on_delete_row, None, _('Delete row')), # T: menu item (gtk.STOCK_COPY, self.on_clone_row, None, _('Clone row')), # T: menu item (None, None, None, None), # T: menu item (gtk.STOCK_JUMP_TO, self.on_open_link, linkvalue, _('Open cell content link')), # T: menu item (None, None, None, None), (gtk.STOCK_GO_UP, self.on_move_row, -1, _('Row up')), # T: menu item (gtk.STOCK_GO_DOWN, self.on_move_row, 1, _('Row down')), # T: menu item (None, None, None, None), (gtk.STOCK_PREFERENCES, self.on_change_columns, None, _('Change columns')) # T: menu item ): if stock is None: menu.append(gtk.SeparatorMenuItem()) else: item = gtk.ImageMenuItem(stock) item.set_always_show_image(True) item.set_label(_(tooltip)) if data: item.connect_after('activate', handler, data) else: item.connect_after('activate', handler) if handler == self.on_open_link: item.set_sensitive(linkitem_is_activated) menu.append(item) menu.show_all() menu.popup(None, None, None, event.button, event.time) def on_add_row(self, action): ''' Context menu: Add a row ''' selection = self.treeview.get_selection() model, treeiter = selection.get_selected() if not treeiter: # no selected item self.selection_info() return row = len(self.treeview.get_columns())*[''] path = model.insert_after(treeiter, row) self.obj.set_modified(True) def on_clone_row(self, action): ''' Context menu: Clone a row ''' selection = self.treeview.get_selection() model, treeiter = selection.get_selected() if not treeiter: # no selected item self.selection_info() return path = model.get_path(treeiter) row = model[path[0]] model.insert_after(treeiter, row) self.obj.set_modified(True) def on_delete_row(self, action): ''' Context menu: Delete a row ''' selection = self.treeview.get_selection() model, treeiter = selection.get_selected() if not treeiter: # no selected item self.selection_info() return if len(model) > 1: model.remove(treeiter) self.obj.set_modified(True) else: md = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, _("The table must consist of at least on row!\n No deletion done.")) # T: Popup dialog md.run() md.destroy() def on_move_row(self, action, direction): ''' Trigger for moving a row one position up/down ''' selection = self.treeview.get_selection() model, treeiter = selection.get_selected() if not treeiter: # no selected item self.selection_info() return path = model.get_path(treeiter) newpos = path[0] + direction if 0 > newpos or newpos >= len(model): # first item cannot be pushed forward, last not backwards return newiter = model.get_iter((newpos,)) model.swap(treeiter, newiter) self.obj.set_modified(True) def on_open_link(self, action, link): ''' Context menu: Open a link, which is written in a cell ''' self.obj.emit('link-clicked', {'href': link}) def on_open_help(self, action): ''' Context menu: Open help ''' get_zim_application('--manual', 'Plugins:Table Editor').spawn() pass def on_change_columns(self, action): ''' Context menu: Edit table, run the EditTableDialog ''' aligns = self.obj.get_aligns() wraps = self.obj.get_wraps() titles = [col.get_title() for col in self.treeview.get_columns()] old_model = [] for i in range(len(titles)): old_model.append([i, titles[i], aligns[i], wraps[i]]) new_model = EditTableDialog(self.get_toplevel(), old_model).run() if new_model: self.obj.change_model(new_model) # Will call back to change our treeview def on_cell_changed(self, cellrenderer, path, text, liststore, colid): ''' Trigger after cell-editing, to transform displayed table cell into right format ''' self._keep_toolbar_open = False markup = CellFormatReplacer.input_to_cell(text, True) liststore[path][colid] = markup self._cellinput_canceled = False def on_cell_editing_started(self, cellrenderer, editable, path, liststore, colid): ''' Trigger before cell-editing, to transform text-field data into right format ''' self._keep_toolbar_open = True editable.connect('focus-out-event', self.on_cell_focus_out, cellrenderer, path, liststore, colid) markup = liststore[path][colid] markup = CellFormatReplacer.cell_to_input(markup, True) editable.set_text(markup) self._cellinput_canceled = False def on_cell_focus_out(self, editable, event, cellrenderer, path, liststore, colid): if not self._cellinput_canceled: self.on_cell_changed(cellrenderer, path, editable.get_text(), liststore, colid) def on_cell_editing_canceled(self, renderer): ''' Trigger after a cell is edited but any change is skipped ''' self._cellinput_canceled = True def sort_by_number_or_string(self, liststore, treeiter1, treeiter2, colid): ''' Sort algorithm for sorting numbers correctly and putting 10 after 3. This part can be improved in future to support also currencies, dates, floats, etc. :param liststore: model of treeview :param treeiter1: treeiter 1 :param treeiter2: treeiter 2 :param colid: a column number :return: -1 / first data is smaller than second, 0 / equality, 1 / else ''' data1 = liststore.get_value(treeiter1, colid) data2 = liststore.get_value(treeiter2, colid) if data1.isdigit() and data2.isdigit(): data1 = int(data1) data2 = int(data2) self.obj.set_modified(True) return cmp(data1, data2) def selection_info(self): ''' Info-Popup for selecting a cell before this action can be done ''' md = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, _("Please select a row, before you push the button.")) # T: md.run() md.destroy() #~ def _search_in_widget(self, start, step): #~ ''' #~ Search within a widget #~ :param start: position-of-widget #~ :param step: search direction (up / down): -1 / 1 #~ :return: tuple (startiter, enditer, match) #~ ''' #~ if start.get_child_anchor() is None or len(start.get_child_anchor().get_widgets()) < 1: #~ return #~ widgets = start.get_child_anchor().get_widgets() #~ # TODO TODO TODO - generalize interface so all widgets can integrate find #~ if isinstance(widgets[0], zim.plugins.tableeditor.TableViewWidget): #~ table = widgets[0] #~ # get treeview first #~ treeview = table.get_treeview() #~ liststore = treeview.get_model() #~ iter = liststore.get_iter_root() #~ while iter is not None: #~ for col in range(liststore.get_n_columns()): #~ text = liststore.get_value(iter, col) #~ matches = self.regex.finditer(text) #~ if step == -1: #~ matches = list(matches) #~ matches.reverse() #~ for match in matches: #~ startiter = iter #~ enditer = iter #~ return startiter, enditer, match #~ iter = liststore.iter_next(iter) #~ def _replace_in_widget(self, start, regex, string, replaceall=False): #~ ''' #~ Replace within a widget #~ :param start: position-of-widget #~ :param regex: regular expression pattern #~ :param text: substituation text #~ :param replaceall: boolean if all matches should be replaced #~ :return: True / False - a replacement was done / no replaces #~ ''' #~ if start.get_child_anchor() is None or len(start.get_child_anchor().get_widgets()) < 1: #~ return #~ widgets = start.get_child_anchor().get_widgets() #~ if isinstance(widgets[0], zim.plugins.tableeditor.TableViewWidget): #~ table = widgets[0] #~ liststore = table.get_liststore() #~ iter = liststore.get_iter_root() #~ has_replaced = False #~ while iter is not None: #~ for col in range(liststore.get_n_columns()): #~ text = liststore.get_value(iter, col) #~ if(regex.search(text)): #~ newtext = regex.sub(string, text) #~ liststore.set_value(iter, col, newtext) #~ if(not replaceall): #~ return True #~ else: #~ has_replaced = True #~ iter = liststore.iter_next(iter) #~ return has_replaced class EditTableDialog(Dialog): ''' Graphical dialog for the user, where a new table can be created or an existing one can be modified Here columns can be added / modified and titles be managed. ''' class Col(): ''' Format of the treeview in which columns of the table can be managed: - id: -1 or position of original column - wrapped: 0/1 should text be wrapped over multiple lines - align, alignicon, aligntext: english-keyword, GTK-ICON, translated-keyword for alignments ''' id, title, wrapped, align, alignicon, aligntext = range(6) def __init__(self, ui, tablemodel=None): ''' Constructor, which intializes the dialog window :param ui: :param tablemodel: list of row-data :return: ''' title = _('Insert Table') if tablemodel is None else _('Edit Table') # T: Dialog title Dialog.__init__(self, ui, title) # Prepare treeview in which all columns of the table are listed self.creation_mode = tablemodel is None self.default_column_item = [-1, "", 0, "left", gtk.STOCK_JUSTIFY_LEFT, _("Left")] # currently edited cell - tuple (editable, path, colid) save it on exit self.currently_edited = None # Set layout of Window self.add_help_text(_('Managing table columns')) # T: Description of "Table-Insert" Dialog self.set_default_size(380, 400) liststore = self._prepare_liststore(tablemodel) self.treeview = self._prepare_treeview_with_headcolumn_list(liststore) hbox = gtk.HBox(spacing=5) hbox.set_size_request(300, 300) self.vbox.pack_start(hbox, False) header_scrolled_area = ScrolledWindow(self.treeview) header_scrolled_area.set_size_request(200, -1) hbox.add(header_scrolled_area) hbox.add(self._button_box()) self.show_all() if self.creation_mode: # preselect first entry path = self.treeview.get_model().get_path(self.treeview.get_model().get_iter_first()) self.treeview.set_cursor_on_cell(path, self.treeview.get_column(0), start_editing=True) def _prepare_liststore(self, tablemodel): ''' Preparation of liststore to show a treeview, that displays the columns of the table :param tablemodel: list of row-data :return:liststore ''' first_column_item = list(self.default_column_item) first_column_item[1] = _("Column 1") # T: Initial data for column title in table liststore = gtk.ListStore(int, str, int, str, str, str) # each table column is displayed in a new row if tablemodel is None: liststore.append(first_column_item) else: for col in tablemodel: align = col.pop(2) col += COLUMNS_ALIGNMENTS[align] if align in COLUMNS_ALIGNMENTS else COLUMNS_ALIGNMENTS['normal'] liststore.append(col) return liststore def _prepare_treeview_with_headcolumn_list(self, liststore): ''' Preparation of the treeview element, that displays the columns of the table :param liststore: model for current treeview :return: the treeview ''' treeview = gtk.TreeView(liststore) # 1. Column - Title cell = gtk.CellRendererText() cell.set_property('editable', True) column = gtk.TreeViewColumn(_('Title'), cell, text=self.Col.title) column.set_min_width(120) treeview.append_column(column) cell.connect('edited', self.on_cell_changed, liststore, self.Col.title) cell.connect('editing-started', self.on_cell_editing_started, liststore, self.Col.title) # 2. Column - Wrap Line cell = gtk.CellRendererToggle() cell.connect('toggled', self.on_wrap_toggled, liststore, self.Col.wrapped) column = gtk.TreeViewColumn(_('Auto\nWrap'), cell) # T: table header treeview.append_column(column) column.add_attribute(cell, 'active', self.Col.wrapped) # 3. Column - Alignment store = gtk.ListStore(str, str, str) store.append(COLUMNS_ALIGNMENTS['left']) store.append(COLUMNS_ALIGNMENTS['center']) store.append(COLUMNS_ALIGNMENTS['right']) column = gtk.TreeViewColumn(_('Align')) # T: table header cellicon = gtk.CellRendererPixbuf() column.pack_start(cellicon) column.add_attribute(cellicon, 'stock-id', self.Col.alignicon) cell = gtk.CellRendererCombo() cell.set_property('model', store) cell.set_property('has-entry', False) cell.set_property('text-column', 2) cell.set_property('width', 50) cell.set_property('editable', True) column.pack_start(cell) column.add_attribute(cell, 'text', self.Col.aligntext) cell.connect('changed', self.on_alignment_changed, liststore) treeview.append_column(column) return treeview def _button_box(self): ''' Panel which includes buttons for manipulating the current treeview: - add / delete - move up / move down row :return: vbox-panel ''' vbox = gtk.VBox(spacing=5) tooltips = gtk.Tooltips() for stock, handler, data, tooltip in ( (gtk.STOCK_ADD, self.on_add_new_column, None, _('Add column')), # T: hoover tooltip (gtk.STOCK_DELETE, self.on_delete_column, None, _('Remove column')), # T: hoover tooltip (gtk.STOCK_GO_UP, self.on_move_column, -1, _('Move column ahead')), # T: hoover tooltip (gtk.STOCK_GO_DOWN, self.on_move_column, 1, _('Move column backward')), # T: hoover tooltip ): button = IconButton(stock) if data: button.connect('clicked', handler, data) else: button.connect('clicked', handler) tooltips.set_tip(button, tooltip) vbox.pack_start(button, False) vbox.show_all() return vbox def do_response_ok(self): ''' Dialog Window is closed with "OK" ''' self.autosave_title_cell() self.result = [[m[0], m[1], m[2],m[3]] for m in self.treeview.get_model()] return True def do_response_cancel(self): ''' Dialog Window is closed with "Cancel" ''' self.result = None return True def on_cell_editing_started(self, renderer, editable, path, model, colid): ''' Trigger before cell-editing, to transform text-field data into right format ''' text = model[path][colid] text = CellFormatReplacer.cell_to_input(text) editable.set_text(text) self.currently_edited = (editable, model, path, colid) def on_cell_changed(self, renderer, path, text, model, colid): ''' Trigger after cell-editing, to transform text-field data into right format ''' model[path][colid] = CellFormatReplacer.input_to_cell(text) self.currently_edited = None def on_wrap_toggled(self, renderer, path, model, colid): ''' Trigger for wrap-option (enable/disable)''' treeiter = model.get_iter(path) val = model.get_value(treeiter, colid) model.set_value(treeiter, colid, not val) def on_alignment_changed(self, renderer, path, comboiter, model): ''' Trigger for align-option (selectionbox with icon and alignment as text)''' combomodel = renderer.get_property('model') align = combomodel.get_value(comboiter, 0) alignimg = combomodel.get_value(comboiter, 1) aligntext = combomodel.get_value(comboiter, 2) treeiter = model.get_iter(path) model.set_value(treeiter, self.Col.align, align) model.set_value(treeiter, self.Col.alignicon, alignimg) model.set_value(treeiter, self.Col.aligntext, aligntext) def autosave_title_cell(self): ''' Saving cell, in case of editing it and then do not close it, but do another action, like closing window ''' if self.currently_edited: editable, model, path, colid = self.currently_edited text = editable.get_text() model[path][colid] = CellFormatReplacer.input_to_cell(text) self.currently_edited = None def on_add_new_column(self, btn): ''' Trigger for adding a new column into the table / it is a new row in the treeview ''' self.autosave_title_cell() (model, treeiter) = self.treeview.get_selection().get_selected() if not treeiter: # preselect first entry path = model.iter_n_children(None)-1 treeiter = model.get_iter(path) newiter = model.insert_after(treeiter, self.default_column_item) self.treeview.set_cursor_on_cell(model.get_path(newiter), self.treeview.get_column(0), start_editing=True) def on_delete_column(self, btn): ''' Trigger for deleting a column out of the table / it is a deleted row in the treeview ''' self.autosave_title_cell() (model, treeiter) = self.treeview.get_selection().get_selected() if treeiter: if len(model) > 1: model.remove(treeiter) else: md = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, _("A table needs to have at least one column.")) # T: popup dialog md.run() md.destroy() else: self.selection_info() def on_move_column(self, btn, direction): ''' Trigger for moving a column one position left/right) - it is a movement up/down in the treeview ''' self.autosave_title_cell() (model, treeiter) = self.treeview.get_selection().get_selected() if not treeiter: # no selected item self.selection_info() return path = model.get_path(treeiter) newpos = path[0] + direction if 0 > newpos or newpos >= len(model): # first item cannot be pushed forward, last not backwards return newiter = model.get_iter((newpos,)) model.swap(treeiter, newiter) def selection_info(self): ''' Info-Popup for selecting a cell before this action can be done ''' md = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, _("Please select a row, before you push the button.")) # T: Popup dialog md.run() md.destroy() zim-0.65/zim/export/0000775000175000017500000000000012615422672014244 5ustar jaapjaap00000000000000zim-0.65/zim/export/__main__.py0000664000175000017500000000247312374655231016345 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg import sys import logging from zim.export import * import zim.notebook TEMPLATE = './tests/data/TestTemplate.html' if __name__ == '__main__': logging.basicConfig() assert len(sys.argv) == 4, 'USAGE: [multi|single|mhtml] inputpath outputpath' action = sys.argv[1] notebookpath = sys.argv[2] outputpath = sys.argv[3] info = zim.notebook.resolve_notebook(notebookpath) notebook, page = zim.notebook.build_notebook(info) notebook.index.update() if action == 'multi': if page: exporter = build_page_exporter( File(outputpath), 'html', TEMPLATE, page=page ) else: exporter = build_notebook_exporter( Dir(outputpath), 'html', TEMPLATE, index_page='index' ) elif action == 'single': exporter = build_single_file_exporter( File(outputpath), 'html', TEMPLATE, namespace=page ) elif action == 'mhtml': exporter = build_mhtml_file_exporter( File(outputpath), TEMPLATE ) else: assert False, 'TODO' if page: from .selections import SubPages pages = SubPages(notebook, page) else: from .selections import AllPages pages = AllPages(notebook) print 'Exporting' for p in exporter.export_iter(pages): #~ sys.stdout.write('.') #~ sys.stdout.flush() print '\tExport', p print ' done' zim-0.65/zim/export/linker.py0000664000175000017500000001766312537042652016116 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''The ExportLinker object translates links in zim pages to URLS for the export content ''' import logging logger = logging.getLogger('zim.exporter') #~ import base64 from .layouts import ExportLayout from zim.formats import BaseLinker from zim.fs import File, PathLookupError from zim.config import data_file from zim.notebook import PageNameError, interwiki_link from zim.stores import encode_filename from zim.parsing import link_type, is_win32_path_re, url_decode, url_encode from zim.formats import BaseLinker class ExportLinker(BaseLinker): '''This object translate links in zim pages to (relative) URLs. This is used when exporting data to resolve links. Relative URLs start with "./" or "../" and should be interpreted in the same way as in HTML. Both URLs and relative URLs are already URL encoded @todo: info on formats to know how to set "usebase" ''' def __init__(self, notebook, layout, source=None, output=None, usebase=False, document_root_url=None ): '''Contructor @param notebook: the source L{Notebook} for resolving links @param layout: the L{ExportLayout} for resolving target files @param source: is the L{Path} of the source page being exported @param output: is a L{File} object for the destination file @param usebase: if C{True} the format allows returning relative paths @param document_root_url: optional URL for the document root ''' self.notebook = notebook self.layout = layout self.source = source self.output = output if output: self.base = output.dir else: self.base = None self.usebase = usebase self.document_root_url = document_root_url #~ self._icons = {} # memorize them because the occur often in one page ## Methods used while exporting to resolve links etc. ## def link(self, link): '''Returns an url for a link in a zim page This method is used to translate links of any type. @param link: link to be translated @returns: url, uri, or relative path context of this linker ''' # Determines the link type and dispatches any of the "link_*" methods assert isinstance(link, basestring) type = link_type(link) methodname = '_link_' + type if hasattr(self, methodname): href = getattr(self, methodname)(link) else: href = link #~ print "Linker:", link, '-->', href, '(%s)' % type return href def img(self, src): '''Returns an url for image file 'src' ''' return self._link_file(src) #~ def icon(self, name): #~ '''Returns an url for an icon''' #~ if not name in self._icons: #~ path = 'icons/%s.png' % name #~ self._icons[name] = self.resource(path) #~ return self._icons[name] def resource(self, path): '''Return an url for template resources''' dir = self.layout.resources_dir() file = dir.file(path) return self.file_object(file) def resolve_source_file(self, link): '''Find the source file for an attachment Used e.g. by the latex format to find files for equations to be inlined. Do not use this method to resolve links, the file given here might be temporary and is not guaranteed to be available after the export. @returns: a L{File} object or C{None} if no file was found ''' return self.notebook.resolve_file(link, self.source) def resolve_dest_file(self, link): '''Find the destination file for an attachment @returns: a L{File} object ''' return self._resolve_file(link) def page_object(self, path): '''Turn a L{Path} object in a relative link or URI''' try: file = self.layout.page_file(path) except PathLookupError: return '' # Link outside of current export ? else: if file == self.output: return '#' + path.name # single page layout ? else: return self.file_object(file) def file_object(self, file): '''Turn a L{File} object in a relative link or URI''' if self.base and self.usebase \ and file.ischild(self.layout.relative_root): relpath = file.relpath(self.base, allowupward=True) if not relpath.startswith('.'): relpath = './' + relpath return relpath elif self.notebook.document_root \ and self.document_root_url \ and file.ischild(self.notebook.document_root): relpath = file.relpath(self.notebook.document_root) return self.document_root_url + relpath else: return file.uri ## Methods below are internal, not used by format or template ## def _link_page(self, link): try: path = self.notebook.resolve_path(link, source=self.source) # Allows source to be None except PageNameError: return '' else: return self.page_object(path) def _link_file(self, link): file = self._resolve_file(link) return self.file_object(file) def _resolve_file(self, link): # TODO checks here are copy of notebook.resolve_file - should be single function # to determine type of file link: attachment / document / other # or generic function that takes attachment folder & document folder as args filename = link.replace('\\', '/') if filename.startswith('~') or filename.startswith('file:/'): file = File(filename) elif filename.startswith('/'): if self.notebook.document_root: file = self.notebook.document_root.file(filename) else: file = File(filename) elif is_win32_path_re.match(filename): if not filename.startswith('/'): filename = '/'+filename # make absolute on Unix file = File(filename) else: if self.source: dir = self.layout.attachments_dir(self.source) else: dir = self.layout.relative_root file = dir.resolve_file(filename) # Allow ../ here - limit resulting relative link # in self.file_object() return file def _link_mailto(self, link): if link.startswith('mailto:'): return link else: return 'mailto:' + link def _link_interwiki(self, link): href = interwiki_link(link) if href and href != link: return self.link(href) # recurs else: logger.warn('No URL found for interwiki link "%s"', link) return None def _link_notebook(self, link): if link.startswith('zim+'): link = link[4:] if '?' in link: link, path = link.split('?') # FIXME: code below is not robust because we don't know the # storage mode of linked notebook... path = url_decode(path) # was already encoded by interwiki_link() path = encode_filename(path).replace(' ', '_') return link + '/' + url_encode(path) + '.txt' else: return link class StubLayout(ExportLayout): '''Stub implementation of L{ExportLayout} that is used by L{StaticExportLinker} ''' def __init__(self, notebook, resources_dir): self.notebook = notebook self.resources_dir = resources_dir def page_file(self, page): page = self.notebook.get_page(page) if hasattr(page, 'source') and isinstance(page.source, File): return page.source else: return None def attachments_dir(self, page): return self.notebook.get_attachments_dir(page) def resources_dir(self): return self.resources_dir #~ def data_uri(file): #~ if file.basename.endswith('.png'): #~ mime = 'image/png' #~ else: #~ mime = file.get_mimetype() #~ data64 = u''.join(base64.encodestring(file.raw()).splitlines()) #~ return u'data:%s;base64,%s' % (mime, data64) class StaticExportLinker(ExportLinker): '''This linker can be used when exporting a page to e.g. html without a file to write the html to. All links are resolved statically to the source files. ''' def __init__(self, notebook, resources_dir=None, source=None): layout = StubLayout(notebook, resources_dir) ExportLinker.__init__(self, notebook, layout, source=source) #~ def icon(self, name): #~ if not name in self._icons: #~ path = 'icons/%s.png' % name #~ if self.layout.resources_dir: #~ file = self.layout.resources_dir.file(path) #~ if file.exists(): #~ self._icons[name] = data_uri(file) #~ if not name in self._icons: #~ file = data_file('pixmaps/%s.png' % name) #~ if file.exists(): #~ self._icons[name] = data_uri(file) #~ else: #~ self._icons[name] = file.uri #~ return self._icons[name] zim-0.65/zim/export/selections.py0000664000175000017500000000434312537026552016772 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''PageSelection objects wrap the list of pages to be exported''' class PageSelection(object): '''Base class defining the public API''' notebook = None #: The L{Notebook} object prefix = None #: optional L{Path} object with common prefix of pages in the selection, or C{None} name = None #: name used in export template title = None # name used in export template def __iter__(self): '''Iterate page objects @implementation: must be implemented by subclases ''' raise NotImplemented def index(self, namespace=None): '''Iterate path objects for template C{index()} function, depth first @param namespace: the sub namespace to iterate or None to iterate toplevel ''' raise NotImplemented # TODO add __len__ that gives total pages for progress # TODO Use collections subclass to make interface complete ? class AllPages(PageSelection): '''Selection of all pages in a notebook''' def __init__(self, notebook): self.notebook = notebook self.name = notebook.name self.title = notebook.name # XXX implement notebook.title def __iter__(self): return self.notebook.walk() def index(self, namespace=None): return self.notebook.index.walk(namespace) class SinglePage(PageSelection): '''Selection of one specific page without subpages''' def __init__(self, notebook, page): self.notebook = notebook self.page = page self.name = self.page.name self.title = self.page.name # XXX implement page.title (use heading) self.prefix = page def __iter__(self): yield self.notebook.get_page(self.page) def index(self, namespace=None): if namespace is None or self.page.ischild(namespace): yield self.page else: pass class SubPages(SinglePage): '''Selection of pages in sub-tree of a notebook''' def __iter__(self): yield self.notebook.get_page(self.page) for page in self.notebook.walk(self.page): yield page def index(self, namespace=None): if namespace is None or namespace.name == page.name: yield self.page for page in self.notebook.index.walk(self.page): yield page elif namespace.ischild(self.page): for page in self.notebook.index.walk(namespace): yield page else: pass zim-0.65/zim/export/__init__.py0000664000175000017500000000601112374655231016354 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''This module contains the framework for exporting data from zim. The main API for exporting from the application is the L{Exporter} object. There are subclasses of Exporter to export to multiple files, to a single file or to a MHTML file. To configure the exporter object an additional L{ExportLayout} object is used. This layout defines the exact mapping of pages to files to be used. To specific the pages to export a subclass of the L{PageSelection} class is used. There are selection classes to export the whole notebook or to export a single page. The L{ExportTemplateContext} object defines specific template parameters for exporting. See also L{zim.templates} for template parsing and processing classes. See the module functions for convenient standard configurations. ''' # TODO test with fake file / dir objects ! Speedy test of all combos # TODO - when exporting with namespace / prefix we should also trim # links within a SingleFile output relative to that prefix # --> do not leak info on parent namespace names from zim.fs import Dir, File from zim.templates import get_template from zim.formats import get_format def build_notebook_exporter(dir, format, template, **opts): '''Returns an L{Exporter} that is suitable for exporting a whole notebook to a folder with one file per page ''' from zim.export.layouts import MultiFileLayout from zim.export.exporters.files import MultiFileExporter template = get_template(format, template) ext = get_format(format).info['extension'] layout = MultiFileLayout(dir, ext) return MultiFileExporter(layout, template, format, **opts) def build_page_exporter(file, format, template, page, **opts): '''Returns an L{Exporter} that is suitable for exporting a page with subpages to a file and a folder (e.g. "page.html" with "page_files/") ''' from zim.export.layouts import FileLayout from zim.export.exporters.files import MultiFileExporter template = get_template(format, template) ext = get_format(format).info['extension'] layout = FileLayout(file, page, ext) return MultiFileExporter(layout, template, format, **opts) def build_single_file_exporter(file, format, template, namespace=None, **opts): '''Returns an L{Exporter} that is suitable for exporting a set of pages to a single file ''' from zim.export.layouts import SingleFileLayout from zim.export.exporters.files import SingleFileExporter template = get_template(format, template) ext = get_format(format).info['extension'] layout = SingleFileLayout(file) return SingleFileExporter(layout, template, format, **opts) def build_mhtml_file_exporter(file, template, **opts): '''Returns an L{Exporter} that is suitable for exporting a set of pages to a single mhtml file ''' from zim.export.exporters.mhtml import MHTMLExporter template = get_template('html', template) return MHTMLExporter(file, template, **opts) zim-0.65/zim/export/exporters/0000775000175000017500000000000012615422672016277 5ustar jaapjaap00000000000000zim-0.65/zim/export/exporters/mhtml.py0000664000175000017500000000735212374655231020002 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg import email.mime.multipart import email.mime.text import email.mime.nonmultipart import base64 from zim.fs import get_tmpdir from zim.stores import encode_filename from zim.export.exporters import Exporter from zim.export.exporters.files import SingleFileExporter from zim.export.layouts import SingleFileLayout from zim.export.linker import ExportLinker class MHTMLExporter(Exporter): '''Exporter that exports pages and attachments to a single MHTML file. ''' # Output is Multipart-Mime message containing single HTML file # and all attachments and resources as mime parts # So first export as a single file, then wrap in mime # Keeps large data in memory - would need more low level # implementation with incremental writes to optimize it... # Also note that due to all the base64 encoding, size is going # to blow up even more ... def __init__(self, file, template, document_root_url=None): self.file = file self.template = template self.document_root_url = document_root_url def export_iter(self, pages): basename = encode_filename(pages.name) dir = get_tmpdir().subdir('mhtml_export_tmp_dir') dir.remove_children() file = dir.file(basename + '.html') layout = SingleFileLayout(file, pages.prefix) exporter = SingleFileExporter(layout, self.template, 'html', document_root_url=self.document_root_url) for p in exporter.export_iter(pages): yield p encoder = MHTMLEncoder() linker = ExportLinker(pages.notebook, layout, output=file, usebase=True) self.file.write(encoder(layout, linker)) class MHTMLEncoder(object): # Create message of file + attachments + resources # We use a linker for relative names to make absolutely sure # we give same relative paths as mentioned in links def __call__(self, layout, linker): msg = email.mime.multipart.MIMEMultipart('related') # MIME-Version 1.0 # Content-Type: multipart/related; boundry=... msg.preamble = '' \ 'This document is a Single File Web Page, also known as a Web Archive file\n' \ 'or MHTML. If you are seeing this message, your browser or editor doesn\'t\n' \ 'support MHTML. Please look for a plugin or extension that adds MHTML support\n' \ 'or download a browser that supports it.' # Add html file msg.attach(self.encode_text_file(layout.file, None, 'text/html')) # Add attachments and resource for file in self._walk(layout.dir): mt = file.get_mimetype() filename = linker.link(file.uri) if mt.startswith('text/'): part = self.encode_text_file(file, filename, mt) else: part = self.encode_data_file(file, filename, mt) msg.attach(part) # Write message to file return str(msg) def _walk(self, dir): for name in dir.list(): file = dir.file(name) if file.exists(): # is file yield file else: subdir = dir.subdir(name) for child in self._walk(subdir): # recurs yield child def encode_text_file(self, file, filename, mimetype): type, subtype = mimetype.split('/', 1) assert type == 'text' # Not using MIMEText here, since it uses base64 and inflates # all ascii text unnecessary charset = email.charset.Charset('utf-8') charset.body_encoding = email.charset.QP msg = email.mime.nonmultipart.MIMENonMultipart('text', subtype, charset='utf-8') if filename: # top level does not have filename msg['Content-Location'] = filename msg.set_payload(file.read(), charset=charset) return msg def encode_data_file(self, file, filename, mimetype): type, subtype = mimetype.split('/', 1) msg = email.mime.nonmultipart.MIMENonMultipart(type, subtype) msg['Content-Location'] = filename msg['Content-Type'] = mimetype msg.set_payload(file.raw()) email.encoders.encode_base64(msg) return msg zim-0.65/zim/export/exporters/__init__.py0000664000175000017500000000176712374655231020424 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''The exporters are the main public objects for exporting, they control the execution of the whole process. Each exporter implements a different export style. ''' # TODO collect errors / warnings and write a log that can be shown to the user after exporting import logging logger = logging.getLogger('zim.export') class Exporter(object): '''Base class that defines the public API for exporter objects''' def export(self, pages): '''Export pages @param pages: a L{PageSelection} object ''' for p in self.export_iter(pages): logger.info('Exporting %s', p.name) def export_iter(self, pages): '''Export pages while yielding page objects that are exported for progress monitoring Also note that implementations must be robust to ignore errors when exporting pages. @param pages: a L{PageSelection} object @implementation: must be implemented by subclasses ''' raise NotImplementedError zim-0.65/zim/export/exporters/files.py0000664000175000017500000001346412401526645017761 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg from functools import partial import logging logger = logging.getLogger('zim.export') from zim.utils import MovingWindowIter from zim.config import data_file from zim.notebook import IndexPage, Page, Path from zim.formats import get_format from zim.export.exporters import Exporter from zim.export.linker import ExportLinker from zim.export.template import ExportTemplateContext class FilesExporterBase(Exporter): '''Base class for exporters that export to files''' def __init__(self, layout, template, format, document_root_url=None): '''Constructor @param layout: a L{ExportLayout} to map pages to files @param template: a L{Template} object @param format: the format for the file content @param document_root_url: optional URL for the document root ''' self.layout = layout self.template = template self.format = get_format(format) # XXX self.document_root_url = document_root_url def export_attachments(self, notebook, page): # XXX FIXME remove need for notebook here source = notebook.get_attachments_dir(page) target = self.layout.attachments_dir(page) for name in source.list(): file = source.file(name) if not file.isdir(): file.copyto(target) # XXX what to do with folders that do not map to a page ? def export_resources(self): dir = self.layout.resources_dir() # Copy icons -- TODO should we define default resources somewhere ? #~ for name in ('checked-box', 'unchecked-box', 'xchecked-box'): #~ icon = data_file('pixmaps/%s.png' % name) #~ file = dir.file(name + '.png') #~ icon.copyto(file) # Copy template resources (can overwrite icons) if self.template.resources_dir \ and self.template.resources_dir.exists(): self.template.resources_dir.copyto(dir) class MultiFileExporter(FilesExporterBase): '''Exporter that exports each page to a single file''' def __init__(self, layout, template, format, index_page=None, document_root_url=None): '''Constructor @param layout: a L{ExportLayout} to map pages to files @param template: a L{Template} object @param format: the format for the file content @param index_page: a page to output the index or C{None} @param document_root_url: optional URL for the document root ''' FilesExporterBase.__init__(self, layout, template, format, document_root_url) self.index_page = index_page # TODO make generic special page in output selection def export_iter(self, pages): self.export_resources() for prev, page, next in MovingWindowIter(pages): logger.info('Exporting page: %s', page.name) yield page try: self.export_page(pages.notebook, page, pages, prevpage=prev, nextpage=next) # XXX FIXME remove need for notebook here self.export_attachments(pages.notebook, page) # XXX FIXME remove need for notebook here except: raise logger.exception('Error while exporting: %s', page.name) if self.index_page: try: index_page = self.index_page if isinstance(index_page, basestring): index_page = pages.notebook.cleanup_pathname(index_page) # XXX logger.info('Export index: %s', index_page, pages) yield Path(index_page) self.export_index(index_page, pages) except: logger.exception('Error while exporting index') def export_page(self, notebook, page, pages, prevpage=None, nextpage=None): # XXX FIXME remove need for notebook here file=self.layout.page_file(page) linker_factory = partial(ExportLinker, notebook=notebook, layout=self.layout, output=file, usebase=self.format.info['usebase'], document_root_url=self.document_root_url ) dumper_factory = self.format.Dumper # XXX context = ExportTemplateContext( notebook, linker_factory, dumper_factory, title=page.get_title(), content=[page], home=None, up=None, # TODO prevpage=prevpage, nextpage=nextpage, links={'index': self.index_page}, index_generator=pages.index, index_page=page, ) lines = [] self.template.process(lines, context) file.writelines(lines) def export_index(self, index_page, pages): # TODO remove hack here, and get rid of IndexPage in current shape from Notebook if pages.prefix: indexpage = Page(pages.prefix + index_page) else: indexpage = Page(Path(index_page)) # Bit of a HACK here - need better support for these index pages _page = IndexPage(pages.notebook, pages.prefix) # TODO make more flexible - use pages iter itself indexpage.readonly = False indexpage.set_parsetree(_page.get_parsetree()) indexpage.readonly = True self.export_page(pages.notebook, indexpage, pages) class SingleFileExporter(FilesExporterBase): '''Exporter that exports all page to the same file''' # TODO make robust for errors during page iteration - needs to be in template code - allow removing try .. except in multifile above ? def export_iter(self, pages): self.export_resources() linker_factory = partial(ExportLinker, notebook=pages.notebook, layout=self.layout, output=self.layout.file, usebase=self.format.info['usebase'], document_root_url=self.document_root_url ) dumper_factory = self.format.Dumper # XXX context = ExportTemplateContext( pages.notebook, linker_factory, dumper_factory, title=pages.title, # XXX content=pages, special=None, # TODO home=None, # TODO links=None, index_generator=pages.index, index_page=None, ) lines = [] self.template.process(lines, context) self.layout.file.writelines(lines) # TODO incremental write to save memory on large notebooks... # TODO also yield while exporting main page for page in pages: self.export_attachments(pages.notebook, page) yield page #~ class StaticFileExporter(SingleFileExporter): # Single file, but link files with absolute path # used e.g. for print-to-browser # TODO overload to prevent copying files zim-0.65/zim/export/template.py0000664000175000017500000003514312537043123016430 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''This module defines the ExportTemplateContext, which is a dictionary used to set the template parameters when exporting. Export template parameters supported:: generator .name -- "Zim x.xx" .user title navigation - links to other export pages (if not included here) home up prev -- prev export file or None next -- next export file or None links -- links to other export pages (index & plugins / ...) - sorted dict to have Index, Home first followed by plugins link .name .basename pages -- iter over special + content .special -- iter special pages to be included (index / plugins / ...) - support get() as well here .content -- iter pages being exported page .title -- heading or basename .name / .section / .basename .heading .body -- full body minus first heading .content -- heading + body .headings(max_level) -- iter over headings headingsection .level .heading .body .content .properties .links .backlinks .attachments file .basename .mtime .size options -- dict with template options (for format) toc([page]) -- iter of headings in this page or all of pages index([section]) -- index of full export job, not just in this page uri(link|file) resource(file) anchor(page|section) From template base:: range() / len() / sorted() / reversed() strftime() strfcal() Test in a template for single page export use: "IF loop.first and loop.last" ''' from functools import partial import logging logger = logging.getLogger('zim.export') from zim import __version__ as ZIM_VERSION import zim.datetimetz as datetime from zim.utils import OrderedDict from zim.fs import format_file_size from zim.environ import environ from zim.index import LINK_DIR_BACKWARD, LINK_DIR_FORWARD from zim.notebook import Path from zim.formats import ParseTree, ParseTreeBuilder, Visitor, \ FORMATTEDTEXT, BULLETLIST, LISTITEM, STRONG, LINK, HEADING from zim.templates import TemplateContextDict from zim.templates.functions import ExpressionFunction class ExportTemplateContext(dict): # No need to inherit from TemplateContextDict here, the template # will do a copy first anyway to protect changing content in this # object. This means functions and proxies can assume this dict is # save, and only "options" is un-save input. # # This object is not intended for re-use -- just instantiate a # new one for each export page def __init__(self, notebook, linker_factory, dumper_factory, title, content, special=None, home=None, up=None, prevpage=None, nextpage=None, links=None, index_generator=None, index_page=None, ): '''Constructor When exporting one notebook page per export page ("multi file"), 'C{content}' is a list of one page everytime. Even for exporting special pages, they go into 'C{content}' one at a time. The special pages are linked in 'C{links}' so the template can refer to them. When exporting multiple notebook pages to a single export page ("single file"), 'C{content}' is a list of all notebook pages a nd 'C{special}' a list. @param notebook: L{Notebook} object @param linker_factory: function producing L{ExportLinker} objects @param dumper_factory: function producing L{DumperClass} objects @param title: the export page title @param content: list of notebook pages to be exported @param special: list of special notebook pages to be exported if any @param home: link to home page if any @param up: link to parent export page if any @param prevpage: link to previous export page if any @param nextpage: link to next export page if any @param links: list of links to special pages if any, links are given as a 2-tuple of a key and a target (either a L{Path} or a L{NotebookPathProxy}) @param index_generator: a generator function or that provides L{IndexPath} or L{Page} objects to be used for the the C{index()} function. This method should take a single argument for the root namespace to show. See the definition of L{Index.walk()} or L{PageSelection.index()}. @param index_page: the current page to show in the index if any ''' # TODO get rid of need of notebook here! template_options = TemplateContextDict({}) # can be modified by template self._content = content self._linker_factory = linker_factory self._dumper_factory = partial(dumper_factory, template_options=template_options) self._index_generator = index_generator or content self._index_page = index_page self.linker = linker_factory() def _link(l): if isinstance(l, basestring): return UriProxy(l) elif isinstance(l, Path): return NotebookPathProxy(l) else: assert l is None or isinstance(l, (NotebookPathProxy, FileProxy)) return l if special: pages = ExportTemplatePageIter( special=PageListProxy(notebook, special, self._dumper_factory, self._linker_factory), content=PageListProxy(notebook, content, self._dumper_factory, self._linker_factory) ) else: pages = ExportTemplatePageIter( content=PageListProxy(notebook, content, self._dumper_factory, self._linker_factory) ) self.update({ # Parameters 'generator': { 'name': 'Zim %s' % ZIM_VERSION, 'user': environ['USER'], # TODO allow user name in prefs ? }, 'title': title, 'navigation': { 'home': _link(home), 'up': _link(up), 'prev': _link(prevpage), 'next': _link(nextpage), }, 'links': OrderedDict(), # keep order of links for iteration 'pages': pages, # Template settings 'options': template_options, # can be modified by template # Functions #~ 'toc': self.toc_function, 'index': self.index_function, 'pageindex': self.index_function, # backward compatibility 'uri': self.uri_function, 'anchor': self.anchor_function, 'resource': self.resource_function, }) if links: for k, l in links.items(): l = _link(l) self['links'][k] = l def get_dumper(self, page): '''Returns a L{DumperClass} instance for source page C{page} Only template options defined before this method is called are included, so only construct the "dumper" when you are about to use it ''' linker = self._linker_factory(source=page) return self._dumper_factory(linker) #~ @ExpressionFunction #~ def toc_function(self): #~ # TODO #~ # needs way to link heading achors in exported code (html) #~ # pass these anchors through the parse tree #~ #~ builder = ParseTreeBuilder() #~ builder.start(FORMATTEDTEXT) #~ builder.start(BULLETLIST) #~ for page in self._content: #~ current = 1 #~ for level, heading in ...: #~ if level > current: #~ for range(current, level): #~ builder.start(BULLETLIST) #~ current = level #~ elif level < current: #~ for range(level, current): #~ builder.end(BULLETLIST) #~ current = level #~ builder.start(LISTITEM) #~ builder.append(LINK, {'href': ...}, anchor) #~ builder.end(LISTITEM) #~ for range(1, current): #~ builder.end(BULLETLIST) #~ #~ builder.end(BULLETLIST) #~ builder.end(FORMATTEDTEXT) #~ tree = builder.get_parsetree() #~ if not tree: #~ return '' #~ print "!!!", tree.tostring() #~ dumper = self.get_dumper(None) #~ return ''.join(dumper.dump(tree)) @ExpressionFunction def index_function(self, namespace=None, collapse=True, ignore_empty=True): '''Index function for export template @param namespace: the namespace to include @param collapse: if C{True} only the branch of the current page is shown, if C{False} the whole index is shown @param ignore_empty: if C{True} empty pages (placeholders) are not shown in the index ''' if not self._index_generator: return '' builder = ParseTreeBuilder() builder.start(FORMATTEDTEXT) if self._index_page: expanded = [self._index_page] + list(self._index_page.parents()) else: expanded = [] stack = [] for path in self._index_generator(namespace): if self._index_page and collapse \ and not path.parent in expanded: continue # skip since it is not part of current path elif ignore_empty and not (path.hascontent or path.haschildren): continue # skip since page is empty if not stack: stack.append(path.parent) builder.start(BULLETLIST) elif stack[-1] != path.parent: if path.ischild(stack[-1]): builder.start(BULLETLIST) stack.append(path.parent) else: while stack and stack[-1] != path.parent: builder.end(BULLETLIST) stack.pop() builder.start(LISTITEM) if path == self._index_page: # Current page is marked with the strong style builder.append(STRONG, text=path.basename) else: # links to other pages builder.append(LINK, {'type': 'page', 'href': ':'+path.name}, path.basename) builder.end(LISTITEM) for p in stack: builder.end(BULLETLIST) builder.end(FORMATTEDTEXT) tree = builder.get_parsetree() if not tree: return '' #~ print "!!!", tree.tostring() dumper = self.get_dumper(None) return ''.join(dumper.dump(tree)) @ExpressionFunction def uri_function(self, link): if isinstance(link, UriProxy): return link.uri elif isinstance(link, NotebookPathProxy): return self.linker.page_object(link._path) elif isinstance(link, FilePathProxy): file = link._dest_file or link._file return self.linker.file_object(file) elif isinstance(link, basestring): return self.linker.link(link) else: return None @ExpressionFunction def anchor_function(self, page): # TODO remove prefix from anchors? if isinstance(page, (PageProxy, NotebookPathProxy)): return page.name else: return page @ExpressionFunction def resource_function(self, link): return self.linker.resource(link) class ExportTemplatePageIter(object): def __init__(self, special=None, content=None): self.special = special or [] self.content = content or [] def __iter__(self): for p in self.special: yield p for p in self.content: yield p class HeadingSplitter(Visitor): def __init__(self, max_level=None): self.max_level = max_level or 999 self._builder = ParseTreeBuilder() self.headings = [] def _split(self): self._builder.end(FORMATTEDTEXT) tree = self._builder.get_parsetree() if tree.hascontent: self.headings.append(tree) self._builder = ParseTreeBuilder() self._builder.start(FORMATTEDTEXT) def _close(self): tree = self._builder.get_parsetree() if tree.hascontent: self.headings.append(tree) def start(self, tag, attrib=None): if tag is HEADING and int(attrib['level']) <= self.max_level: self._split() self._builder.start(tag, attrib) def end(self, tag): self._builder.end(tag) if tag == FORMATTEDTEXT: self._close() def text(self, text): self._builder.text(text) def append(self, tag, attrib=None, text=None): if tag is HEADING and int(attrib['level']) <= self.max_level: self._split() self._builder.append(tag, attrib, text) class PageListProxy(object): def __init__(self, notebook, iterable, dumper_factory, linker_factory): self._notebook = notebook self._iterable = iterable self._dumper_factory = dumper_factory self._linker_factory = linker_factory def __iter__(self): for page in self._iterable: linker = self._linker_factory(source=page) dumper = self._dumper_factory(linker) yield PageProxy(self._notebook, page, dumper, linker) class ParseTreeProxy(object): @property def heading(self): head, body = self._split_head() return head @property def body(self): try: head, body = self._split_head() if body: lines = self._dumper.dump(body) return u''.join(lines) else: return '' except: logger.exception('Exception exporting page: %s', self._page.name) raise # will result in a "no such parameter" kind of error @property def content(self): try: if self._tree: lines = self._dumper.dump(self._tree) return u''.join(lines) else: return '' except: logger.exception('Exception exporting page: %s', self._page.name) raise # will result in a "no such parameter" kind of error def _split_head(self): if not hasattr(self, '_severed_head'): if self._tree: tree = self._tree.copy() head, level = tree.pop_heading() self._severed_head = (head, tree) # head can be None here else: self._severed_head = (None, None) return self._severed_head class PageProxy(ParseTreeProxy): def __init__(self, notebook, page, dumper, linker): self._notebook = notebook self._page = page self._tree = page.get_parsetree() self._dumper = dumper self._linker = linker self.name = self._page.name self.section = self._page.namespace self.namespace = self._page.namespace # backward compat self.basename = self._page.basename self.properties = self._page.properties @property def title(self): return self.heading or self.basename @ExpressionFunction def headings(self, max_level=None): if self._tree and self._tree.hascontent: splitter = HeadingSplitter(max_level) self._tree.visit(splitter) for subtree in splitter.headings: yield HeadingProxy(self._page, subtree, self._dumper) @property def links(self): links = self._notebook.index.list_links(self._page, LINK_DIR_FORWARD) for link in links: yield NotebookPathProxy(link.target) @property def backlinks(self): links = self._notebook.index.list_links(self._page, LINK_DIR_BACKWARD) for link in links: yield NotebookPathProxy(link.source) @property def attachments(self): source_dir = self._notebook.get_attachments_dir(self._page) for basename in source_dir.list(): file = source_dir.file(basename) if file.exists(): # is file dest_file = self._linker.resolve_dest_file('./'+basename) yield FileProxy(file, dest_file=dest_file, relpath='./'+basename) class HeadingProxy(ParseTreeProxy): def __init__(self, page, tree, dumper): self._page = page self._tree = tree self._dumper = dumper self.level = tree.get_heading_level() or 1 class FilePathProxy(object): def __init__(self, file, dest_file=None, relpath=None): self._file = file self._dest_file = dest_file self.name = relpath or file.basename self.basename = file.basename class FileProxy(FilePathProxy): @property def mtime(self): return datetime.datetime.fromtimestamp(float(self._file.mtime())) @property def size(self): return format_file_size(self._file.size()) class NotebookPathProxy(object): def __init__(self, path): self._path = path self.name = path.name self.basename = path.basename self.section = path.namespace self.namespace = path.namespace # backward compat class UriProxy(object): def __init__(self, uri): self.uri = uri def __str__(self): return self.uri zim-0.65/zim/export/layouts.py0000664000175000017500000001221412403660474016315 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''The ExportLayout object determines the mapping of pages to files when exporting. The subclasses give alternative file layouts. ''' from zim.fs import Dir, File, PathLookupError from zim.stores import encode_filename class ExportLayout(object): '''The ExportLayout object determines the mapping of pages to files when exporting. This is the base class that defines the public API. ''' relative_root = None #: Used by linker to make paths relative def page_file(self, page): '''Returns the file for a page @param page: a L{Page} or L{Path} object @returns: a L{File} object @raises PathLookupError: if page can not be mapped @implementation: must be implemented by subclasses ''' raise NotImplementedError def attachments_dir(self, page): '''Returns the attachments folder for a page @param page: a L{Page} or L{Path} object @returns: a L{Dir} object @raises PathLookupError: if folder can not be mapped @implementation: must be implemented by subclasses ''' raise NotImplementedError def resources_dir(self): '''Returns the folder for template resources @returns: a L{Dir} object ''' raise NotImplementedError class DirLayoutBase(ExportLayout): # Assumes "namespace" and "dir" attributes def attachments_dir(self, page): if self.namespace: if page == self.namespace: return self.dir elif page.ischild(self.namespace): path = page.relname(self.namespace) else: raise PathLookupError( '%s not a child of %s' % (page, self.namespace) ) name = page.relname(self.namespace) else: name = page.name return self.dir.subdir(encode_filename(name)) def resources_dir(self): return self.dir.subdir('_resources') class MultiFileLayout(DirLayoutBase): '''Layout that maps pages to files in a folder similar to how a notebook is stored. Layout:: dir/ `--> _resources/ `--> page.html `--> page/ `--> attachment.png The root for relative links is "dir/" ''' def __init__(self, dir, ext, namespace=None): '''Constructor @param dir: a L{Dir} object @param ext: the file extension to be used, e.g. 'html' @param namespace: optional namespace prefix to strip from page names ''' self.dir = dir self.ext = ext self.namespace = namespace self.relative_root = self.dir def page_file(self, page): if page.isroot: raise PathLookupError('Can not export: %s', page) elif self.namespace: if page.ischild(self.namespace): name = page.relname(self.namespace) else: # This layout can not store page == namespace ! raise PathLookupError( '%s not a child of %s' % (page, self.namespace) ) else: name = page.name return self.dir.file(encode_filename(name) + '.' + self.ext) #~ class MultiFolderLayout(DirLayoutBase): # dir/ # `--> _resources/ # `--> page/ # `--> index.html # page contents # `--> attachment.png # Root for relative links is "dir/" class FileLayout(DirLayoutBase): '''Layout that maps pages to files in a folder with one specific page as the top level file. Use to export sub-tree of a notebook. Layout:: page.html page_files/ `--> attachment.png `--> subpage.html `--> subpage/attachment.pdf `--> _resources/ The root for relative links is "page_files/" ''' def __init__(self, file, page, ext): '''Constructor @param file: a L{File} object @param page: a L{Path} object for the top level page @param ext: the file extension to be used for sub-pages, e.g. 'html' ''' self.file = file self.namespace = page self.ext = ext basename = file.basename if '.' in basename: basename, x = basename.rsplit('.', 1) self.dir = file.dir.subdir(basename + '_files') self.relative_root = self.dir def page_file(self, page): if page == self.namespace: return self.file elif page.ischild(self.namespace): name = page.relname(self.namespace) else: raise PathLookupError( '%s not a child of %s' % (page, self.namespace) ) return self.dir.file(encode_filename(name) + '.' + self.ext) class SingleFileLayout(DirLayoutBase): '''Like FileLayout, except all pages are stored in a single file while attachments still follow folder structure per page. Can be used to export a page with sub-pages, but also for a complete notebook. Layout:: page.html page_files/ `--> attachment.png `--> subpage/attachment.pdf `--> _resources/ The root for relative links is "page_files/" ''' def __init__(self, file, page=None): '''Constructor @param file: a L{File} object @param page: an optional L{Path} object for the top level page ''' self.file = file basename = file.basename if '.' in basename: basename, x = basename.rsplit('.') self.dir = file.dir.subdir(basename + '_files') self.relative_root = self.dir self.namespace = page def page_file(self, page): if page.isroot: raise PathLookupError('Can not export: %s', page) elif self.namespace \ and not page == self.namespace \ and not page.ischild(self.namespace): raise PathLookupError( '%s not a child of %s' % (page, self.namespace) ) else: return self.file zim-0.65/zim/objectmanager.py0000664000175000017500000001413112606236354016076 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jiří Janoušek # Copyright 2014 Jaap Karssenberg import logging logger = logging.getLogger("zim.objectmanager") from zim.signals import SignalEmitter, SIGNAL_AFTER from zim.utils import WeakSet from zim.config.dicts import ConfigDict, String import zim.plugins ## TODO remove singleton contruction, add ref to plugin manager ## to allow fallback object widget to have toolbar to load plugin class _ObjectManager(object): '''Manages custom objects.''' def __init__(self): self.factories = {} self.objects = {'fallback': WeakSet()} self.window_extensions = {} def register_object(self, type, factory, window_extension=None): '''Register a factory method or class for a specific object type. @param type: the object type as string (unique name) @param factory: can be either an object class or a method, @param window_extension: dictionary - the plugin related window_extension should callable and return objects. When constructing objects this factory will be called as:: factory(attrib, text) Where: - C{attrib} is a dict with attributes - C{text} is the main text source of the object @returns: a previously set factory for C{type} or C{None} ''' logger.debug('Registered object %s', type) type = type.lower() old = self.factories.get(type) self.factories[type] = factory self.objects[type] = WeakSet() self.window_extensions[type] = window_extension return old def unregister_object(self, type): '''Unregister a specific object type. @returns: C{True} on success, C{False} if given type has not been registered. ''' type = type.lower() if type in self.factories: del self.factories[type] del self.objects[type] return True else: return False def is_registered(self, type): '''Returns C{True} if object type has already been registered.''' return type.lower() in self.factories def get_object(self, type, attrib, text): '''Returns a new object for given type with given attributes @param type: the object type as string @param attrib: dict with attributes @param text: main source of the object @returns: a new object instance, either created by the factory method for C{type}, or an instance of L{FallbackObject} ''' type = type.lower() if type in self.factories: factory = self.factories[type] obj = factory(attrib, text) self.objects[type].add(obj) else: factory = FallbackObject obj = factory(attrib, text) self.objects['fallback'].add(obj) return obj def get_active_objects(self, type): '''Returns an iterator for active objects for a specific type. (Objects are 'active' as long as they are not destroyed.) ''' if type in self.objects: return iter(self.objects[type]) else: return [] def find_plugin(self, type): '''Find a plugin to handle a specific object type. Intended to suggest plugins to the user that can be loaded. @param type: object type as string @returns: a 5-tuple of the plugin name, a boolean for the dependency check, the plugin class, or C{None} and the related plugin window_extension ''' for name in zim.plugins.PluginManager.list_installed_plugins(): # XXX try: klass = zim.plugins.PluginManager.get_plugin_class(name) # XXX types = klass.plugin_info.get('object_types') if types and type in types: activatable = klass.check_dependencies_ok() win_ext = self.window_extensions[type] if type in self.window_extensions else None return (name, klass.plugin_info['name'], activatable, klass, win_ext) except: logger.exception('Could not load plugin %s', name) continue return None ObjectManager = _ObjectManager() # Singleton object class CustomObjectClass(SignalEmitter): ''' Base Class for custom objects. Signal: * 'modified-changed' -- modification state has been changed ''' OBJECT_ATTR = { 'type': String('object') } # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'modified-changed': (SIGNAL_AFTER, None, ()), } def __init__(self, attrib, data): self._attrib = ConfigDict(attrib) self._attrib.define(self.OBJECT_ATTR) self._data = data if data is not None else '' self.modified = False def get_modified(self): '''Returns True if object has been modified.''' return self.modified def set_modified(self, modified): '''Sets modification state of object and emits signal if needed.''' if self.modified != modified: self.modified = modified self.emit("modified-changed") def get_widget(self): '''Returns a new gtk widget for this object''' raise NotImplemented def get_attrib(self): '''Returns object attributes. The 'type' attribute stores type of object.''' return self._attrib.dump() def get_data(self): '''Returns serialized data of object.''' return self._data def dump(self, format, dumper, linker=None): '''Dumps current object. Returns None if format is not supported.''' return None class FallbackObject(CustomObjectClass): '''Fallback object displays data as TextView and preserves attributes unmodified. ''' def __init__(self, attrib, data): CustomObjectClass.__init__(self, attrib, data) self.buffer = None def get_widget(self): import gtk from zim.gui.objectmanager import FallbackObjectWidget if not self.buffer: self.buffer = gtk.TextBuffer() self.buffer.set_text(self._data) self.buffer.connect('modified-changed', self.on_modified_changed) self.buffer.set_modified(False) self._data = None type = self._attrib['type'] return FallbackObjectWidget(type, self.buffer) def get_data(self): if self.buffer: bounds = self.buffer.get_bounds() return self.buffer.get_text(bounds[0], bounds[1]) else: return self._data def set_data(self, text): if self.buffer: self.buffer.set_text(text) else: self._data = text def on_modified_changed(self, buffer): '''Callback for TextBuffer's modifications.''' if buffer.get_modified(): self.set_modified(True) buffer.set_modified(False) def set_label(self, label): '''Sets label at the top area of widget.''' self.label.set_text(label) zim-0.65/zim/formats/0000775000175000017500000000000012615422672014376 5ustar jaapjaap00000000000000zim-0.65/zim/formats/latex.py0000664000175000017500000001556412537075402016076 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Johannes Reinhardt # Copyright 2012-2014 Jaap Karssenberg '''This modules handles export of LaTeX Code''' import re import string import logging from zim.fs import File, FileNotFoundError from zim.formats import * from zim.formats.plain import Dumper as TextDumper from zim.parsing import url_encode, URL_ENCODE_READABLE from zim.config.dicts import Choice logger = logging.getLogger('zim.formats.latex') info = { 'name': 'latex', 'desc': 'LaTeX', 'mimetype': 'application/x-tex', 'extension': 'tex', 'native': False, 'import': False, 'export': True, 'usebase': False, } encode_re = re.compile(r'(\&|\$|\^|\%|\#|\_|\\|\<|\>|\n)') encode_dict = { '\\': '$\\backslash$', '&': '\\$', '$': '\\$ ', '^': '\\^{}', '%': '\\%', '#': '\\# ', '_': '\\_', '>': '\\textgreater{}', '<': '\\textless{}', '\n': '\n\n', } class Dumper(TextDumper): BULLETS = { UNCHECKED_BOX : '\\item[\\Square]', XCHECKED_BOX : '\\item[\\XBox]', CHECKED_BOX : '\\item[\\CheckedBox]', BULLET : '\\item', } SECTIONING = { 'report': { 1:'\\chapter{%s}', 2:'\\section{%s}', 3:'\\subsection{%s}', 4:'\\subsubsection{%s}', 5:'\\paragraph{%s}' }, 'article': { 1:'\\section{%s}', 2:'\\subsection{%s}', 3:'\\subsubsection{%s}', 4:'\\paragraph{%s}', 5:'\\subparagraph{%s}' }, 'book': { 1:'\\part{%s}', 2:'\\chapter{%s}', 3:'\\section{%s}', 4:'\\subsection{%s}', 5:'\\subsubsection{%s}' } } TAGS = { EMPHASIS: ('\\emph{', '}'), STRONG: ('\\textbf{', '}'), MARK: ('\\uline{', '}'), STRIKE: ('\\sout{', '}'), TAG: ('', ''), # No additional annotation (apart from the visible @) SUBSCRIPT: ('$_{', '}$'), SUPERSCRIPT: ('$^{', '}$'), } TEMPLATE_OPTIONS = { 'document_type': Choice('report', ('report', 'article','book')) } def dump(self, tree): assert isinstance(tree, ParseTree) assert self.linker, 'LaTeX dumper needs a linker object' self.document_type = self.template_options['document_type'] logger.info('used document type: %s' % self.document_type) return TextDumper.dump(self, tree) @staticmethod def encode_text(tag, text): return encode_re.sub(lambda m: encode_dict[m.group(1)], text) def dump_pre(self, tag, attrib, strings): indent = int(attrib.get('indent', 0)) text = u''.join(strings) text = text.replace('\n\n', '\n') # remove newlines introduces by encode_text strings = text.splitlines(True) if indent: strings = self.prefix_lines(' ' * indent, strings) strings.insert(0, '\n\\begin{lstlisting}\n') strings.append('\n\\end{lstlisting}\n') return strings def dump_h(self, tag, attrib, strings): level = int(attrib['level']) if level < 1: level = 1 elif level > 5: level = 5 text = u''.join(strings) return [self.SECTIONING[self.document_type][level] % text] def dump_ul(self, tag, attrib, strings): strings.insert(0, '\\begin{itemize}\n') strings.append('\\end{itemize}\n') return TextDumper.dump_ul(self, tag, attrib, strings) def dump_ol(self, tag, attrib, strings): start = attrib.get('start', 1) if start in string.lowercase: type = 'a' start = string.lowercase.index(start) + 1 elif start in string.uppercase: type = 'A' start = string.uppercase.index(start) + 1 else: type = '1' start = int(start) strings.insert(0, '\\begin{enumerate}[%s]\n' % type) if start > 1: strings.insert(1, '\setcounter{enumi}{%i}\n' % (start-1)) strings.append('\\end{enumerate}\n') return TextDumper.dump_ol(self, tag, attrib, strings) def dump_li(self, tag, attrib, strings): # Always return "\item" for numbered lists if self.context[-1].tag == BULLETLIST: if 'bullet' in attrib \ and attrib['bullet'] in self.BULLETS: bullet = self.BULLETS[attrib['bullet']] else: bullet = self.BULLETS[BULLET] elif self.context[-1].tag == NUMBEREDLIST: bullet = self.BULLETS[BULLET] else: assert False, 'Unnested li element' return (bullet, ' ') + tuple(strings) + ('\n',) def dump_img(self, tag, attrib, strings=None): # We try to get images about the same visual size, # therefore need to specify dot density 96 dpi seems to be # common for computer monitors dpi = 96 if attrib.get('type') == 'equation': try: # Try to find the source, otherwise fall back to image src = attrib['src'][:-4] + '.tex' file = self.linker.resolve_source_file(src) if file is not None: equation = file.read().strip() else: equation = None except FileNotFoundError: logger.warn('Could not find latex equation: %s', src) else: if equation: return ['\\begin{math}\n', equation, '\n\\end{math}'] if 'width' in attrib and not 'height' in attrib: options = 'width=%fin, keepaspectratio=true' \ % ( float(attrib['width']) / dpi ) elif 'height' in attrib and not 'width' in attrib: options = 'height=%fin, keepaspectratio=true' \ % ( float(attrib['height']) / dpi ) elif 'height' in attrib and 'width' in attrib: options = 'height=%fin, width=%fin' \ % ( float(attrib['height']) / dpi, float(attrib['width']) / dpi ) else: options = '' imagepath = self.linker.img(attrib['src']) if imagepath.startswith('file://'): imagepath = File(imagepath).path # avoid URIs here image = '\\includegraphics[%s]{%s}' % (options, imagepath) if 'href' in attrib: href = self.linker.link(attrib['href']) return ['\\href{%s}{%s}' % (href, image)] else: return [image] def dump_link(self, tag, attrib, strings=None): href = self.linker.link(attrib['href']) href = url_encode(href, URL_ENCODE_READABLE) if strings: text = u''.join(strings) else: text = href return ['\\href{%s}{%s}' % (href, text)] def dump_code(self, tag, attrib, strings): # Here we try several possible delimiters for the inline verb # command of LaTeX text = u''.join(strings) for delim in '+*|$&%!-_': if not delim in text: return ['\\lstinline'+delim+text+delim] else: assert False, 'Found no suitable delimiter for verbatim text: %s' % element dump_object_fallback = dump_pre def dump_table(self, tag, attrib, strings): table = [] # result table rows = strings aligns, _wraps = TableParser.get_options(attrib) rowline = lambda row: '&'.join([' ' + cell + ' ' for cell in row]) + '\\tabularnewline\n\hline' aligns = map(lambda a: 'l' if a == 'left' else 'r' if a == 'right' else 'c' if a == 'center' else 'l', aligns) for i, row in enumerate(rows): for j, (cell, align) in enumerate(zip(row, aligns)): if '\n' in cell: rows[i][j] = '\shortstack[' + align + ']{' + cell.replace("\n", "\\") + '}' # print table table.append('\\begin{tabular}{ |' + '|'.join(aligns) + '| }') table.append('\hline') table += [rowline(rows[0])] table.append('\hline') table += [rowline(row) for row in rows[1:]] table.append('\end{tabular}') return map(lambda line: line+"\n", table) zim-0.65/zim/formats/__main__.py0000664000175000017500000000267412374655231016502 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg '''When this module is run as a script it allows conversion from one format to another Given two format names it will read the first format from stdin and write the second format to stdout:: cat foo.txt | python -m zim.formats wiki html > foo.html Given only one format name it will output the parsetree XML:: cat foo.txt | python -m zim.formats wiki > foo.xml Note that this can not replace "zim --export" because no effort is done here to resolve links. Main purpose is testing. ''' import sys import logging from zim.fs import Dir from zim.formats import * if __name__ == '__main__': if len(sys.argv) not in (2, 3, 4): print 'Usage: python -m zim.formats format [format] [source_dir]' print '\tWill read from stdin and output to stdout' sys.exit(1) logging.basicConfig() inputformat = sys.argv[1] if len(sys.argv) == 4: outputformat = sys.argv[2] source_dir = Dir(sys.argv[3]) elif len(sys.argv) == 3: outputformat = sys.argv[2] source_dir = None else: outputformat = '__XML__' source_dir = None input = sys.stdin.read() parser = get_parser(inputformat) tree = parser.parse(input) if outputformat == '__XML__': sys.stdout.write(tree.tostring()) else: linker = StubLinker(source_dir=source_dir) dumper = get_dumper(outputformat, linker=linker) lines = dumper.dump(tree) sys.stdout.write(''.join(lines).encode('utf-8')) zim-0.65/zim/formats/rst.py0000664000175000017500000000703712614760631015566 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Yao-Po Wang # Copyright 2013 Jaap Karssenberg '''This module handles dumping reStructuredText with sphinx extensions''' from zim.formats import * from zim.formats.plain import Dumper as TextDumper info = { 'name': 'reST', 'desc': 'reST (Octopress)', 'mimetype': 'text/x-rst', 'extension': 'rst', # No official file extension, but this is often used 'native': False, 'import': False, 'export': True, 'usebase': True, } class Dumper(TextDumper): BULLETS = { UNCHECKED_BOX: u'- \u2610', XCHECKED_BOX: u'- \u2612', CHECKED_BOX: u'- \u2611', BULLET: u'-', } TAGS = { EMPHASIS: ('*', '*'), STRONG: ('**', '**'), MARK: ('', ''), # TODO, no directly way to do this in rst STRIKE: ('', ''), # TODO, no directly way to do this in rst VERBATIM: ("``", "``"), TAG: ('', ''), # No additional annotation (apart from the visible @) SUBSCRIPT: ('\\ :sub:`', '`\\ '), SUPERSCRIPT: ('\\ :sup:`', '`\\ '), } # TODO tags other than :sub: and :sup: may also need surrounding whitespace, deal with this in post process (join) action ? # IDEM for blocks like images and objects, how to enforce empty lines and how to deal with inline images.. HEADING_UNDERLINE = ['=', '-', '^', '"'] def dump(self, tree): assert self.linker, 'rst dumper needs a linker object' return TextDumper.dump(self, tree) def dump_h(self, tag, attrib, strings): # Underlined headings level = int(attrib['level']) if level < 1: level = 1 elif level > 4: level = 4 char = self.HEADING_UNDERLINE[level-1] heading = u''.join(strings) underline = char * len(heading) return [heading + '\n', underline] def dump_pre(self, tag, attrib, strings): # prefix last line with "::\n\n" # indent with \t to get preformatted strings = self.prefix_lines('\t', strings) strings.insert(0, '::\n\n') return strings def dump_link(self, tag, attrib, strings=None): # Use inline url form, putting links at the end is more difficult assert 'href' in attrib, \ 'BUG: link misses href: %s "%s"' % (attrib, strings) href = self.linker.link(attrib['href']) text = u''.join(strings) or href return '`%s <%s>`_' % (text, href) def dump_img(self, tag, attrib, strings=None): src = self.linker.img(attrib['src']) text = '.. image:: %s\n' % src items = attrib.items() items.sort() # unit tests don't like random output for k, v in items: if k == 'src' or k.startswith('_'): continue elif v: # skip None, "" and 0 text += ' :%s: %s\n' % (k, v) return text + '\n' # TODO use text for caption (with full recursion) # can be done using "figure" directive dump_object_fallback = dump_pre def dump_table(self, tag, attrib, strings): table = [] # result table aligns, _wraps = TableParser.get_options(attrib) rows = TableParser.convert_to_multiline_cells(strings) maxwidths = TableParser.width3dim(rows) rowsep = lambda y: TableParser.rowsep(maxwidths, x='+', y=y) rowline = lambda row: TableParser.rowline(row, maxwidths, aligns) # print table table.append(rowsep('-')) table += [rowline(line) for line in rows[0]] table.append(rowsep('=')) for row in rows[1:]: table += [rowline(line) for line in row] table.append(rowsep('-')) return map(lambda line: line+"\n", table) def dump_th(self, tag, attrib, strings): strings = [s.replace('|', '∣') for s in strings] return [self._concat(strings)] def dump_td(self, tag, attrib, strings): strings = [s.replace('|', '∣') for s in strings] return [self._concat(strings)] zim-0.65/zim/formats/wiki.py0000664000175000017500000004011712614760413015713 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008, 2012 Jaap Karssenberg '''This module handles parsing and dumping wiki text''' import re from zim.parser import * from zim.parsing import url_re, url_encode, URL_ENCODE_DATA from zim.formats import * from zim.formats.plain import Dumper as TextDumper WIKI_FORMAT_VERSION = 'zim 0.4' info = { 'name': 'wiki', 'desc': 'Zim Wiki Format', 'mimetype': 'text/x-zim-wiki', 'extension': 'txt', 'native': True, 'import': True, 'export': True, 'usebase': True, } bullet_pattern = u'(?:[\\*\u2022]|\\[[ \\*x]\\]|\\d+\\.|[a-zA-Z]\\.)[\\ \\t]+' # bullets can be '*' or 0x2022 for normal items # and '[ ]', '[*]' or '[x]' for checkbox items # and '1.', '10.', or 'a.' for numbered items (but not 'aa.') bullet_line_re = re.compile(ur'^(\t*)(%s)(.*\n)$' % bullet_pattern) # matches list item: prefix, bullet, text number_bullet_re = re.compile(u'^(\d+|[a-zA-Z])\.$') def check_number_bullet(bullet): '''If bullet is a numbered bullet this returns the number or letter, C{None} otherwise ''' m = number_bullet_re.match(bullet) if m: return m.group(1) else: return None param_re = re.compile('([\w-]+)=("(?:[^"]|"{2})*"|\S*)') # matches parameter list for objects # allow name="foo bar" and name=Foo empty_lines_re = re.compile(r'((?:^[\ \t]*\n)+)', re.M | re.U) # match multiple empty lines unindented_line_re = re.compile('^\S', re.M) # match any unindented line def _remove_indent(text, indent): return re.sub('(?m)^'+indent, '', text) # Specify "(?m)" instead of re.M since "flags" keyword is not # supported in python 2.6 class WikiParser(object): # This parser uses 3 levels of rules. The top level splits up # paragraphs, verbatim paragraphs, images and objects. # The second level further splits paragraphs in lists and indented # blocks. The third level does the inline formatting for all # text. BULLETS = { '[ ]': UNCHECKED_BOX, '[x]': XCHECKED_BOX, '[*]': CHECKED_BOX, '*': BULLET, } def __init__(self): self.inline_parser = self._init_inline_parse() self.list_and_indent_parser = self._init_intermediate_parser() self.block_parser = self._init_block_parser() def __call__(self, builder, text): builder.start(FORMATTEDTEXT) self.block_parser(builder, text) builder.end(FORMATTEDTEXT) def _init_inline_parse(self): # Rules for inline formatting, links and tags return ( Rule(LINK, url_re.r, process=self.parse_url) # FIXME need .r atribute because url_re is a Re object | Rule(TAG, r'(?\t+) %s .* \n # Line with indent and bullet (?: ^(?P=list_indent) \t* %s .* \n # Line with same or more indent and bullet )* # .. repeat )''' % (bullet_pattern, bullet_pattern), process=self.parse_list ), Rule( 'X-Indented-Block', r'''( ^(?P\t+) .* \n # Line with indent (?: ^(?P=block_indent) (?!\t|%s) .* \n # Line with _same_ indent, no bullet )* # .. repeat )''' % bullet_pattern, process=self.parse_indent ), ) p.process_unmatched = self.inline_parser return p def _init_block_parser(self): # Top level parser, to break up block level items p = Parser( Rule(VERBATIM_BLOCK, r''' ^(?P\t*) \'\'\' \s*? # 3 "'" ( (?:^.*\n)*? ) # multi-line text ^(?P=pre_indent) \'\'\' \s*? \n # another 3 "'" with matching indent ''', process=self.parse_pre ), Rule(OBJECT, r''' ^(?P\t*) \{\{\{ \s*? (\S+:.*\n) # "{{{ object_type: attrib=..." ( (?:^.*\n)*? ) # multi-line body ^(?P=obj_indent) \}\}\} \s*? \n # "}}}" with matching indent ''', process=self.parse_object ), Rule(HEADING, r'^( ==+ [\ \t]+ \S.*? ) [\ \t]* =* \n', # "==== heading ====" process=self.parse_heading ), # standard table format Rule(TABLE, r''' ^(\|.*\|)$\n # starting and ending with | ^( (?:\| [ \|\-:]+ \|$\n)? ) # column align ( (?:^\|.*\|$\n)+ ) # multi-lines: starting and ending with | ^(?= \s*? \n) # empty line / only spaces ''', process=self.parse_table ) ) p.process_unmatched = self.parse_para return p @staticmethod def parse_heading(builder, text): '''Parse heading and determine it's level''' assert text.startswith('=') for i, c in enumerate(text): if c != '=': break level = 7 - min(6, i) # == is level 5 # === is level 4 # ... # ======= is level 1 text = text[i:].lstrip() + '\n' builder.append(HEADING, {'level': level}, text) @staticmethod def parse_pre(builder, indent, text): '''Verbatim block with indenting''' if indent: text = _remove_indent(text, indent) attrib = {'indent': len(indent)} else: attrib = None builder.append(VERBATIM_BLOCK, attrib, text) def parse_object(self, builder, indent, header, body): '''Custom object''' type, param = header.split(':', 1) type = type.strip().lower() attrib = {} for match in param_re.finditer(param): key = match.group(1).lower() value = match.group(2) if value.startswith('"') and len(value) > 1: # Quoted string value = value[1:-1].replace('""', '"') attrib[key] = value # Defined after parsing head, so these attrib can not be overruled # accidentally ### FIXME FIXME FIXME - need to separate two types of attrib ### attrib['type'] = type if indent: body = _remove_indent(body, indent) attrib['indent'] = len(indent) builder.append(OBJECT, attrib, body) def check_multi_attribute(self, attrib, key, default, list_length): ''' Correct multi-attributes, so they do fit with column length of table :param attrib: key-value store :param key: key to select of attribute :param default: default value for one list entry :param list_length: required length of selected attribute :return: attribute-value as list of different options ''' if attrib and key in attrib and attrib[key]: values = attrib[key].split(',') else: values = [] while len(values) > list_length: values.pop() while len(values) < list_length: values.append(default) return ','.join(values) def parse_table(self, builder, headerrow, alignstyle, body): '''Table parsing''' body = body.replace('\\|', '#124;') # escaping rows = body.split('\n')[:-1] # get maximum number of columns - each columns must have same size nrcols = max([headerrow.count('|')]+[row.count('|') for row in rows])-1 # transform header separator line into alignment definitions aligns = [] while alignstyle.count('|') < nrcols+1: alignstyle += '|' # fill cells thus they match with nr of headers for celltext in alignstyle.split('|')[1:-1]: celltext = celltext.strip() if celltext.startswith(':') and celltext.endswith(':'): alignment = 'center' elif celltext.startswith(':'): alignment = 'left' elif celltext.endswith(':'): alignment = 'right' else: alignment = 'normal' aligns.append(alignment) # collect wrap settings from first table row headers = [] wraps = [] for celltext in headerrow.split('|')[1:-1]: if celltext.rstrip().endswith('<'): celltext = celltext.rstrip().rstrip('<') wraps.append(1) else: wraps.append(0) headers.append(celltext) attrib = {'aligns': ','.join(aligns), 'wraps': ','.join(map(str, wraps))} # build table builder.start(TABLE, attrib) builder.start(HEADROW) for celltext in headers: celltext = celltext.replace('#124;', '|').replace('\\n', '\n').strip() if not celltext: celltext = ' ' # celltext must contain at least one character builder.append(HEADDATA, {}, celltext) builder.end(HEADROW) for bodyrow in rows: while bodyrow.count('|') < nrcols+1: bodyrow += '|' # fill cells thus they match with nr of headers builder.start(TABLEROW) for celltext in bodyrow.split('|')[1:-1]: builder.start(TABLEDATA) celltext = celltext.replace('#124;', '|').replace('\\n', '\n').strip() # cleanup cell if not celltext: celltext = ' ' # celltext must contain at least one character self.inline_parser(builder, celltext) builder.end(TABLEDATA) builder.end(TABLEROW) builder.end(TABLE) def parse_para(self, builder, text): '''Split a text into paragraphs and empty lines''' if text.isspace(): builder.text(text) else: for block in empty_lines_re.split(text): if not block: # empty string due to split pass elif block.isspace(): builder.text(block) elif self.backward \ and not unindented_line_re.search(block): # Before zim 0.29 all indented paragraphs were # verbatim. builder.append(VERBATIM_BLOCK, None, block) else: block = convert_space_to_tab(block) builder.start(PARAGRAPH) self.list_and_indent_parser(builder, block) builder.end(PARAGRAPH) def parse_list(self, builder, text, indent=None): '''Parse lists into items and recurse to get inline formatting per list item ''' if indent: text = _remove_indent(text, indent) attrib = {'indent': len(indent)} else: attrib = None lines = text.splitlines(True) self.parse_list_lines(builder, lines, 0, attrib) def parse_list_lines(self, builder, lines, level, attrib=None): listtype = None first = True while lines: line = lines[0] m = bullet_line_re.match(line) assert m, 'Line does not match a list item: >>%s<<' % line prefix, bullet, text = m.groups() bullet = bullet.rstrip() if first: number = check_number_bullet(bullet) if number: listtype = NUMBEREDLIST if not attrib: attrib = {} attrib['start'] = number else: listtype = BULLETLIST builder.start(listtype, attrib) first = False mylevel = len(prefix) if mylevel > level: self.parse_list_lines(builder, lines, level+1) # recurs elif mylevel < level: builder.end(listtype) return else: if listtype == NUMBEREDLIST: attrib = None elif bullet in self.BULLETS: # BULLETLIST attrib = {'bullet': self.BULLETS[bullet]} else: # BULLETLIST attrib = {'bullet': BULLET} builder.start(LISTITEM, attrib) self.inline_parser(builder, text) builder.end(LISTITEM) lines.pop(0) builder.end(listtype) def parse_indent(self, builder, text, indent): '''Parse indented blocks and turn them into 'div' elements''' text = _remove_indent(text, indent) builder.start(BLOCK, {'indent': len(indent)}) self.inline_parser(builder, text) builder.end(BLOCK) @staticmethod def parse_link(builder, text): text = text.strip('|') # old bug producing "[[|link]]", or "[[link|]]" or "[[||]]" if '|' in text: href, text = text.split('|', 1) text = text.strip('|') # stuff like "[[foo||bar]]" else: href = text if href and not href.isspace(): builder.append(LINK, {'href': href}, text) else: pass @staticmethod def parse_image(builder, text): if '|' in text: url, text = text.split('|', 1) else: url, text = text, None attrib = ParserClass.parse_image_url(url) if text: attrib['alt'] = text builder.append(IMAGE, attrib) @staticmethod def parse_url(builder, text): builder.append(LINK, {'href': text}, text) @staticmethod def parse_tag(builder, text): builder.append(TAG, {'name': text[1:]}, text) wikiparser = WikiParser() #: singleton instance # FIXME FIXME we are redefining Parser here ! class Parser(ParserClass): def __init__(self, version=WIKI_FORMAT_VERSION): self.backward = version not in ('zim 0.26', WIKI_FORMAT_VERSION) def parse(self, input, partial=False): if not isinstance(input, basestring): input = ''.join(input) if not partial: input = fix_line_end(input) builder = ParseTreeBuilder(partial=partial) wikiparser.backward = self.backward # HACK wikiparser(builder, input) return builder.get_parsetree() class Dumper(TextDumper): BULLETS = { UNCHECKED_BOX: u'[ ]', XCHECKED_BOX: u'[x]', CHECKED_BOX: u'[*]', BULLET: u'*', } TAGS = { EMPHASIS: ('//', '//'), STRONG: ('**', '**'), MARK: ('__', '__'), STRIKE: ('~~', '~~'), VERBATIM: ("''", "''"), TAG: ('', ''), # No additional annotation (apart from the visible @) SUBSCRIPT: ('_{', '}'), SUPERSCRIPT: ('^{', '}'), } def dump_pre(self, tag, attrib, strings): # Indent and wrap with "'''" lines strings.insert(0, "'''\n") strings.append("'''\n") strings = self.dump_indent(tag, attrib, strings) return strings def dump_h(self, tag, attrib, strings): # Wrap line with number of "==" level = int(attrib['level']) if level < 1: level = 1 elif level > 5: level = 5 tag = '='*(7 - level) strings.insert(0, tag + ' ') strings.append(' ' + tag) return strings def dump_link(self, tag, attrib, strings=None): assert 'href' in attrib, \ 'BUG: link misses href: %s "%s"' % (attrib, strings) href = attrib['href'] if not strings or href == u''.join(strings): if url_re.match(href): return (href,) # no markup needed else: return ('[[', href, ']]') else: return ('[[', href, '|') + tuple(strings) + (']]',) def dump_img(self, tag, attrib, strings=None): src = attrib['src'] alt = attrib.get('alt') opts = [] items = attrib.items() items.sort() # unit tests don't like random output for k, v in items: if k in ('src', 'alt') or k.startswith('_'): continue elif v: # skip None, "" and 0 data = url_encode(unicode(v), mode=URL_ENCODE_DATA) opts.append('%s=%s' % (k, data)) if opts: src += '?%s' % '&'.join(opts) if alt: return ('{{', src, '|', alt, '}}') else: return('{{', src, '}}') # TODO use text for caption (with full recursion) def dump_object(self, tag, attrib, strings=None): #~ logger.debug("Dumping object: %s, %s", attrib, strings) assert "type" in attrib, "Undefined type of object" opts = [] for key, value in attrib.items(): if key in ('type', 'indent') or value is None: continue # double quotes are escaped by doubling them opts.append(' %s="%s"' % (key, str(value).replace('"', '""'))) if not strings: strings = [] return ['{{{', attrib['type'], ':'] + opts + ['\n'] + strings + ['}}}\n'] # TODO put content in attrib, use text for caption (with full recursion) # See img def dump_table(self, tag, attrib, strings): #~ print "Dumping table: %s, %s" % (attrib, strings) n = len(strings[0]) assert all(len(s) == n for s in strings), strings table = [] # result table rows = strings aligns, wraps = TableParser.get_options(attrib) maxwidths = TableParser.width2dim(rows) headsep = TableParser.headsep(maxwidths, aligns, x='|', y='-') rowline = lambda row: TableParser.rowline(row, maxwidths, aligns) # print table table += [TableParser.headline(rows[0], maxwidths, aligns, wraps)] table.append(headsep) table += [rowline(row) for row in rows[1:]] return map(lambda line: line+"\n", table) def dump_th(self, tag, attrib, strings): if not strings: return [''] # force empty cell else: strings = map(lambda s: s.replace('\n', '\\n').replace('|', '\\|'), strings) return [self._concat(strings)] def dump_td(self, tag, attrib, strings): if not strings: return [''] # force empty cell else: strings = map(lambda s: s.replace('\n', '\\n').replace('|', '\\|'), strings) strings = map(lambda s: s.replace('
    ', '\\n'), strings) return [self._concat(strings)] zim-0.65/zim/formats/__init__.py0000664000175000017500000013502212614742240016505 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg '''Package with source formats for pages. Each module in zim.formats should contains exactly one subclass of DumperClass and exactly one subclass of ParserClass (optional for export formats). These can be loaded by L{get_parser()} and L{get_dumper()} respectively. The requirement to have exactly one subclass per module means you can not import other classes that derive from these base classes directly into the module. For format modules it is safe to import '*' from this module. Parse tree structure ==================== Parse trees are build using the (c)ElementTree module (included in python 2.5 as xml.etree.ElementTree). It is basically a xml structure supporting a subset of "html like" tags. Supported tags: - page root element for grouping paragraphs - p for paragraphs - h for heading, level attribute can be 1..6 - pre for verbatim paragraphs (no further parsing in these blocks) - em for emphasis, rendered italic by default - strong for strong emphasis, rendered bold by default - mark for highlighted text, renderd with background color or underlined - strike for text that is removed, usually renderd as strike through - code for inline verbatim text - ul for bullet and checkbox lists - ol for numbered lists - li for list items - link for links, attribute href gives the target - img for images, attributes src, width, height an optionally href and alt - type can be used to control plugin functionality, e.g. type=equation - table for tables, attributes * aligns - comma separated values: right,left,center * wraps - 0 for not wrapped, 1 for auto-wrapped line display - thead for table header row - th for table header cell - trow for table row - td for table data cell Unlike html we respect line breaks and other whitespace as is. When rendering as html use the "white-space: pre" CSS definition to get the same effect. Since elements are based on the functional markup instead of visual markup it is not allowed to nest elements in arbitrary ways. TODO: allow links to be nested in other elements TODO: allow strike to have sub elements TODO: add HR element If a page starts with a h1 this heading is considered the page title, else we can fall back to the page name as title. NOTE: To avoid confusion: "headers" refers to meta data, usually in the form of rfc822 headers at the top of a page. But "heading" refers to a title or subtitle in the document. ''' import re import string import logging import types from zim.fs import Dir, File from zim.parsing import link_type, is_url_re, \ url_encode, url_decode, URL_ENCODE_READABLE, URL_ENCODE_DATA from zim.parser import Builder from zim.config import data_file, ConfigDict from zim.objectmanager import ObjectManager import zim.plugins logger = logging.getLogger('zim.formats') # Needed to determine RTL, but may not be available # if gtk bindings are not installed try: import pango except: pango = None logger.warn('Could not load pango - RTL scripts may look bad') try: import xml.etree.cElementTree as ElementTreeModule except: #pragma: no cover logger.warn('Could not load cElementTree, defaulting to ElementTree') import xml.etree.ElementTree as ElementTreeModule EXPORT_FORMAT = 1 IMPORT_FORMAT = 2 NATIVE_FORMAT = 4 TEXT_FORMAT = 8 # Used for "Copy As" menu - these all prove "text/plain" mimetype UNCHECKED_BOX = 'unchecked-box' CHECKED_BOX = 'checked-box' XCHECKED_BOX = 'xchecked-box' BULLET = '*' # FIXME make this 'bullet' FORMATTEDTEXT = 'zim-tree' FRAGMENT = 'zim-tree' HEADING = 'h' PARAGRAPH = 'p' VERBATIM_BLOCK = 'pre' # should be same as verbatim BLOCK = 'div' IMAGE = 'img' OBJECT = 'object' BULLETLIST = 'ul' NUMBEREDLIST = 'ol' LISTITEM = 'li' EMPHASIS = 'emphasis' # TODO change to "em" to be in line with html STRONG = 'strong' MARK = 'mark' VERBATIM = 'code' STRIKE = 'strike' SUBSCRIPT = 'sub' SUPERSCRIPT = 'sup' LINK = 'link' TAG = 'tag' ANCHOR = 'anchor' TABLE = 'table' HEADROW = 'thead' HEADDATA = 'th' TABLEROW = 'trow' TABLEDATA = 'td' BLOCK_LEVEL = (PARAGRAPH, HEADING, VERBATIM_BLOCK, BLOCK, OBJECT, IMAGE, LISTITEM, TABLE) _letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" def increase_list_iter(listiter): '''Get the next item in a list for a numbered list E.g if C{listiter} is C{"1"} this function returns C{"2"}, if it is C{"a"} it returns C{"b"}. @param listiter: the current item, either an integer number or single letter @returns: the next item, or C{None} ''' try: i = int(listiter) return str(i + 1) except ValueError: try: i = _letters.index(listiter) return _letters[i+1] except ValueError: # listiter is not a letter return None except IndexError: # wrap to start of list return _letters[0] def encode_xml(text): '''Encode text such that it can be used in xml @param text: label text as string @returns: encoded text ''' return text.replace('&', '&').replace('>', '>').replace('<', '<').replace('"', '"').replace("'", ''') def list_formats(type): if type == EXPORT_FORMAT: return ['HTML','LaTeX', 'Markdown (pandoc)', 'RST (sphinx)'] elif type == TEXT_FORMAT: return ['Text', 'Wiki', 'Markdown (pandoc)', 'RST (sphinx)'] else: assert False, 'TODO' def canonical_name(name): # "HTML" -> html # "Markdown (pandoc)" -> "markdown" # "Text" -> "plain" name = name.lower() if ' ' in name: name, _ = name.split(' ', 1) if name == 'text': return 'plain' else: return name def get_format(name): '''Returns the module object for a specific format.''' # If this method is removes, class names in formats/*.py can be made more explicit #~ print 'DEPRECATED: get_format() is deprecated in favor if get_parser() and get_dumper()' return get_format_module(name) def get_format_module(name): '''Returns the module object for a specific format @param name: the format name @returns: a module object ''' return zim.plugins.get_module('zim.formats.' + canonical_name(name)) def get_parser(name, *arg, **kwarg): '''Returns a parser object instance for a specific format @param name: format name @param arg: arguments to pass to the parser object @param kwarg: keyword arguments to pass to the parser object @returns: parser object instance (subclass of L{ParserClass}) ''' module = get_format_module(name) klass = zim.plugins.lookup_subclass(module, ParserClass) return klass(*arg, **kwarg) def get_dumper(name, *arg, **kwarg): '''Returns a dumper object instance for a specific format @param name: format name @param arg: arguments to pass to the dumper object @param kwarg: keyword arguments to pass to the dumper object @returns: dumper object instance (subclass of L{DumperClass}) ''' module = get_format_module(name) klass = zim.plugins.lookup_subclass(module, DumperClass) return klass(*arg, **kwarg) class ParseTree(object): '''Wrapper for zim parse trees.''' # No longer derives from ElementTree, internals are not private # TODO, also remove etree args from init # TODO, rename to FormattedText def __init__(self, *arg, **kwarg): self._etree = ElementTreeModule.ElementTree(*arg, **kwarg) self._object_cache = {} @property def hascontent(self): '''Returns True if the tree contains any content at all.''' root = self._etree.getroot() return bool(root.getchildren()) or (root.text and not root.text.isspace()) @property def ispartial(self): '''Returns True when this tree is a segment of a page (like a copy-paste buffer). ''' return self._etree.getroot().attrib.get('partial', False) @property def israw(self): '''Returns True when this is a raw tree (which is representation of TextBuffer, but not really valid). ''' return self._etree.getroot().attrib.get('raw', False) def extend(self, tree): # Do we need a deepcopy here ? myroot = self._etree.getroot() otherroot = tree._etree.getroot() if otherroot.text: children = myroot.getchildren() if children: last = children[-1] last.tail = (last.tail or '') + otherroot.text else: myroot.text = (myroot.text or '') + otherroot.text for element in otherroot.getchildren(): myroot.append(element) return self __add__ = extend def fromstring(self, string): '''Set the contents of this tree from XML representation.''' parser = ElementTreeModule.XMLTreeBuilder() parser.feed(string) root = parser.close() self._etree._setroot(root) return self # allow ParseTree().fromstring(..) def tostring(self): '''Serialize the tree to a XML representation''' from cStringIO import StringIO # Parent dies when we have attributes that are not a string for element in self._etree.getiterator('*'): for key in element.attrib.keys(): element.attrib[key] = str(element.attrib[key]) xml = StringIO() xml.write("\n") ElementTreeModule.ElementTree.write(self._etree, xml, 'utf-8') return xml.getvalue() def copy(self): # By using serialization we are absolutely sure all refs are new xml = self.tostring() try: return ParseTree().fromstring(xml) except: print ">>>", xml, "<<<" raise def _get_heading_element(self, level=1): root = self._etree.getroot() children = root.getchildren() if root.text and not root.text.isspace(): return None if children: first = children[0] if first.tag == 'h' and first.attrib['level'] >= level: return first return None def get_heading_level(self): heading_elem = self._get_heading_element() if heading_elem is not None: return int(heading_elem.attrib['level']) else: return None def get_heading(self, level=1): heading_elem = self._get_heading_element(level) if heading_elem is not None: return heading_elem.text else: return "" def set_heading(self, text, level=1): '''Set the first heading of the parse tree to 'text'. If the tree already has a heading of the specified level or higher it will be replaced. Otherwise the new heading will be prepended. ''' heading = self._get_heading_element(level) if heading is not None: heading.text = text else: root = self._etree.getroot() heading = ElementTreeModule.Element('h', {'level': level}) heading.text = text heading.tail = root.text root.text = None root.insert(0, heading) def pop_heading(self, level=-1): '''If the tree starts with a heading, remove it and any trailing whitespace. Will modify the tree. @returns: a 2-tuple of text and heading level or C{(None, None)} ''' root = self._etree.getroot() children = root.getchildren() if root.text and not root.text.isspace(): return None, None if children: first = children[0] if first.tag == 'h': mylevel = int(first.attrib['level']) if level == -1 or mylevel <= level: root.remove(first) if first.tail and not first.tail.isspace(): root.text = first.tail # Keep trailing text return first.text, mylevel else: return None, None else: return None, None else: return None, None def cleanup_headings(self, offset=0, max=6): '''Change the heading levels throughout the tree. This makes sure that al headings are nested directly under their parent (no gaps in the levels of the headings). Also you can set an offset for the top level and a max depth. ''' path = [] for heading in self._etree.getiterator('h'): level = int(heading.attrib['level']) # find parent header in path using old level while path and path[-1][0] >= level: path.pop() if not path: newlevel = offset+1 else: newlevel = path[-1][1] + 1 if newlevel > max: newlevel = max heading.attrib['level'] = newlevel path.append((level, newlevel)) def resolve_images(self, notebook=None, path=None): '''Resolves the source files for all images relative to a page path and adds a '_src_file' attribute to the elements with the full file path. ''' if notebook is None: for element in self._etree.getiterator('img'): filepath = element.attrib['src'] element.attrib['_src_file'] = File(filepath) else: for element in self._etree.getiterator('img'): filepath = element.attrib['src'] element.attrib['_src_file'] = notebook.resolve_file(element.attrib['src'], path) def unresolve_images(self): '''Undo effect of L{resolve_images()}, mainly intended for testing. ''' for element in self._etree.getiterator('img'): if '_src_file' in element.attrib: element.attrib.pop('_src_file') def encode_urls(self, mode=URL_ENCODE_READABLE): '''Calls encode_url() on all links that contain urls. See zim.parsing for details. Modifies the parse tree. ''' for link in self._etree.getiterator('link'): href = link.attrib['href'] if is_url_re.match(href): link.attrib['href'] = url_encode(href, mode=mode) if link.text == href: link.text = link.attrib['href'] def decode_urls(self, mode=URL_ENCODE_READABLE): '''Calls decode_url() on all links that contain urls. See zim.parsing for details. Modifies the parse tree. ''' for link in self._etree.getiterator('link'): href = link.attrib['href'] if is_url_re.match(href): link.attrib['href'] = url_decode(href, mode=mode) if link.text == href: link.text = link.attrib['href'] def count(self, text): '''Returns the number of occurences of 'text' in this tree.''' count = 0 for element in self._etree.getiterator(): if element.text: count += element.text.count(text) if element.tail: count += element.tail.count(text) return count def countre(self, regex): '''Returns the number of matches for a regular expression in this tree. ''' count = 0 for element in self._etree.getiterator(): if element.text: newstring, n = regex.subn('', element.text) count += n if element.tail: newstring, n = regex.subn('', element.tail) count += n return count def get_ends_with_newline(self): '''Checks whether this tree ends in a newline or not''' return self._get_element_ends_with_newline(self._etree.getroot()) def _get_element_ends_with_newline(self, element): if element.tail: return element.tail.endswith('\n') elif element.tag in ('li', 'h'): return True # implicit newline else: children = element.getchildren() if children: return self._get_element_ends_with_newline(children[-1]) # recurs elif element.text: return element.text.endswith('\n') else: return False # empty element like image def visit(self, visitor): '''Visit all nodes of this tree @note: If the visitor modifies the attrib dict on nodes, this will modify the tree. @param visitor: a L{Visitor} or L{Builder} object ''' try: self._visit(visitor, self._etree.getroot()) except VisitorStop: pass def _visit(self, visitor, node): try: if len(node): # Has children visitor.start(node.tag, node.attrib) if node.text: visitor.text(node.text) for child in node: self._visit(visitor, child) # recurs if child.tail: visitor.text(child.tail) visitor.end(node.tag) else: visitor.append(node.tag, node.attrib, node.text) except VisitorSkip: pass def find(self, tag): '''Find first occurence of C{tag} in the tree @returns: a L{Node} object or C{None} ''' for elt in self.findall(tag): return elt # return first else: return None def findall(self, tag): '''Find all occurences of C{tag} in the tree @param tag: tag name @returns: yields L{Node} objects ''' for elt in self._etree.getiterator(tag): yield Element.new_from_etree(elt) def replace(self, tag, func): '''Modify the tree by replacing all occurences of C{tag} by the return value of C{func}. @param tag: tag name @param func: function to generate replacement values. Function will be called as:: func(node) Where C{node} is a L{Node} object representing the subtree. If the function returns another L{Node} object or modifies C{node} and returns it, the subtree will be replaced by this new node. If the function raises L{VisitorSkip} the replace is skipped. If the function raises L{VisitorStop} the replacement of all nodes will stop. ''' try: self._replace(self._etree.getroot(), tag, func) except VisitorStop: pass def _replace(self, elt, tag, func): # Two-step replace in order to do items in order # of appearance. replacements = [] for i, child in enumerate(elt): if child.tag == tag: try: replacement = func(Element.new_from_etree(child)) except VisitorSkip: pass else: replacements.append((i, child, replacement)) elif len(child): self._replace(child, tag, func) # recurs else: pass if replacements: self._do_replace(elt, replacements) def _do_replace(self, elt, replacements): offset = 0 # offset due to replacements for i, child, node in replacements: i += offset if node is None or len(node) == 0: # Remove element tail = child.tail elt.remove(child) if tail: self._insert_text(elt, i, tail) offset -= 1 elif isinstance(node, Element): # Just replace elements newchild = self._node_to_etree(node) newchild.tail = child.tail elt[i] = newchild elif isinstance(node, DocumentFragment): # Insert list of elements and text tail = child.tail elt.remove(child) offset -= 1 for item in node: if isinstance(item, basestring): self._insert_text(elt, i, item) else: assert isinstance(item, Element) elt.insert(i, self._node_to_etree(item)) i += 1 offset += 1 if tail: self._insert_text(elt, i, tail) else: raise TypeError, 'BUG: invalid replacement result' @staticmethod def _node_to_etree(node): builder = ParseTreeBuilder() node.visit(builder) return builder._b.close() def _insert_text(self, elt, i, text): if i == 0: if elt.text: elt.text += text else: elt.text = text else: prev = elt[i-1] if prev.tail: prev.tail += text else: prev.tail = text def get_objects(self, type=None): '''Generator that yields all custom objects in the tree, or all objects of a certain type. @param type: object type to return or C{None} to get all @returns: yields objects (as provided by L{ObjectManager}) ''' for elt in self._etree.getiterator(OBJECT): if type and elt.attrib.get('type') != type: pass else: obj = self._get_object(elt) if obj is not None: yield obj def _get_object(self, elt): ## TODO optimize using self._object_cache or new API for ## passing on objects in the tree type = elt.attrib.get('type') if elt.tag == OBJECT and type: return ObjectManager.get_object(type, elt.attrib, elt.text) else: return None class VisitorStop(Exception): '''Exception to be raised to cancel a visitor action''' pass class VisitorSkip(Exception): '''Exception to be raised when the visitor should skip a leaf node and not decent into it. ''' pass class Visitor(object): '''Conceptual opposite of a builder, but with same API. Used to walk nodes in a parsetree and call callbacks for each node. See e.g. L{ParseTree.visit()}. ''' def start(self, tag, attrib=None): '''Start formatted region Visitor objects can raise two exceptions in this method to influence the tree traversal: 1. L{VisitorStop} will cancel the current parsing, but without raising an error. So code implementing a visit method should catch this. 2. L{VisitorSkip} can be raised when the visitor wants to skip a node, and should prevent the implementation from further decending into this node @note: If the visitor modifies the attrib dict on nodes, this will modify the tree. If this is not intended, the implementation needs to take care to copy the attrib to break the reference. @param tag: the tag name @param attrib: optional dict with attributes @implementation: optional for subclasses ''' pass def text(self, text): '''Append text @param text: text to be appended as string @implementation: optional for subclasses ''' pass def end(self, tag): '''End formatted region @param tag: the tag name @raises AssertionError: when tag does not match current state @implementation: optional for subclasses ''' pass def append(self, tag, attrib=None, text=None): '''Convenience function to open a tag, append text and close it immediatly. Can raise L{VisitorStop} or L{VisitorSkip}, see C{start()} for the conditions. @param tag: the tag name @param attrib: optional dict with attributes @param text: formatted text @implementation: optional for subclasses, default implementation calls L{start()}, L{text()}, and L{end()} ''' self.start(tag, attrib) if text is not None: self.text(text) self.end(tag) class ParseTreeBuilder(Builder): '''Builder object that builds a L{ParseTree}''' def __init__(self, partial=False): self.partial = partial self._b = ElementTreeModule.TreeBuilder() self.stack = [] #: keeps track of current open elements self._last_char = None def get_parsetree(self): '''Returns the constructed L{ParseTree} object. Can only be called once, after calling this method the object can not be re-used. ''' root = self._b.close() if self.partial: root.attrib['partial'] = True return zim.formats.ParseTree(root) def start(self, tag, attrib=None): self._b.start(tag, attrib) self.stack.append(tag) if tag in BLOCK_LEVEL: self._last_char = None def text(self, text): self._last_char = text[-1] # FIXME hack for backward compat if self.stack and self.stack[-1] in (HEADING, LISTITEM): text = text.strip('\n') self._b.data(text) def end(self, tag): if tag != self.stack[-1]: raise AssertionError, 'Unmatched tag closed: %s' % tag if tag in BLOCK_LEVEL: if self._last_char is not None and not self.partial: #~ assert self._last_char == '\n', 'Block level text needs to end with newline' if self._last_char != '\n' and tag not in (HEADING, LISTITEM): self._b.data('\n') # FIXME check for HEADING LISTITME for backward compat # TODO if partial only allow missing \n at end of tree, # delay message and trigger if not followed by get_parsetree ? self._b.end(tag) self.stack.pop() # FIXME hack for backward compat if tag == HEADING: self._b.data('\n') self._last_char = None def append(self, tag, attrib=None, text=None): if tag in BLOCK_LEVEL: if text and not text.endswith('\n'): text += '\n' # FIXME hack for backward compat if text and tag in (HEADING, LISTITEM): text = text.strip('\n') self._b.start(tag, attrib) if text: self._b.data(text) self._b.end(tag) # FIXME hack for backward compat if tag == HEADING: self._b.data('\n') self._last_char = None count_eol_re = re.compile(r'\n+\Z') split_para_re = re.compile(r'((?:^[ \t]*\n){2,})', re.M) class OldParseTreeBuilder(object): '''This class supplies an alternative for xml.etree.ElementTree.TreeBuilder which cleans up the tree on the fly while building it. The main use is to normalize the tree that is produced by the editor widget, but it can also be used on other "dirty" interfaces. This builder takes care of the following issues: - Inline tags ('emphasis', 'strong', 'h', etc.) can not span multiple lines - Tags can not contain only whitespace - Tags can not be empty (with the exception of the 'img' tag) - There should be an empty line before each 'h', 'p' or 'pre' (with the exception of the first tag in the tree) - The 'p' and 'pre' elements should always end with a newline ('\\n') - Each 'p', 'pre' and 'h' should be postfixed with a newline ('\\n') (as a results 'p' and 'pre' are followed by an empty line, the 'h' does not end in a newline itself, so it is different) - Newlines ('\\n') after a
  • alement are removed (optional) - The element '_ignore_' is silently ignored ''' ## TODO TODO this also needs to be based on Builder ## def __init__(self, remove_newlines_after_li=True): assert remove_newlines_after_li, 'TODO' self._stack = [] # stack of elements for open tags self._last = None # last element opened or closed self._data = [] # buffer with data self._tail = False # True if we are after an end tag self._seen_eol = 2 # track line ends on flushed data # starts with "2" so check is ok for first top level element def start(self, tag, attrib=None): if tag == '_ignore_': return self._last elif tag == 'h': self._flush(need_eol=2) elif tag in ('p', 'pre'): self._flush(need_eol=1) else: self._flush() #~ print 'START', tag if tag == 'h': if not (attrib and 'level' in attrib): logger.warn('Missing "level" attribute for heading') attrib = attrib or {} attrib['level'] = 1 elif tag == 'link': if not (attrib and 'href' in attrib): logger.warn('Missing "href" attribute for link') attrib = attrib or {} attrib['href'] = "404" # TODO check other mandatory properties ! if attrib: self._last = ElementTreeModule.Element(tag, attrib) else: self._last = ElementTreeModule.Element(tag) if self._stack: self._stack[-1].append(self._last) else: assert tag == 'zim-tree', 'root element needs to be "zim-tree"' self._stack.append(self._last) self._tail = False return self._last def end(self, tag): if tag == '_ignore_': return None elif tag in ('p', 'pre'): self._flush(need_eol=1) else: self._flush() #~ print 'END', tag self._last = self._stack[-1] assert self._last.tag == tag, \ "end tag mismatch (expected %s, got %s)" % (self._last.tag, tag) self._tail = True if len(self._stack) > 1 and not ( tag in (IMAGE, OBJECT, HEADDATA, TABLEDATA) or (self._last.text and not self._last.text.isspace()) or self._last.getchildren() ): # purge empty tags if self._last.text and self._last.text.isspace(): self._append_to_previous(self._last.text) empty = self._stack.pop() self._stack[-1].remove(empty) children = self._stack[-1].getchildren() if children: self._last = children[-1] if not self._last.tail is None: self._data = [self._last.tail] self._last.tail = None else: self._last = self._stack[-1] self._tail = False if not self._last.text is None: self._data = [self._last.text] self._last.text = None return empty else: return self._stack.pop() def data(self, text): assert isinstance(text, basestring) self._data.append(text) def append(self, tag, text): self.start(tag) self.data(text) self.end(tag) def _flush(self, need_eol=0): # need_eol makes sure previous data ends with \n #~ print 'DATA:', self._data text = ''.join(self._data) # Fix trailing newlines if text: m = count_eol_re.search(text) if m: self._seen_eol = len(m.group(0)) else: self._seen_eol = 0 if need_eol > self._seen_eol: text += '\n' * (need_eol - self._seen_eol) self._seen_eol = need_eol # Fix prefix newlines if self._tail and self._last.tag in ('h', 'p') \ and not text.startswith('\n'): if text: text = '\n' + text else: text = '\n' self._seen_eol = 1 elif self._tail and self._last.tag == 'li' \ and text.startswith('\n'): text = text[1:] if not text.strip('\n'): self._seen_eol -=1 if text: assert not self._last is None, 'data seen before root element' self._data = [] # Tags that are not allowed to have newlines if not self._tail and self._last.tag in ( 'h', 'emphasis', 'strong', 'mark', 'strike', 'code'): # assume no nested tags in these types ... if self._seen_eol: text = text.rstrip('\n') self._data.append('\n' * self._seen_eol) self._seen_eol = 0 lines = text.split('\n') for line in lines[:-1]: assert self._last.text is None, "internal error (text)" assert self._last.tail is None, "internal error (tail)" if line and not line.isspace(): self._last.text = line self._last.tail = '\n' attrib = self._last.attrib.copy() self._last = ElementTreeModule.Element(self._last.tag, attrib) self._stack[-2].append(self._last) self._stack[-1] = self._last else: self._append_to_previous(line + '\n') assert self._last.text is None, "internal error (text)" self._last.text = lines[-1] else: # TODO split paragraphs if self._tail: assert self._last.tail is None, "internal error (tail)" self._last.tail = text else: assert self._last.text is None, "internal error (text)" self._last.text = text else: self._data = [] def close(self): assert len(self._stack) == 0, 'missing end tags' assert not self._last is None and self._last.tag == 'zim-tree', 'missing root element' return self._last def _append_to_previous(self, text): '''Add text before current element''' parent = self._stack[-2] children = parent.getchildren()[:-1] if children: if children[-1].tail: children[-1].tail = children[-1].tail + text else: children[-1].tail = text else: if parent.text: parent.text = parent.text + text else: parent.text = text class ParserClass(object): '''Base class for parsers Each format that can be used natively should define a class 'Parser' which inherits from this base class. ''' def parse(self, input): '''ABSTRACT METHOD: needs to be overloaded by sub-classes. This method takes a text or an iterable with lines and returns a ParseTree object. ''' raise NotImplementedError @classmethod def parse_image_url(self, url): '''Parse urls style options for images like "foo.png?width=500" and returns a dict with the options. The base url will be in the dict as 'src'. ''' i = url.find('?') if i > 0: attrib = {'src': url[:i]} for option in url[i+1:].split('&'): if option.find('=') == -1: logger.warn('Mal-formed options in "%s"' , url) break k, v = option.split('=', 1) if k in ('width', 'height', 'type', 'href'): if len(v) > 0: value = url_decode(v, mode=URL_ENCODE_DATA) attrib[str(k)] = value # str to avoid unicode key else: logger.warn('Unknown attribute "%s" in "%s"', k, url) return attrib else: return {'src': url} import collections DumperContextElement = collections.namedtuple('DumperContextElement', ('tag', 'attrib', 'text')) # FIXME unify this class with a generic Element class (?) class DumperClass(Visitor): '''Base class for dumper classes. Dumper classes serialize the content of a parse tree back to a text representation of the page content. Therefore this class implements the visitor API, so it can be used with any parse tree implementation or parser object that supports this API. To implement a dumper class, you need to define handlers for all tags that can appear in a page. Tags that are represented by a simple prefix and postfix string can be defined in the dictionary C{TAGS}. For example to define the italic tag in html output the dictionary should contain a definition like: C{EMPHASIS: ('', '')}. For tags that require more complex logic you can define a method to format the tag. Typical usage is to format link attributes in such a method. The method name should be C{dump_} + the name of the tag, e.g. C{dump_link()} for links (see the constants with tag names for the other tags). Such a sump method will get 3 arguments: the tag name itself, a dictionary with the tag attributes and a list of strings that form the tag content. The method should return a list of strings that represents the formatted text. This base class takes care of a stack of nested formatting tags and when a tag is closed either picks the appropriate prefix and postfix from C{TAGS} or calls the corresponding C{dump_} method. As a result tags are serialized depth-first. @ivar linker: the (optional) L{Linker} object, used to resolve links @ivar template_options: a L{ConfigDict} with options that may be set in a template (so inherently not safe !) to control the output style. Formats using this need to define the supported keys in the dict C{TEMPLATE_OPTIONS}. @ivar context: the stack of open tags maintained by this class. Can be used in C{dump_} methods to inspect the parent scope of the format. Elements on this stack have "tag", "attrib" and "text" attributes. Keep in mind that the parent scope is not yet complete when a tag is serialized. ''' TAGS = {} #: dict mapping formatting tags to 2-tuples of a prefix and a postfix string TEMPLATE_OPTIONS = {} #: dict mapping ConfigDefinitions for template options def __init__(self, linker=None, template_options=None): self.linker = linker self.template_options = ConfigDict(template_options) self.template_options.define(self.TEMPLATE_OPTIONS) self.context = [] self._text = [] def dump(self, tree): '''Convenience methods to dump a given tree. @param tree: a parse tree object that supports a C{visit()} method ''' # FIXME - issue here is that we need to reset state - should be in __init__ self._text = [] self.context = [DumperContextElement(None, None, self._text)] tree.visit(self) if len(self.context) != 1: raise AssertionError, 'Unclosed tags on tree: %s' % self.context[-1].tag #~ import pprint; pprint.pprint(self._text) return self.get_lines() # FIXME - maybe just return text ? def get_lines(self): '''Return the dumped content as a list of lines Should only be called after closing the top level element ''' return u''.join(self._text).splitlines(1) def start(self, tag, attrib=None): if attrib: attrib = attrib.copy() # Ensure dumping does not change tree self.context.append(DumperContextElement(tag, attrib, [])) def text(self, text): assert not text is None if self.context[-1].tag != OBJECT: text = self.encode_text(self.context[-1].tag, text) self.context[-1].text.append(text) def end(self, tag): if not tag or tag != self.context[-1].tag: raise AssertionError, 'Unexpected tag closed: %s' % tag _, attrib, strings = self.context.pop() if tag in self.TAGS: assert strings, 'Can not append empty %s element' % tag start, end = self.TAGS[tag] strings.insert(0, start) strings.append(end) elif tag == FORMATTEDTEXT: pass else: try: method = getattr(self, 'dump_'+tag) except AttributeError: raise AssertionError, 'BUG: Unknown tag: %s' % tag strings = method(tag, attrib, strings) #~ try: #~ u''.join(strings) #~ except: #~ print "BUG: %s returned %s" % ('dump_'+tag, strings) if strings is not None: self.context[-1].text.extend(strings) def append(self, tag, attrib=None, text=None): strings = None if tag in self.TAGS: assert text is not None, 'Can not append empty %s element' % tag start, end = self.TAGS[tag] text = self.encode_text(tag, text) strings = [start, text, end] elif tag == FORMATTEDTEXT: if text is not None: strings = [self.encode_text(tag, text)] else: if attrib: attrib = attrib.copy() # Ensure dumping does not change tree try: method = getattr(self, 'dump_'+tag) except AttributeError: raise AssertionError, 'BUG: Unknown tag: %s' % tag if text is None: strings = method(tag, attrib, []) elif tag == OBJECT: strings = method(tag, attrib, [text]) else: strings = method(tag, attrib, [self.encode_text(tag, text)]) if strings is not None: self.context[-1].text.extend(strings) def encode_text(self, tag, text): '''Optional method to encode text elements in the output @note: Do not apply text encoding in the C{dump_} methods, the list of strings given there may contain prefix and postfix formatting of nested tags. @param tag: formatting tag @param text: text to be encoded @returns: encoded text @implementation: optional, default just returns unmodified input ''' return text def prefix_lines(self, prefix, strings): '''Convenience method to wrap a number of lines with e.g. an indenting sequence. @param prefix: a string to prefix each line @param strings: a list of pieces of text @returns: a new list of lines, each starting with prefix ''' lines = u''.join(strings).splitlines(1) return [prefix + l for l in lines] def dump_object(self, tag, attrib, strings=None): '''Dumps object using proper ObjectManager''' format = str(self.__class__.__module__).split('.')[-1] if 'type' in attrib: obj = ObjectManager.get_object(attrib['type'], attrib, u''.join(strings)) output = obj.dump(format, self, self.linker) if isinstance(output, basestring): return [output] elif output is not None: return output return self.dump_object_fallback(tag, attrib, strings) # TODO put content in attrib, use text for caption (with full recursion) # See img def dump_object_fallback(self, tag, attrib, strings=None): '''Method to serialize objects that do not have their own handler for this format. @implementation: must be implemented in sub-classes ''' raise NotImplementedError def isrtl(self, text): '''Check for Right To Left script @param text: the text to check @returns: C{True} if C{text} starts with characters in a RTL script, or C{None} if direction is not determined. ''' if pango is None: return None # It seems the find_base_dir() function is not documented in the # python language bindings. The Gtk C code shows the signature: # # pango.find_base_dir(text, length) # # It either returns a direction, or NEUTRAL if e.g. text only # contains punctuation but no real characters. dir = pango.find_base_dir(text, len(text)) if dir == pango.DIRECTION_NEUTRAL: return None else: return dir == pango.DIRECTION_RTL class BaseLinker(object): '''Base class for linker objects Linker object translate links in zim pages to (relative) URLs. This is used when exporting data to resolve links. Relative URLs start with "./" or "../" and should be interpreted in the same way as in HTML. Both URLs and relative URLs are already URL encoded. ''' def link(self, link): '''Returns an url for a link in a zim page This method is used to translate links of any type. @param link: link to be translated @returns: url, uri, or relative path context of this linker @implementation: must be implemented by child classes ''' raise NotImplementedError def img(self, src): '''Returns an url for image file 'src' @implementation: must be implemented by child classes ''' raise NotImplementedError #~ def icon(self, name): #~ '''Returns an url for an icon #~ @implementation: must be implemented by child classes #~ ''' #~ raise NotImplementedError def resource(self, path): '''Return an url for template resources @implementation: must be implemented by child classes ''' raise NotImplementedError def resolve_source_file(self, link): '''Find the source file for an attachment Used e.g. by the latex format to find files for equations to be inlined. Do not use this method to resolve links, the file given here might be temporary and is not guaranteed to be available after the export. @returns: a L{File} object or C{None} if no file was found @implementation: must be implemented by child classes ''' raise NotImplementedError def page_object(self, path): '''Turn a L{Path} object in a relative link or URI''' raise NotImplementedError def file_object(self, file): '''Turn a L{File} object in a relative link or URI @implementation: must be implemented by child classes ''' raise NotImplementedError class StubLinker(BaseLinker): '''Linker used for testing - just gives back the link as it was parsed. DO NOT USE outside of testing. ''' def __init__(self, source_dir=None): self.source_dir = source_dir def link(self, link): type = link_type(link) if type == 'mailto' and not link.startswith('mailto:'): return 'mailto:' + link elif type == 'interwiki': return 'interwiki:' + link else: return link def img(self, src): return src #~ def icon(self, name): #~ return 'icon:' + name def resource(self, path): return path def resolve_source_file(self, link): if self.source_dir: return self.source_dir.file(link) else: return None def page_object(self, path): return path.name def file_object(self, file): return file.name class Node(list): '''Base class for DOM-like access to the document structure. @note: This class is not optimized for keeping large structures in memory. @ivar tag: tag name @ivar attrib: dict with attributes ''' __slots__ = ('tag', 'attrib') def __init__(self, tag, attrib=None, *content): self.tag = tag self.attrib = attrib if content: self.extend(content) @classmethod def new_from_etree(klass, elt): obj = klass(elt.tag, dict(elt.attrib)) if elt.text: obj.append(elt.text) for child in elt: subnode = klass.new_from_etree(child) # recurs obj.append(subnode) if child.tail: obj.append(child.tail) return obj def get(self, key, default=None): if self.attrib: return self.attrib.get(key, default) else: return default def set(self, key, value): if not self.attrib: self.attrib = {} self.attrib[key] = value def append(self, item): if isinstance(item, DocumentFragment): list.extend(self, item) else: list.append(self, item) def gettext(self): '''Get text as string Ignores any markup and attributes and simply returns textual content. @note: do _not_ use as replacement for exporting to plain text @returns: string ''' strings = self._gettext() return u''.join(strings) def _gettext(self): strings = [] for item in self: if isinstance(item, basestring): strings.append(item) else: strings.extend(item._gettext()) return strings def toxml(self): strings = self._toxml() return u''.join(strings) def _toxml(self): strings = [] if self.attrib: strings.append('<%s' % self.tag) for key in sorted(self.attrib): strings.append(' %s="%s"' % (key, encode_xml(self.attrib[key]))) strings.append('>') else: strings.append("<%s>" % self.tag) for item in self: if isinstance(item, basestring): strings.append(encode_xml(item)) else: strings.extend(item._toxml()) strings.append("" % self.tag) return strings __repr__ = toxml def visit(self, visitor): if len(self) == 1 and isinstance(self[0], basestring): visitor.append(self.tag, self.attrib, self[0]) else: visitor.start(self.tag, self.attrib) for item in self: if isinstance(item, basestring): visitor.text(item) else: item.visit(visitor) visitor.end(self.tag) class Element(Node): '''Element class for DOM-like access''' pass class DocumentFragment(Node): '''Document fragment class for DOM-like access''' def __init__(self, *content): self.tag = FRAGMENT self.attrib = None if content: self.extend(content) class TableParser(): '''Common functions for converting a table from its' xml structure to another format''' @staticmethod def width2dim(lines): ''' Calculates the characters on each column and return list of widths :param lines: 2-dim multiline rows :return: the number of characters of the longest cell-value by column ''' widths = [max(map(len, line)) for line in zip(*lines)] return widths @staticmethod def width3dim(lines): ''' Calculates the characters on each column and return list of widths :param lines: 3-dim multiline rows :return: the number of characters of the longest cell-value by column ''' lines = reduce(lambda x, y: x+y, lines) widths = [max(map(len, line)) for line in zip(*lines)] return widths @staticmethod def convert_to_multiline_cells(rows): ''' Each cell of a list of list is splitted by "\n" and a 3-dimensional list is returned, whereas each tuple represents a line and multiple lines represents a row and multiple rows represents the table c11a = Cell in Row 1 in Column 1 in first = a line :param strings: format like (('c11a \n c11b', 'c12a \n c12b'), ('c21', 'c22a \n 22b')) :return: format like (((c11a, c12a), (c11b, c12b)), ((c21, c22a), ('', c22b))) ''' multi_rows = [map(lambda cell: cell.split("\n"), row) for row in rows] # grouping by line, not by row strings = [map(lambda *line: map(lambda val: val if val is not None else '', line), *row) for row in multi_rows] return strings @staticmethod def get_options(attrib): ''' Lists the attributes as tuple :param attrib: :return: tuple of attributes ''' aligns = attrib['aligns'].split(',') wraps = map(int, attrib['wraps'].split(',')) return aligns, wraps @staticmethod def rowsep(maxwidths, x='+', y='-'): ''' Displays a row separator example: rowsep((3,0), '-', '+') -> +-----+--+ :param maxwidths: list of column lengths :param x: point-separator :param y: line-separator :return: a textline ''' return x + x.join(map(lambda width: (width+2) * y, maxwidths)) + x @staticmethod def headsep(maxwidths, aligns, x='|', y='-'): ''' Displays a header separation with alignment infos example: rowsep((3,0), '-', '+') -> +-----+--+ :param maxwidths: list of column lengths :param aligns: list of alignments :param x: point-separator :param y: line-separator :return: a textline ''' cells = [] for width, align in zip(maxwidths, aligns): line = width * y if align == 'left': cell = ':' + line + y elif align == 'right': cell = y + line + ':' elif align == 'center': cell = ':' + line + ':' else: cell = y + line + y cells.append(cell) return x + x.join(cells) + x @staticmethod def headline(row, maxwidths, aligns, wraps, x='|', y=' '): ''' Displays a headerline line in text format :param row: tuple of cells :param maxwidths: list of column length :param aligns: list of alignments :param x: point-separator :param y: space-separator :return: a textline ''' row = TableParser.alignrow(row, maxwidths, aligns, y) cells = [] for val, wrap in zip(row, wraps): if wrap == 1: val = val[:-1]+'<' cells.append(val) return x + x.join(cells) + x @staticmethod def rowline(row, maxwidths, aligns, x='|', y=' '): ''' Displays a normal column line in text format example: rowline((3,0), (left, left), '+','-') -> +-aa--+--+ :param row: tuple of cells :param maxwidths: list of column length :param aligns: list of alignments :param x: point-separator :param y: space-separator :return: a textline ''' cells = TableParser.alignrow(row, maxwidths, aligns, y) return x + x.join(cells) + x @staticmethod def alignrow(row, maxwidths, aligns, y=' '): ''' Formats a row with the right alignments :param row: tuple of cells :param maxwidths: list of column length :param aligns: list of alignments :param x: point-separator :param y: space-separator :return: a textline ''' cells = [] for val, align, maxwidth in zip(row, aligns, maxwidths): if align == 'left': (lspace, rspace) = (1, maxwidth - len(val) + 1) elif align == 'right': (lspace, rspace) = (maxwidth - len(val) + 1, 1) elif align == 'center': lspace = (maxwidth - len(val)) / 2 + 1 rspace = (maxwidth - lspace - len(val) + 2) else: (lspace, rspace) = (1, maxwidth - len(val) + 1) cells.append(lspace * y + val + rspace * y) return cells zim-0.65/zim/formats/plain.py0000664000175000017500000001351112614760434016054 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''This module handles parsing and dumping input in plain text''' import re import zim.parser from zim.parser import fix_line_end, Rule from zim.formats import * from zim.parsing import url_re info = { 'name': 'plain', 'desc': 'Plain text', 'mimetype': 'text/plain', 'extension': 'txt', 'native': False, 'import': True, 'export': True, 'usebase': True, } class Parser(ParserClass): # TODO parse constructs like *bold* and /italic/ same as in email, # but do not remove the "*" and "/", just display text 1:1 # TODO also try at least to parse bullet and checkbox lists # common base class with wiki format # TODO parse markdown style headers def parse(self, input, partial=False): if not isinstance(input, basestring): input = ''.join(input) if not partial: input = fix_line_end(input) parser = zim.parser.Parser( Rule(LINK, url_re.r, process=self.parse_url) # FIXME need .r atribute because url_re is a Re object ) builder = ParseTreeBuilder(partial=partial) builder.start(FORMATTEDTEXT) parser(builder, input) builder.end(FORMATTEDTEXT) return builder.get_parsetree() @staticmethod def parse_url(builder, text): builder.append(LINK, {'href': text}, text) class Dumper(DumperClass): # We dump more constructs than we can parse. Reason for this # is to ensure dumping a page to plain text will still be # readable. BULLETS = { UNCHECKED_BOX: u'[ ]', XCHECKED_BOX: u'[x]', CHECKED_BOX: u'[*]', BULLET: u'*', } # No additional formatting for these tags, otherwise copy-pasting # as plain text is no longer plain text TAGS = { EMPHASIS: ('', ''), STRONG: ('', ''), MARK: ('', ''), STRIKE: ('', ''), VERBATIM: ('', ''), TAG: ('', ''), SUBSCRIPT: ('', ''), SUPERSCRIPT: ('', ''), } def dump_indent(self, tag, attrib, strings): # Prefix lines with one or more tabs if attrib and 'indent' in attrib: prefix = '\t' * int(attrib['indent']) return self.prefix_lines(prefix, strings) # TODO enforces we always end such a block with \n unless partial else: return strings dump_p = dump_indent dump_div = dump_indent dump_pre = dump_indent def dump_h(self, tag, attrib, strings): # Markdown style headers level = int(attrib['level']) if level < 1: level = 1 elif level > 5: level = 5 if level in (1, 2): # setext-style headers for lvl 1 & 2 if level == 1: char = '=' else: char = '-' heading = u''.join(strings) underline = char * len(heading) return [heading + '\n', underline] else: # atx-style headers for deeper levels tag = '#' * level strings.insert(0, tag + ' ') return strings def dump_list(self, tag, attrib, strings): if 'indent' in attrib: # top level list with specified indent prefix = '\t' * int(attrib['indent']) return self.prefix_lines('\t', strings) elif self.context[-1].tag in (BULLETLIST, NUMBEREDLIST): # indent sub list prefix = '\t' return self.prefix_lines('\t', strings) else: # top level list, no indent return strings dump_ul = dump_list dump_ol = dump_list def dump_li(self, tag, attrib, strings): # Here is some logic to figure out the correct bullet character # depends on parent list element # TODO accept multi-line content here - e.g. nested paras if self.context[-1].tag == BULLETLIST: if 'bullet' in attrib \ and attrib['bullet'] in self.BULLETS: bullet = self.BULLETS[attrib['bullet']] else: bullet = self.BULLETS[BULLET] elif self.context[-1].tag == NUMBEREDLIST: iter = self.context[-1].attrib.get('_iter') if not iter: # First item on this level iter = self.context[-1].attrib.get('start', 1) bullet = iter + '.' self.context[-1].attrib['_iter'] = increase_list_iter(iter) or '1' else: # HACK for raw tree from pageview # support indenting # support any bullet type (inc numbered) bullet = attrib.get('bullet', BULLET) if bullet in self.BULLETS: bullet = self.BULLETS[attrib['bullet']] # else assume it is numbered.. if 'indent' in attrib: prefix = int(attrib['indent']) * '\t' bullet = prefix + bullet return (bullet, ' ') + tuple(strings) + ('\n',) def dump_link(self, tag, attrib, strings=None): # Just plain text, either text of link, or link href assert 'href' in attrib, \ 'BUG: link misses href: %s "%s"' % (attrib, strings) href = attrib['href'] if strings: return strings else: return href def dump_img(self, tag, attrib, strings=None): # Just plain text, either alt text or src src = attrib['src'] alt = attrib.get('alt') if alt: return alt else: return src def dump_object_fallback(self, tag, attrib, strings): return strings def dump_table(self, tag, attrib, strings): table = [] # result table aligns, _wraps = TableParser.get_options(attrib) rows = TableParser.convert_to_multiline_cells(strings) maxwidths = TableParser.width3dim(rows) rowsep = lambda y: TableParser.rowsep(maxwidths, x='+', y=y) rowline = lambda row: TableParser.rowline(row, maxwidths, aligns) # print table table.append(rowsep('-')) table += [rowline(line) for line in rows[0]] table.append(rowsep('=')) for row in rows[1:]: table += [rowline(line) for line in row] table.append(rowsep('-')) return map(lambda line: line+"\n", table) @staticmethod def _concat(s): return s if isinstance(s, basestring) else ''.join(s) def dump_thead(self, tag, attrib, strings): return [ strings ] # HACK to keep row structure def dump_trow(self, tag, attrib, strings): return [ strings ] # HACK to keep row structure def dump_th(self, tag, attrib, strings): strings = [s.replace('|', '∣') for s in strings] return [self._concat(strings)] def dump_td(self, tag, attrib, strings): strings = [s.replace('|', '∣') for s in strings] return [self._concat(strings)] zim-0.65/zim/formats/markdown.py0000664000175000017500000000720212614760555016577 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012,2013 Jaap Karssenberg '''This module handles dumping markdown text with pandoc extensions''' # OPEN ISSUES # - how to deal with indented paragraphs ? # in pandoc indent is verbatim, so now all indent is dropped # - how to deal with image re-size ? # - how to deal with tags / anchors ? # - check does zim always produce a blank line before a heading ? # - add \ before line ends to match line breaks from user import re from zim.formats import * from zim.parsing import url_re from zim.formats.plain import Dumper as TextDumper info = { 'name': 'markdown', 'desc': 'Markdown Text (pandoc)', 'mimetype': 'text/x-markdown', 'extension': 'markdown', # No official file extension, but this is often used 'native': False, 'import': False, 'export': True, 'usebase': True, } class Dumper(TextDumper): # Inherit from wiki format Dumper class, only overload things that # are different BULLETS = { UNCHECKED_BOX: u'* \u2610', XCHECKED_BOX: u'* \u2612', CHECKED_BOX: u'* \u2611', BULLET: u'*', } TAGS = { EMPHASIS: ('*', '*'), STRONG: ('**', '**'), MARK: ('__', '__'), # OPEN ISSUE: not availalbe in pandoc STRIKE: ('~~', '~~'), VERBATIM: ("``", "``"), TAG: ('', ''), # No additional annotation (apart from the visible @) SUBSCRIPT: ('~', '~'), SUPERSCRIPT: ('^', '^'), } def dump(self, tree): assert self.linker, 'Markdown dumper needs a linker object' return TextDumper.dump(self, tree) def dump_indent(self, tag, attrib, strings): # OPEN ISSUE: no indent for para return strings dump_p = dump_indent dump_div = dump_indent def dump_list(self, tag, attrib, strings): # OPEN ISSUE: no indent for lists if 'indent' in attrib: del attrib['indent'] strings = TextDumper.dump_list(self, tag, attrib, strings) if self.context[-1].tag in (BULLETLIST, NUMBEREDLIST): # sub-list return strings else: # top level list, wrap in empty lines strings.insert(0, '\n') strings.append('\n') return strings dump_ul = dump_list dump_ol = dump_list def dump_pre(self, tag, attrib, strings): # OPEN ISSUE: no indent for verbatim blocks return self.prefix_lines('\t', strings) def dump_link(self, tag, attrib, strings=None): assert 'href' in attrib, \ 'BUG: link misses href: %s "%s"' % (attrib, strings) href = self.linker.link(attrib['href']) text = u''.join(strings) or href if href == text and url_re.match(href): return ['<', href, '>'] else: return ['[%s](%s)' % (text, href)] def dump_img(self, tag, attrib, strings=None): # OPEN ISSUE: image properties used in zim not supported in pandoc src = self.linker.img(attrib['src']) text = attrib.get('alt', '') return ['![%s](%s)' % (text, src)] def dump_object_fallback(self, tag, attrib, strings=None): # dump object as verbatim block return self.prefix_lines('\t', strings) def dump_table(self, tag, attrib, strings): table = [] # result table rows = strings aligns, _wraps = TableParser.get_options(attrib) maxwidths = TableParser.width2dim(rows) headsep = TableParser.headsep(maxwidths, aligns, x='|', y='-') rowline = lambda row: TableParser.rowline(row, maxwidths, aligns) # print table table += [rowline(rows[0])] table.append(headsep) table += [rowline(row) for row in rows[1:]] return map(lambda line: line+"\n", table) def dump_th(self, tag, attrib, strings): strings = [s.replace('\n', '
    ').replace('|', '∣') for s in strings] return [self._concat(strings)] def dump_td(self, tag, attrib, strings): strings = [s.replace('\n', '
    ').replace('|', '∣') for s in strings] return [self._concat(strings)] zim-0.65/zim/formats/html.py0000664000175000017500000001523012521361062015704 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2012 Jaap Karssenberg '''This module supports dumping to HTML''' # TODO paragraph indenting using margin CSS ? # TODO use global CSS for checkboxes instead of inline style - needs also support from tempalte etc import re import string from zim.formats import * from zim.parsing import TextBuffer, link_type from zim.config.dicts import Choice info = { 'name': 'html', 'desc': 'HTML', 'mimetype': 'text/html', 'extension': 'html', 'native': False, 'import': False, 'export': True, 'usebase': True, } def html_encode(text): if not text is None: text = text.replace('&', '&') text = text.replace('<', '<') text = text.replace('>', '>') return text else: return '' class Dumper(DumperClass): TAGS = { EMPHASIS: ('', ''), STRONG: ('', ''), MARK: ('', ''), STRIKE: ('', ''), VERBATIM: ('', ''), TAG: ('', ''), SUBSCRIPT: ('', ''), SUPERSCRIPT: ('', ''), } TEMPLATE_OPTIONS = { 'empty_lines': Choice('default', ('default', 'remove')), 'line_breaks': Choice('default', ('default', 'remove')), } def dump(self, tree): # FIXME should be an init function for this self._isrtl = None return DumperClass.dump(self, tree) def encode_text(self, tag, text): # if _isrtl is already set the direction was already # determined for this section if self._isrtl is None and not text.isspace(): self._isrtl = self.isrtl(text) text = html_encode(text) if tag not in (VERBATIM_BLOCK, VERBATIM, OBJECT) \ and not self.template_options['line_breaks'] == 'remove': text = text.replace('\n', '
    \n') return text def text(self, text): if self.context[-1].tag == FORMATTEDTEXT \ and text.isspace(): # Reduce top level empty lines if self.template_options['empty_lines'] == 'remove': self.context[-1].text.append('\n') else: l = text.count('\n') - 1 if l > 0: self.context[-1].text.append('\n' + ('
    \n' * l) + '\n') elif l == 0: self.context[-1].text.append('\n') else: DumperClass.text(self, text) def dump_h(self, tag, attrib, strings): h = 'h' + str(attrib['level']) if self._isrtl: start = '<' + h + ' dir=\'rtl\'>' else: start = '<' + h + '>' self._isrtl = None # reset end = '\n' strings.insert(0, start) strings.append(end) return strings def dump_block(self, tag, attrib, strings, _extra=None): if strings and strings[-1].endswith('
    \n'): strings[-1] = strings[-1][:-5] elif strings and strings[-1].endswith('\n'): strings[-1] = strings[-1][:-1] start = '<' + tag if self._isrtl: start += ' dir=\'rtl\'' self._isrtl = None # reset if 'indent' in attrib: level = int(attrib['indent']) start += ' style=\'padding-left: %ipt\'' % (30 * level) if _extra: start += ' ' + _extra start += '>\n' if tag in ('ul', 'ol'): end = '\n' if strings: # close last
  • element strings.append('
  • \n') if self.context[-1].tag in ('ul', 'ol'): # Nested list start = '\n' + start else: end = '\n\n' strings.insert(0, start) strings.append(end) return strings dump_p = dump_block dump_div = dump_block dump_pre = dump_block dump_ul = dump_block def dump_ol(self, tag, attrib, strings): myattrib = '' if 'start' in attrib: start = attrib['start'] if start in 'abcdefghijklmnopqrstuvwxyz': type = 'a' start = 'abcdefghijklmnopqrstuvwxyz'.index(start) + 1 elif start in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': type = 'A' start = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.index(start) + 1 else: type = '1' return self.dump_block(tag, attrib, strings, _extra='type="%s" start="%s"' % (type, start) ) else: return self.dump_block(tag, attrib, strings) def dump_li(self, tag, attrib, strings): bullet = attrib.get('bullet', BULLET) if self.context[-1].tag == BULLETLIST and bullet != BULLET: start = '
  • ' else: start += '>' self._isrtl = None # reset strings.insert(0, start) if self.context[-1].text: # we are not the first
  • element, close previous strings.insert(0, '
  • \n') return strings def dump_link(self, tag, attrib, strings=None): href = self.linker.link(attrib['href']) type = link_type(attrib['href']) if strings: text = u''.join(strings) else: text = attrib['href'] title = text.replace('"', '"') return [ '%s' % (href, title, type, text) ] def dump_img(self, tag, attrib, strings=None): src = self.linker.img(attrib['src']) opt = '' if 'alt' in attrib: opt += ' alt="%s"' % html_encode(attrib['alt']).replace('"', '"') for o in ('width', 'height'): if o in attrib and int(float(attrib[o])) > 0: opt += ' %s="%s"' % (o, attrib[o]) if 'href' in attrib: href = self.linker.link(attrib['href']) return ['' % (href, src, opt)] else: return ['' % (src, opt)] def dump_object(self, *arg, **kwarg): strings = DumperClass.dump_object(self, *arg, **kwarg) strings.insert(0, '
    \n') strings.append('
    \n') return strings def dump_object_fallback(self, tag, attrib, strings=None): # Fallback to verbatim paragraph strings.insert(0, '
    \n')
    		strings.append('
    \n') return strings # TODO put content in attrib, use text for caption (with full recursion) # See img def dump_table(self, tag, attrib, strings): aligns = attrib['aligns'].split(',') tdcount = 0 def align(pos): if pos == 'left' or pos == 'right' or pos == 'center': return ' align="' + pos + '"' return '' for i, string in enumerate(strings): if '\n') strings.append('\n') return strings def dump_thead(self, tag, attrib, strings): strings.insert(0, '\n') strings.append('\n') return strings def dump_th(self, tag, attrib, strings): strings.insert(0, ' ') strings.append('\n') return strings def dump_trow(self, tag, attrib, strings): strings.insert(0, '\n') strings.append('\n') return strings def dump_td(self, tag, attrib, strings): if strings == [" "]: strings = [" "] strings.insert(0, ' ') strings.append('\n') return strings zim-0.65/zim/_version.py0000664000175000017500000000116512615422672015124 0ustar jaapjaap00000000000000#!/usr/bin/env python """This file is automatically generated by generate_version_info It uses the current working tree to determine the revision. So don't edit it. :) """ version_info = {'branch_nick': u'zim-trunk', 'build_date': '2015-11-01 15:46:18 +0100', 'clean': None, 'date': '2015-11-01 15:42:45 +0100', 'revision_id': 'jaap.karssenberg@gmail.com-20151101144245-0g7s8a7qjt5xu1d0', 'revno': '805'} revisions = {} file_revisions = {} if __name__ == '__main__': print 'revision: %(revno)s' % version_info print 'nick: %(branch_nick)s' % version_info print 'revision id: %(revision_id)s' % version_info zim-0.65/zim/command.py0000664000175000017500000001040012374655231014707 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2013 Jaap Karssenberg from getopt import gnu_getopt, GetoptError import logging logger = logging.getLogger('zim') from zim import __version__ from zim.errors import Error class UsageError(Error): '''Error raised when commands do not have correct number or type of arguments ''' pass class Command(object): '''Base class for commandline commands, used by zim to abstract part of the C{main()} functionality and allow better testability of commandline arguments. Sub-classes can define the options and arguments that they require. Then only the C{run()} method needs to be defined to implement the actual command. In the C{run()} method C{self.opts} and C{self.args} can be accessed to get the commandline options (dict) and the commandline arguments (list) respectively. ''' arguments = () #: Define arguments, e.g ('NOTEBOOK', '[PAGE]') options = () #: Define options by 3-tuple of long, short & description. #: E.g. ("foo=", "f", "set parameter for foo") #: For options that can appear multiple times, #: assign a list "[]" in "self.opts" before parse_options is called default_options = ( ('verbose', 'V', 'Verbose output'), ('debug', 'D', 'Debug output'), ) use_gtk = False #: Flag whether this command uses a graphical interface def __init__(self, command, *args, **opts): '''Constructor @param command: the command switch (first commandline argument) @param args: positional commandline arguments @param opts: command options ''' self.command = command self.args = list(args) self.opts = opts def parse_options(self, *args): '''Parse commandline options for this command Sets the attributes 'args' and 'opts' to a list of arguments and a dictionary of options respectively @param args: all remaining options to be parsed @raises GetOptError: when options are not correct ''' options = '' long_options = [] options_map = {} for l, s, desc in self.default_options + self.options: long_options.append(l) if s and l.endswith('='): options += s + ':' options_map[s] = l.strip('=') elif s: options += s options_map[s] = l optlist, args = gnu_getopt(args, options, long_options) self.args += args for o, a in optlist: key = o.strip('-') key = options_map.get(key, key) if a == '': self.opts[key] = True elif key in self.opts and isinstance(self.opts[key], list): self.opts[key].append(a) else: self.opts[key] = a def get_options(self, *names): '''Retrieve a dict with a sub-set of the command options @param names: that options in the subset ''' return dict((k, self.opts.get(k)) for k in names) def get_arguments(self): '''Get the arguments, to be used by the implementation of C{run()} @raises UsageError: when arguments are not correct @returns: tuple of arguments, padded with None to correct length ''' minimum = len([a for a in self.arguments if not a.startswith('[')]) if len(self.args) < minimum: raise UsageError, 'Command %s takes %i arguments' % (self.command, minimum) elif len(self.args) > len(self.arguments): raise UsageError, 'Command %s takes only %i arguments' % (self.command, len(self.args)) else: return tuple(self.args) \ + (None,) * (len(self.arguments) - len(self.args)) def ignore_options(self, *options): for option in options: if self.opts.get(option) is not None: logger.warning('Option "%s" is ignored for this command', option) def set_logging(self): '''Configure the logging module for output based on the default options -V and -D ''' if self.opts.get('debug'): level = logging.DEBUG elif self.opts.get('verbose'): level = logging.INFO else: level = logging.WARN root = logging.getLogger() # root root.setLevel(level) logger = logging.getLogger('zim') logger.info('This is zim %s', __version__) if level == logging.DEBUG: import sys import os import zim.config logger.debug('Python version is %s', str(sys.version_info)) logger.debug('Platform is %s', os.name) logger.debug(zim.get_zim_revision()) zim.config.log_basedirs() def run(self): '''Run the command @raises UsageError: when arguments are not correct @implementation: must be implemented by subclasses ''' raise NotImplementedError zim-0.65/zim/errors.py0000664000175000017500000001152512374655231014616 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2013 Jaap Karssenberg # The Error class needed to be put in a separate file to avoid recursive # imports. '''This module contains the base class for all errors in zim''' import sys import logging logger = logging.getLogger('zim') use_gtk_errordialog = False def set_use_gtk(use_gtk): '''Set whether or not L{show_error} and L{exception_handler} shold use the L{ErrorDialog} or not. @param use_gtk: set C{True} for interactive gui, C{False} for terminal mode ''' global use_gtk_errordialog use_gtk_errordialog = use_gtk def get_error_msg(error): '''Returns the message to show for an error @param error: error object or string @returns: 2-tuple of: message string and a boolean whether a traceback should be shown or not ''' if isinstance(error, Error): # An "expected" error return error.msg, False elif isinstance(error, EnvironmentError): # Normal error, e.g. OSError or IOError msg = error.strerror if hasattr(error, 'filename') and error.filename: msg += ': ' + error.filename return msg, False else: # An unexpected error, all other Exception's msg = _('Looks like you found a bug') # T: generic error dialog return msg, True def log_error(error, debug=None): '''Log error and traceback @param error: error as understood by L{get_error_msg()} @param debug: optional debug message, defaults to the error itself ''' msg, show_trace = get_error_msg(error) if debug is None: debug = msg if show_trace: # unexpected error - will be logged with traceback logger.exception(debug) else: # expected error - log trace to debug logger.debug(debug, exc_info=1) logger.error(msg) def _run_error_dialog(error): #~ try: from zim.gui.widgets import ErrorDialog ErrorDialog(None, error, do_logging=False).run() #~ except: #~ logger.error('Failed to run error dialog') def show_error(error): '''Show an error by calling L{log_error()} and when running interactive also calling L{ErrorDialog}. @param error: the error object ''' log_error(error) if use_gtk_errordialog: _run_error_dialog(error) def exception_handler(debug): '''Like C{show_error()} but with debug message instead of the actual error. Intended to be used in C{except} blocks as a catch-all for both intended and unintended errors. @param debug: debug message for logging ''' # We use debug as log message, rather than the error itself # the error itself shows up in the traceback anyway exc_info = sys.exc_info() error = exc_info[1] del exc_info # recommended by manual log_error(error, debug=debug) if use_gtk_errordialog: _run_error_dialog(error) class Error(Exception): '''Base class for all errors in zim. This class is intended for application and usage errors, these will be caught in the user interface and presented as error dialogs. In contrast and Exception that does I{not} derive from this base class will result in a "You found a bug" dialog. Do not use this class e.g. to catch programming errors. Subclasses should define two attributes. The first is 'msg', which is the short description of the error. Typically this gives the specific input / page / ... which caused the error. In there should be an attribute 'description' (either as class attribute or object attribute) with a verbose description. This description can be less specific but should explain the error in a user friendly way. The default behavior is to take 'msg' as the single argument for the constructor. So a minimal subclass only needs to define a class attribute 'description'. For a typical error dialog in the Gtk interface the short string from 'msg' will be shown as the title in bold letters while the longer 'description' is shown below it in normal letters. As a guideline error classes that are used in the gui or that can be e.g. be raised on invalid input from the user should be translated. ''' description = '' msg = '' # in case subclass does not define instance attribute def __init__(self, msg, description=None): self.msg = msg if description: self.description = description # else use class attribute def __str__(self): msg = self.__unicode__() return msg.encode('utf-8') def __unicode__(self): msg = u'' + self.msg.strip() if self.description: msg += '\n\n' + self.description.strip() + '\n' return msg def __repr__(self): return '<%s: %s>' % (self.__class__.__name__, self.msg) # Defined here because these errors are not specific to files, but can # occur in different storage models as well class TrashNotSupportedError(Error): '''Error raised when trashing is not supported and delete should be used instead ''' pass class TrashCancelledError(Error): '''Error raised when a trashign operation is cancelled. (E.g. on windows the system will prompt the user with a confirmation dialog which has a Cancel button.) ''' pass zim-0.65/zim/utils.py0000664000175000017500000002062512606206231014431 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012-2013 Jaap Karssenberg '''Module with assorted useful classes and functions used in the zim code''' class classproperty(object): '''Like C{property()} but for klass properties Typically used as decorator ''' def __init__(self, func): self.func = func def __get__(self, obj, owner): return self.func(owner) ## Functions for dynamic loading of modules and klasses import inspect def get_module(name): '''Import a module @param name: the module name @returns: module object @raises ImportError: if the given name does not exist ''' # __import__ has some quirks, see the reference manual mod = __import__(name) for part in name.split('.')[1:]: mod = getattr(mod, part) return mod def lookup_subclass(module, klass): '''Look for a subclass of klass in the module This function is used in several places in zim to get extension classes. Typically L{get_module()} is used first to get the module object, then this lookup function is used to locate a class that derives of a base class (e.g. PluginClass). @param module: module object @param klass: base class @note: don't actually use this method to get plugin classes, see L{PluginManager.get_plugin_class()} instead. ''' subclasses = lookup_subclasses(module, klass) if len(subclasses) > 1: raise AssertionError, 'BUG: Multiple subclasses found of type: %s' % klass elif subclasses: return subclasses[0] else: return None def lookup_subclasses(module, klass): '''Look for all subclasses of klass in the module @param module: module object @param klass: base class ''' subclasses = [] for name, obj in inspect.getmembers(module, inspect.isclass): if issubclass(obj, klass) \ and obj.__module__.startswith(module.__name__): subclasses.append(obj) return subclasses #### sorting functions import locale import re import unicodedata _num_re = re.compile(r'\d+') def natural_sort(list, key=None): '''Natural sort a list in place. See L{natural_sort_key} for details. @param list: list of strings to be sorted @param key: function producing strings for list items ''' if key: def func(s): s = key(s) return (natural_sort_key(s), s) else: func = lambda s: (natural_sort_key(s), s) list.sort(key=func) def natural_sorted(iter, key=None): '''Natural sort a list. See L{natural_sort_key} for details. @param iter: list or iterable of strings to be sorted @param key: function producing strings for list items @returns: sorted copy of the list ''' l = list(iter) # cast to list and implicit copy natural_sort(l, key=key) return l def natural_sort_key(string, numeric_padding=5): '''Format string such that it gives 'natural' sorting on string compare. Will pad any numbers in the string with "0" such that "10" sorts after "9". Also includes C{locale.strxfrm()}. @note: sorting not 100% stable for case, so order between "foo" and "Foo" is not defined. For this reason when sort needs to be absolutely stable it is advised to sort based on tuples of C{(sort_key, original_string)}. Or use either L{natural_sort()} or L{natural_sorted()} instead. @param string: the string to format @param numeric_padding: number of digits to use for padding @returns: string transformed to sorting key ''' templ = '%0' + str(numeric_padding) + 'i' string.strip() string = _num_re.sub(lambda m: templ % int(m.group()), string) if isinstance(string, unicode): string = unicodedata.normalize('NFKC', string) # may be done by strxfrm as well, but want to be sure string = string.lower() # sort case insensitive try: bytestring = locale.strxfrm(string) # 8-bit byte string - enode to hex -- in pyton3 check if byte data type is handled better by sqlite3 and others except MemoryError: # Known python issue :( bytestring = string.encode('utf-8') key = ''.join(["%02x" % ord(c) for c in bytestring]) return key #### # Python 2.7 has a weakref.WeakSet, but using this one for compatibility with 2.6 .. # Did not switch implementations per version to make sure we test # all modules with this implementation import weakref class WeakSet(object): '''Class that behaves like a set, but keeps weak references to members of the set. ''' def __init__(self): self._refs = [] def __iter__(self): return ( obj for obj in [ref() for ref in self._refs] if obj is not None ) def add(self, obj): ref = weakref.ref(obj, self._del) self._refs.append(ref) def _del(self, ref): try: self._refs.remove(ref) except ValueError: pass def discard(self, obj): for ref in self._refs: if ref() == obj: self._refs.remove(ref) # Python 2.7 has a collections.OrderedDict, but using this one for compatibility # Did not switch implementations per version to make sure we test # all modules with this implementation import collections class OrderedDict(collections.MutableMapping): '''Class that behaves like a dict but keeps items in same order. Updating an items keeps it at the current position, removing and re-inserting an item puts it at the end of the sequence. ''' # By using collections.MutableMapping we ensure all dict API calls # are proxied by the methods below. When inheriting from dict # directly e.g. "pop()" does not use "__delitem__()" but is # optimized on it's own def __init__(self, E=None, **F): if not hasattr(self, '_keys') \ and not hasattr(self, '_values'): # Some classes have double inheritance from this class self._keys = [] self._values = {} if self.__class__.__getitem__ == OrderedDict.__getitem__: # optimization by just using the real dict.__getitem__ # but skip if subclass overloaded the method self.__getitem__ = self._values.__getitem__ if E or F: assert not (E and F) self.update(E or F) def __repr__(self): return '<%s:\n%s\n>' % ( self.__class__.__name__, ',\n'.join(' %r: %r' % (k, v) for k, v in self.items()) ) def __getitem__(self, k): return self._values[k] # Overloaded in __init__ for optimization def __setitem__(self, k, v): self._values[k] = v if not k in self._keys: self._keys.append(k) def __delitem__(self, k): del self._values[k] self._keys.remove(k) def __iter__(self): return iter(self._keys) def __len__(self): return len(self._keys) ## Special iterator class class MovingWindowIter(object): '''Iterator yields a 3-tuple of the previous item, the current item and the next item while iterating a give iterator. Previous or next item will be C{None} if not available. Use as: for prev, current, next in MovingWindowIter(mylist): .... @ivar items: current 3-tuple @ivar last: C{True} if we are at the last item ''' def __init__(self, iterable): self._iter = iter(iterable) try: first = self._iter.next() except StopIteration: # empty list self.last = True self.last = (None, None, None) else: self.last = False self.items = (None, None, first) def __iter__(self): return self def next(self): if self.last: raise StopIteration discard, prev, current = self.items try: next = self._iter.next() except StopIteration: self.last = True self.items = (prev, current, None) else: self.items = (prev, current, next) return self.items ## Wrapper for using threads for e.g. async IO import threading import sys class FunctionThread(threading.Thread): '''Subclass of C{threading.Thread} that runs a single function and keeps the result and any exceptions raised. @ivar done: C{True} is the function is done running @ivar result: the return value of C{func} @ivar error: C{True} if done and an exception was raised @ivar exc_info: 3-tuple with exc_info ''' def __init__(self, func, args=(), kwargs={}, lock=None): '''Constructor @param func: the function to run in the thread @param args: arguments for C{func} @param kwargs: keyword arguments for C{func} @param lock: optional lock, will be acquired in main thread before running and released once done in background ''' threading.Thread.__init__(self) self.func = func self.args = args self.kwargs = kwargs self.lock = lock self.done = False self.result = None self.error = False self.exc_info = (None, None, None) def start(self): if self.lock: self.lock.acquire() threading.Thread.start(self) def run(self): try: self.result = self.func(*self.args, **self.kwargs) except: self.error = True self.exc_info = sys.exc_info() finally: self.done = True if self.lock: self.lock.release() zim-0.65/zim/stores/0000775000175000017500000000000012615422672014242 5ustar jaapjaap00000000000000zim-0.65/zim/stores/memory.py0000664000175000017500000000703312374655231016130 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''Store module that keeps a tree of pages in memory. See StoreClass in zim.stores for the API documentation. FIXME document nodetree FIXME document subclassing ''' from zim.formats import get_format from zim.notebook import Page, LookupError, PageExistsError from zim.stores import StoreClass class Node(object): __slots__ = ('basename', 'text', 'children') def __init__(self, basename, text=None): self.basename = basename self.text = text self.children = [] class MemoryStore(StoreClass): def __init__(self, notebook, path): '''Construct a memory store. Pass args needed for StoreClass init. ''' StoreClass.__init__(self, notebook, path) self.format = get_format('wiki') # TODO make configable self._nodetree = [] self.readonly = False def set_node(self, path, text): '''Sets node for 'page' and return it.''' node = self.get_node(path, vivificate=True) node.text = text return node def get_node(self, path, vivificate=False): '''Returns node for page 'name' or None. If 'vivificate' is True nodes are created on the fly. ''' assert path != self.namespace, 'Can not get node for root namespace' name = path.relname(self.namespace) names = name.split(':') # list with names branch = self._nodetree # list of page nodes while names: n = names.pop(0) # get next item node = None for leaf in branch: if leaf.basename == n: node = leaf break if node is None: if vivificate: node = Node(basename=n) branch.append(node) else: return None branch = node.children return node def get_page(self, path): node = self.get_node(path) return self._build_page(path, node) def _build_page(self, path, node): if node is None: text = None haschildren = False else: text = node.text haschildren = bool(node.children) page = Page(path, haschildren) if text: page.readonly = False page.set_parsetree(self.format.Parser().parse(text)) page.modified = False page.readonly = self.readonly return page def get_pagelist(self, path): if path == self.namespace: nodes = self._nodetree else: node = self.get_node(path) if node is None: return # implicit generate empty list else: nodes = node.children for node in nodes: childpath = path + node.basename yield self._build_page(childpath, node) def store_page(self, page): text = self.format.Dumper().dump(page.get_parsetree()) self.set_node(page, text) page.modified = False def move_page(self, path, newpath): node = self.get_node(path) if node is None: raise LookupError, 'No such page: %s' % path.name newnode = self.get_node(newpath) if not newnode is None: raise PageExistsError, 'Page already exists: %s' % newpath.name self.delete_page(path) newnode = self.get_node(newpath, vivificate=True) newnode.text = node.text newnode.children = node.children # children def delete_page(self, path): # Make sure not to destroy the actual content, we are used by # move_page, which could be keeping a reference to the content node = self.get_node(path) if node is None: return False parent = path.parent if parent.isroot: self._nodetree.remove(node) else: pnode = self.get_node(parent) pnode.children.remove(node) if not (pnode.text or pnode.children): self.delete_page(parent) # recurs to cleanup empty parent if isinstance(path, Page): path.haschildren = False path.set_parsetree(None) path.modified = False return True zim-0.65/zim/stores/__init__.py0000664000175000017500000003347412374655231016367 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''Base class for storage backends This module contains a base class for store modules. It implements some common methods and provides API documentation for the store modules. Each store sub-module should implement exactly one class which inherits from StoreClass. These classes can be loaded with the function L{get_store()}. Storage Model ============= Stores handle content in terms of Page objects. How the data that is managed by the store is mapped to pages is up to the store implementation. For example in the default store each page is mapped to a text file, but there can also be store implementations that store many pages in the same file, or that use for example a database. The store is however expected to be consistent. So when a page is stored under a specific name it should also be retrievable under that name. Pages can be stored in a hierarchical way where each page can have sub-pages. Or, in other terms, each page has a namespace of the same name that can store sub pages. In the default store this structure is mapped to a directory structure where for each page there can be a like named directory which contains the files used to store sub-pages. The full page name for a page consists of the names of all it's parents plus it's own base name separated with the ':' character. It is advised that each page should have a unique name. Symbolic links or aliases for pages should be handled on a different level. In the store interface page names are always assumed to be case sensitive. However the store is allowed to be not case sensitive if the storage backend does not support this (e.g. a file system that is not case sensitive). The API consistently uses L{Path} objects to represent page names. These paths just map to a specific page name but do not contain any information about the actual existence of the page etc. The store exposes it's content using Page objects and lists of Page objects. Each page object has two boolean attributes 'C{hascontent}' and 'C{haschildren}'. Typically in a page listing at least one of these attributes should be True, as a page either has content of it's own, or is used as a container for sub-pages, or both. However both attributes can be False for new pages, or for pages that have just been deleted. The index will cache page listings in order to speed up the performance, so it should not be necessary to do speed optimizations in the store lookups. However for efficient caching, store objects should implement the L{get_pagelist_indexkey()} and L{get_page_indexkey()} methods. ''' from __future__ import with_statement import sys import re import codecs import zim.fs import zim.plugins from zim.fs import File, Dir from zim.parsing import is_url_re from zim.errors import Error, TrashNotSupportedError def get_store(name): '''Get a store class @param name: the module name of the store (e.g. "files") @returns: the subclass of L{StoreClass} found in the module ''' mod = zim.plugins.get_module('zim.stores.' + name.lower()) obj = zim.plugins.lookup_subclass(mod, StoreClass) return obj def _url_encode_on_error(error): string = error.object section = string[error.start:error.end].encode('utf-8') replace = u'' for char in section: replace += u'%%%02X' % ord(char) return replace, error.end codecs.register_error('urlencode', _url_encode_on_error) def encode_filename(pagename): '''Encode a pagename to a filename Since the filesystem may use another encoding than UTF-8 it may not be able to use all valid page names directly as file names. Therefore characters that are not allowed for the filesystem are replaced with url encoding. The result is still unicode, which can be used to construct a L{File} object. (The File object implementation takes care of actually encoding the string when needed.) Namespaces are mapped to directories by replacing ":" with "/". @param pagename: the pagename as string or unicode object @returns: the filename as unicode object but with characters incompatble with the filesystem encoding replaced ''' assert not '%' in pagename # just to be sure if not zim.fs.ENCODING in ('utf-8', 'mbcs'): # if not utf-8 we may not be able to encode all characters # enforce safe encoding, but do not actually encode here # ('mbcs' means we are running on windows and filesystem can # handle unicode natively ) pagename = pagename.encode(zim.fs.ENCODING, 'urlencode') pagename = pagename.decode(zim.fs.ENCODING) return pagename.replace(':', '/').replace(' ', '_') _url_decode_re = re.compile('%([a-fA-F0-9]{2})') def _url_decode(match): return chr(int(match.group(1), 16)) def decode_filename(filename): '''Decodes a filename to a pagename Reverse operation of L{encode_filename()}. @param filename: the filename as string or unicode object @returns: the pagename as unicode object ''' if zim.fs.ENCODING != 'utf-8': filename = filename.encode('utf-8') filename = _url_decode_re.sub(_url_decode, filename) filename = filename.decode('utf-8') return filename.replace('/', ':').replace('_', ' ') class StoreClass(): '''Base class for all storage backends Defines API that should be implemented in store objects as well as some convenience methods. Note that typically stores are only called by the L{Notebook} object, which does varies sanity checks. So although we should still make sure parameters in the API are sane, we may assume the requestor already verified for example that the path we get really belongs to this store. @note: Do not call store objects directly from outside the Notebook class ! @ivar notebook: the L{Notebook} this store is part of @ivar namespace: the L{Path} where this store will be 'mounted' in the notebook ''' def __init__(self, notebook, namespace): '''Constructor @param notebook: the L{Notebook} this store will be part of @param namespace: the L{Path} where this store will be 'mounted' in the notebook ''' self.notebook = notebook self.namespace = namespace def get_page(self, path): '''Get a L{Page} object If a non-existing page is requested the store should check if we are allowed to create the page. If so, a new page object should be returned, but actually creating the page can be delayed until content is stored in it. If we are not allowed to create the page (e.g. in case of a read-only notebook) C{None} may be returned but a read-only Page object is also allowed. @param path: a L{Path} object @returns: a L{Page} object or C{None} @implementation: must be implemented by subclasses ''' raise NotImplementedError def get_pagelist(self, path): '''Get a list (or iterator) of page objects in a namespace This method is used by the index to recursively find all pages in the store, so it should also include empty pages that do have sub-pages. Otherwise those sub-pages are never indexed. @param path: a L{Path} object @returns: A list or iterator for a list of L{Page} objects or an empty list when C{path} does not exist. @implementation: must be implemented by subclasses ''' raise NotImplementedError def store_page(self, page): '''Store a page This method should save pages that were changed in the user interface. If the page does not yet exist it should be created automatically. Also all parent pages that did not yet exist should be created when needed. @param page: a L{Page} object obtained from L{get_page()} on this same object. The object must be from the same store to allow stores to sub-class the Page class and add additional internal state. @implementation: must be implemented by subclasses ''' raise NotImplementedError def store_page_async(self, page): '''Store a page asynchronously Like L{store_page()} but with asynchronous operation. @param page: a L{Page} object @implementation: optional, can be implemented in subclasses. If not implemented in the subclass it will fall back to just calling L{store_page()} and then call the callback function. ''' self.store_page(page) def revert_page(self, page): '''Revert the state of an un-stored page object Does not return a page object, changes are in the object supplied. This allows to revert an object that is being edited by the user interface. Kind of opposite to L{store_page()}. @implementation: optional, can be implemented in subclasses. In this base class it defaults to requesting a new copy of the page and copying the parse tree to the old object. Needs to be overloaded when the page has more internal state (e.g. a file object with mtime check). ''' newpage = self.get_page(page) page.set_parsetree(newpage.get_parsetree()) page.modified = False def move_page(self, path, newpath): '''Move a page and all it's sub-pages Move content, sub-pages and attachments from C{path} to C{newpath}. Must raise an error if C{path} does not exist, or if C{newpath} already exists. If C{path} is in fact a L{Page} object this should result in C{page.exists} being False after the move was successful. @param path: a L{Path} object for the the current path @param newpath: a L{Path} object for the new path @implementation: must be implemented by subclasses if the store is writable ''' raise NotImplementedError def delete_page(self, path): '''Deletes a page and all it's sub-pages Delete a page, it's sub-pages and attachments Must raise an error when delete failed. If C{path} is in fact a L{Page} object this should result in C{page.exists} being False after the deletion was successful. @param path: a :{Path} object @returns: C{False} if page did not exist in the first place, C{True} otherwise. @implementation: must be implemented by subclasses if the store is writable ''' raise NotImplementedError def trash_page(self, path): '''Move a page and all it's sub-pages to trash Like L{delete_page()} but instead of permanent deltion move the pages and attachments to the system trash so they can be restored by the user. @raises TrashNotSupportedError: when not subclassed or when trash is not available due to some other reason. @raises TrashCancelledError: when the user cancelled trashing. @param path: a :{Path} object @returns: C{False} if page did not exist in the first place, C{True} otherwise. @implementation: must be implemented by subclasses if the store is writable ''' raise TrashNotSupportedError, 'Not implemented' def get_pagelist_indexkey(self, path): '''Get key for checking cached state of a page list This method should return a key that can be checked by the index to determine if a list of (sub-)pages should be indexed again. A typical implementation would be to return the modification time of the directory where the pages are stored. The default in the base class returns None, forcing the index to always re-index the page. This is not very efficient and should be overloaded by the store. @param path: a L{Path} object @returns: a string encoding the state of the page list for sub-pages of C{path} @implementation: optional, can be implemented in subclasses ''' return None def get_page_indexkey(self, path): '''Get key for checking cached state of a page Like L{get_pagelist_indexkey()} but used to decide whether page contents should be indexed again or not. Typical implementation would be to check the modification time of the file. The index will try to index the page after it was stored, so it gets the new state after L{store_page} was called. @param path: a L{Path} object @returns: a string encoding the state of the content of C{path} @implementation: optional, can be implemented in subclasses ''' return None def store_has_dir(self): '''Convenience method to initalize the storage dir Typically used in the constructor of a sub class. @returns: C{True} when the store has a C{dir} attribute set or when it was able to create such an attribute based on the namespace and the notebook C{dir} attribute. ''' if hasattr(self, 'dir') and not self.dir is None: return isinstance(self.dir, Dir) elif hasattr(self.notebook, 'dir'): path = self.namespace.name.replace(':', '/') if path.strip(':') == '': self.dir = self.notebook.dir else: self.dir = self.notebook.dir.subdir(path) return True else: return False def store_has_file(self): '''Convenience method to initalize the storage file Like L{store_has_dir()} but initializes the C{file} attribute. ''' if hasattr(self, 'file') and not self.file is None: return isinstance(self.file, File) elif hasattr(self.notebook, 'file') and self.namespace.isroot: self.file = self.notebook.file return isinstance(self.file, File) else: return False def get_attachments_dir(self, path): '''Get the folder for storing attachments for a page @param path: a L{Path} object @returns: a L{Dir} object for the attachment folder of C{path} @implementation: optional, sub-classes may implement this method. The default implementation assumes the store has a directory set already and applies the default heuristic for mapping page names to file names. Sub-classes that do not have a directory or want a different layout need to subclass this method. ''' # TODO merge with _get_dir and _get_file in stores/files.py assert self.dir, 'Stores without a dir attribute need to overload this method' if path == self.namespace: return self.dir else: name = path.relname(self.namespace) dirpath = encode_filename(name) return Dir([self.dir, dirpath]) def walk(self, path=None): '''Generator to walk all pages under this store @returns: yields all pages under this store as L{Page} objects depth-first ''' if path is None: path = self.namespace for page in self.get_pagelist(path): yield page for child in self.walk(page): # recurs yield child zim-0.65/zim/stores/files.py0000664000175000017500000002505712374655231015730 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''Store module for storing pages as files. With this store each page maps to a single text file. Sub-pages and attachments go into a directory of the same name as the page. So page names are mapped almost one on one to filesystem paths:: page notebook_folder/page.txt page:subpage notebook_folder/page/subpage.txt (The exact file extension can be determined by the source format used.) ''' import sys import logging import zim.fs import zim.datetimetz as datetime from zim.fs import File, Dir, FilteredDir, FileNotFoundError from zim.utils import FunctionThread from zim.formats import get_format from zim.notebook import Path, Page, LookupError, PageExistsError from zim.stores import StoreClass, encode_filename, decode_filename from zim.config import HeadersDict from zim.formats.wiki import WIKI_FORMAT_VERSION # FIXME hard coded preference for wiki format logger = logging.getLogger('zim.stores.files') class FilesStore(StoreClass): def __init__(self, notebook, path, dir=None): '''Constructor @param notebook: a L{Notebook} object @param path: a L{Path} object for the mount point within the notebook @keyword dir: a L{Dir} object When no dir is given and the notebook has a dir already the dir is derived based on the path parameter. In the easiest case when path is the root, the notebook dir is copied. ''' StoreClass.__init__(self, notebook, path) self.dir = dir if not self.store_has_dir(): raise AssertionError, 'File store needs directory' # not using assert here because it could be optimized away self.format = get_format('wiki') # TODO make configurable def _get_file(self, path): '''Returns a File object for a notebook path''' assert path != self.namespace, 'Can not get a file for the toplevel namespace' name = path.relname(self.namespace) filepath = encode_filename(name)+'.txt' # FIXME hard coded extension file = self.dir.file(filepath) file.checkoverwrite = True file.endofline = self.notebook.endofline return file def _get_dir(self, path): '''Returns a dir object for a notebook path''' if path == self.namespace: return self.dir else: name = path.relname(self.namespace) dirpath = encode_filename(name) return self.dir.subdir(dirpath) def get_page(self, path): file = self._get_file(path) dir = self._get_dir(path) return FileStorePage(path, source=file, folder=dir, format=self.format) def get_pagelist(self, path): dir = self._get_dir(path) names = set() # collide files and dirs with same name # We skip files with a space in them, because we can not resolve # them uniquely. for file in dir.list(): if file.startswith('.') or file.startswith('_'): continue # no hidden files or directories elif file.endswith('.txt'): # TODO: do not hard code extension if ' ' in file: logger.warn('Ignoring file: "%s" invalid file name', file) else: names.add(decode_filename(file[:-4])) elif zim.fs.isdir( zim.fs.joinpath(dir.path, file) ): if ' ' in file: logger.warn('Ignoring file: "%s" invalid file name', file) else: names.add(decode_filename(file)) else: pass # unknown file type for name in names: # sets are sorted by default yield self.get_page(path + name) def store_page(self, page): # FIXME assert page is ours and page is FilePage page._store() def store_page_async(self, page): return page._store_async() def revert_page(self, page): # FIXME assert page is ours and page is FilePage newpage = self.get_page(page) page.source = newpage.source page.set_parsetree(newpage.get_parsetree()) # use set_parsetree because it triggers ui_object page.modified = False def move_page(self, path, newpath): file = self._get_file(path) dir = self._get_dir(path) if not (file.exists() or dir.exists()): raise LookupError, 'No such page: %s' % path.name newfile = self._get_file(newpath) newdir = self._get_dir(newpath) if file.path.lower() == newfile.path.lower(): if (newfile.exists() and newfile.isequal(file)) \ or (newdir.exists() and newdir.isequal(dir)): # renaming on case-insensitive filesystem pass elif newfile.exists() or newdir.exists(): raise PageExistsError, 'Page already exists: %s' % newpath.name elif newfile.exists() or newdir.exists(): raise PageExistsError, 'Page already exists: %s' % newpath.name if file.exists(): file.rename(newfile) if dir.exists(): if newdir.ischild(dir): # special case where we want to move a page down # into it's own namespace parent = dir.dir tmpdir = parent.new_subdir(dir.basename) dir.rename(tmpdir) tmpdir.rename(newdir) # check if we also moved the file inadvertently if newfile.ischild(dir): movedfile = newdir.file(newfile.basename) movedfile.rename(newfile) else: dir.rename(newdir) def delete_page(self, path): file = self._get_file(path) dir = self._get_dir(path) if not (file.exists() or dir.exists()): return False else: assert file.path.startswith(self.dir.path) assert dir.path.startswith(self.dir.path) file.cleanup() dir.remove_children() dir.cleanup() if isinstance(path, Page): path.haschildren = False # hascontent is determined based on file existence return True def trash_page(self, path): file = self._get_file(path) dir = self._get_dir(path) re = False if file.exists(): if not file.trash(): return False re = True if dir.exists(): re = dir.trash() or re dir.cleanup() if isinstance(path, Page): path.haschildren = False return re # It could be argued that we should use e.g. MD5 checksums to verify # integrity of the page content instead of mtime. It is true the mtime # can be unreliable, for example when files are read from a remote # network filesystem. However calculating the MD5 and refreshing the # index both require an operation on the actual file contents, so it is # more efficient to just re-index whenever the timestamps are out of # sync instead of calculating the MD5 for each page to be checked. def get_pagelist_indexkey(self, path): dir = self._get_dir(path) if dir.exists(): return dir.mtime() else: return None def get_page_indexkey(self, path): file = self._get_file(path) if file.exists(): try: return file.mtime() except OSError: # This should never happen - but it did, see lp:809086 logger.exception('BUG:') return None else: return None def get_attachments_dir(self, path): dir = StoreClass.get_attachments_dir(self, path) if not dir is None: dir = FilteredDir(dir) dir.ignore('*.txt') # FIXME hardcoded extension return dir class FileStorePage(Page): '''Implementation of L{Page} that has a file as source The source is expected to consist of an header section (which have the same format as email headers) and a body that is some dialect of wiki text. Parsing the source file is delayed till the first call to L{get_parsetree()} so creating an object instance does not have the overhead of file system access. @ivar source: the L{File} object for this page @ivar format: the L{zim.formats} sub-module used for parsing the file ''' def __init__(self, path, source=None, folder=None, format=None): assert source and format Page.__init__(self, path, haschildren=folder.exists()) self.source = source self.folder = folder self.format = format self.readonly = not self.source.iswritable() self.properties = None def isequal(self, other): print "IS EQUAL", self, other if not isinstance(other, FileStorePage): return False if self == other: # If object equal by definition they are the equal return True # If we have an existing source check it # If we have an existing folder check it # If either fails we are not equal # If both do not exist we are also not equal ok = False if self.source and self.source.exists(): ok = ( other.source and self.source.isequal(other.source) ) if not ok: return False if self.folder and self.folder.exists(): ok = ( other.folder and self.folder.isequal(other.folder) ) return ok def _source_hascontent(self): return self.source.exists() def _fetch_parsetree(self, lines=None): '''Fetch a parsetree from source or returns None''' #~ print '!! fetch tree', self ## Enable these lines to test error handling in the UI #~ import random #~ if random.random() > 0.5: #~ raise Exception, 'This is a test error' ### try: lines = lines or self.source.readlines() self.properties = HeadersDict() self.properties.read(lines) # TODO: detect other formats by the header as well if 'Wiki-Format' in self.properties: version = self.properties['Wiki-Format'] else: version = 'Unknown' parser = self.format.Parser(version) return parser.parse(lines) except FileNotFoundError: return None def _store(self): lines = self._dump() self._store_lines(lines) self.modified = False def _store_async(self): # Get lines before forking a new thread, otherwise the parsetree # could change in a non-atomic way in the GUI in the mean time lines = self._dump() self.modified = False #~ print '!! STORE PAGE ASYNC in files' func = FunctionThread(self._store_lines, (lines,)) func.start() return func def _store_lines(self, lines): ## Enable these lines to test error handling in the UI #~ import random #~ if random.random() > 0.5: #~ raise IOError, 'This is a test error' ### if lines: self.source.writelines(lines) else: # Remove the file - this is not the same as remove_page() self.source.cleanup() return True # Need to return True for async callback def _dump(self): '''Returns the page source''' tree = self.get_parsetree() if tree is None: raise AssertionError, 'BUG: Can not store a page without content' #~ print 'STORE', tree.tostring() if tree.hascontent: new = False if self.properties is None: self.properties = HeadersDict() new = True self.properties['Content-Type'] = 'text/x-zim-wiki' self.properties['Wiki-Format'] = WIKI_FORMAT_VERSION if new: now = datetime.now() self.properties['Creation-Date'] = now.isoformat() # Note: No "Modification-Date" here because it causes conflicts # when merging branches with version control, use mtime from filesystem # If we see this header, remove it because it will not be updated. try: del self.properties['Modification-Date'] except: pass lines = self.properties.dump() lines.append('\n') lines.extend(self.format.Dumper().dump(tree)) return lines else: return [] zim-0.65/zim/stores/xml.py0000664000175000017500000000577112374655231015427 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg '''This module reads an XML file defining zim pages. For now the only XML tags which are supported are 'section' and 'page'. The 'section' tag serves as a container for multiple pages. The 'page' tag serves as a container for the page content plus any sub-pages. Each page should have an attribute 'name' giving it's basename, so the file can look like this::
    Some text in page Foo This is text in page 'Foo:Bar'
    We read the whole file to memory, which puts certain limits on scalability. ''' # FUTURE: This module does not support attachments in the xml data import zim.stores.memory # importing class from this module makes get_store() fail from zim.formats import get_format, ElementTreeModule from zim.notebook import Path from zim.parsing import TextBuffer class XMLStore(zim.stores.memory.MemoryStore): properties = { 'read-only': True } def __init__(self, notebook, path, file=None): zim.stores.memory.MemoryStore.__init__(self, notebook, path) self.file = file if not self.store_has_file(): raise AssertionError, 'XMl store needs file' # not using assert here because it could be optimized away self.format = get_format('wiki') # FIXME store format in XML header if self.file.exists(): self.parse(self.file.read()) def store_page(self, page): memory.Store.store_page(self, page) self.file.writelines(self.dump()) def parse(self, content): if isinstance(content, list): content = ''.join(content) target = MemoryStoreTreeBuilder(self) builder = ElementTreeModule.XMLTreeBuilder(target=target) builder.feed(content) builder.close() def dump(self): text = TextBuffer([ u'\n', u'
    \n' ]) for node in self._nodetree: text += self._dump_node(node) text.append(u'
    \n') return text.get_lines() def _dump_node(self, node): text = [u'\n' % node.basename] if node.text: text.append(node.text) for n in node.children: text += self._dump_node(n) # recurs text.append('\n') return text class MemoryStoreTreeBuilder(object): def __init__(self, store): self.store = store self.path = Path(':') self.stack = [] def start(self, tag, attrib): if tag == 'section': pass elif tag == 'page': assert 'name' in attrib self.path = self.path + attrib['name'] node = self.store.get_node(self.path, vivificate=True) self.stack.append(node) else: assert False, 'Unknown tag' def data(self, data): if self.stack: node = self.stack[-1] if node.text: node.text += data else: node.text = data def end(self, tag): if tag == 'section': pass else: assert self.stack self.path = self.path.parent node = self.stack.pop() if node.text and node.text.isspace(): node.text = '' elif node.text: node.text = unicode(node.text.strip('\n') + '\n') def close(self): pass zim-0.65/zim/config/0000775000175000017500000000000012615422672014170 5ustar jaapjaap00000000000000zim-0.65/zim/config/dicts.py0000664000175000017500000007331412427637120015655 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2013 Jaap Karssenberg '''This module contains base classes to map config files to dicts The main classes are L{ConfigDict} and L{INIConfigFile}. The L{ConfigDict} defines a dictionary of config keys. To add a key in this dictionary it must first be defined using one of the sub-classes of L{ConfigDefinition}. This definition takes care of validating the value of the config keys and (de-)serializing the values from and to text representation used in the config files. The L{INIConfigFile} maps to a INI-style config file that defines multiple sections with config keys. It is represented as a dictionary where each key maps a to a L{ConfigDict}. Both derive from L{ControlledDict} which defines the C{changed} signal which can be used to track changes in the configuration. Typically these classes are not instantiated directly, but by the L{ConfigManager} defined in Lzim.config.manager}. ''' from __future__ import with_statement import sys import re import logging import types import collections import ast if sys.version_info >= (2, 6): import json # in standard lib since 2.6 else: #pragma: no cover import simplejson as json # extra dependency from zim.signals import SignalEmitter, ConnectorMixin from zim.utils import OrderedDict, FunctionThread from zim.fs import File, FileNotFoundError from zim.errors import Error from .basedirs import XDG_CONFIG_HOME logger = logging.getLogger('zim.config') class ControlledDict(OrderedDict, SignalEmitter, ConnectorMixin): '''Sub-class of C{OrderedDict} that tracks modified state. This modified state is recursive for nested C{ControlledDict}s. Used as base class for L{SectionedConfigDict}, L{ConfigDict} and L{HeadersDict}. @signal: C{changed ()}: emitted when content of this dict changed, or a nested C{ControlledDict} changed ''' def __init__(self, E=None, **F): OrderedDict.__init__(self, E, **F) self._modified = False # Note that OrderedDict optimizes __getitem__, cannot overload it def __setitem__(self, k, v): OrderedDict.__setitem__(self, k, v) if isinstance(v, ControlledDict): self.connectto(v, 'changed', self.on_child_changed) self.emit('changed') def __delitem__(self, k): v = OrderedDict.__delitem__(self, k) if isinstance(v, OrderedDict): self.disconnect_from(v) self.emit('changed') def update(self, E=(), **F): # Only emit changed once here with self.blocked_signals('changed'): OrderedDict.update(self, E, **F) self.emit('changed') def changed(self): self.emit('changed') def on_child_changed(self, v): self.emit('changed') def do_changed(self): self._modified = True @property def modified(self): '''C{True} when the values were modified, used to e.g. track when a config needs to be written back to file ''' return self._modified def set_modified(self, modified): '''Set the modified state. Used to reset modified to C{False} after the configuration has been saved to file. @param modified: C{True} or C{False} ''' if modified: self._modified = True else: self._modified = False for v in self.values(): if isinstance(v, ControlledDict): v.set_modified(False) class ConfigDefinition(object): '''Definition for a key in a L{ConfigDict}''' __slots__ = ('default', 'allow_empty') def __init__(self, default, allow_empty=False): self.default = default if default is None: allow_empty = True self.allow_empty = allow_empty self.check(default) # ensure that default follows check def __eq__(self, other): return self.__class__ == other.__class__ \ and self.allow_empty == other.allow_empty def __ne__(self, other): return not self.__eq__(other) def _check_allow_empty(self, value): if value in ('', None, 'None', 'null'): if self.allow_empty: return True else: raise ValueError, 'Value not allowed to be empty' else: return False def _eval_string(self, value): if not value: return value elif value[0] in ('{', '['): # Backward compatibility try: value = json.loads(value) except: pass else: try: value = ast.literal_eval(value) except: pass return value def check(self, value): '''Check C{value} to be a valid value for this key @raises ValueError: if value is invalid and can not be converted @returns: (converted) value if valid ''' raise NotImplementedError def tostring(self, value): return str(value) class ConfigDefinitionByClass(ConfigDefinition): '''Definition that enforces the value has to have a certain class Classes that have a C{new_from_zim_config()} method can convert values to the desired class. ''' # TODO fully get rid of this class and replace by specialized classes __slots__= ('klass',) def __init__(self, default, klass=None, allow_empty=False): if klass is None: klass = default.__class__ if issubclass(klass, basestring): self.klass = basestring else: self.klass = klass ConfigDefinition.__init__(self, default, allow_empty) def __eq__(self, other): return ConfigDefinition.__eq__(self, other) \ and self.klass == other.klass def check(self, value): if self._check_allow_empty(value): return None elif isinstance(value, basestring) \ and not self.klass is basestring: value = self._eval_string(value) if isinstance(value, self.klass): return value elif self.klass is tuple and isinstance(value, list): # Special case because json does not know difference list or tuple return tuple(value) elif hasattr(self.klass, 'new_from_zim_config'): # Class has special contructor (which can also raise ValueError) try: return self.klass.new_from_zim_config(value) except: logger.debug('Error while converting %s to %s', value, self.klass, exc_info=1) raise ValueError, 'Can not convert %s to %s' % (value, self.klass) else: raise ValueError, 'Value should be of type: %s' % self.klass.__name__ def tostring(self, value): if hasattr(value, 'serialize_zim_config'): return value.serialize_zim_config() else: return json.dumps(value, separators=(',',':')) # specify separators for compact encoding class Boolean(ConfigDefinition): '''This class defines a config key that maps to a boolean''' def check(self, value): if self._check_allow_empty(value): return None elif isinstance(value, bool): return value elif value in ('True', 'true', 'False', 'false'): return value in ('True', 'true') else: raise ValueError, 'Must be True or False' class String(ConfigDefinition): '''This class defines a config key that maps to a string''' # TODO support esacpe codes \s \t \n \r (see desktop / json spec) def __init__(self, default, allow_empty=False): if default == '': default = None ConfigDefinition.__init__(self, default, allow_empty) def check(self, value): if self._check_allow_empty(value): return None elif isinstance(value, basestring): return value elif hasattr(value, 'serialize_zim_config'): return value.serialize_zim_config() else: raise ValueError, 'Must be string' def tostring(self, value): if value is None: return '' else: return value class StringAllowEmpty(String): '''Like C{String} but defaults to C{allow_empty=True}''' # XXX needed by TaskList - remove when prefs are ported to use defs directly def __init__(self, default, allow_empty=True): String.__init__(self, default, allow_empty=True) class Integer(ConfigDefinition): '''This class defines a config key that maps to an integer value''' def check(self, value): if self._check_allow_empty(value): return None elif isinstance(value, int): return value else: try: return int(value) except: raise ValueError, 'Must be integer' class Float(ConfigDefinition): '''This class defines a config key that maps to a float''' def check(self, value): if self._check_allow_empty(value): return None elif isinstance(value, float): return value else: try: return float(value) except: raise ValueError, 'Must be integer' class Choice(ConfigDefinition): '''Definition that allows selecting a value from a given set Will be presented in the gui as a dropdown with a list of choices ''' __slots__ = ('choices',) # TODO - this class needs a type for the choices # could be simply commen type of list items, but we get # bitten because we allow tuples as needed for preferences # with label --> make that a dedicated feature def __init__(self, default, choices, allow_empty=False): self.choices = choices ConfigDefinition.__init__(self, default, allow_empty) def __eq__(self, other): return ConfigDefinition.__eq__(self, other) \ and self.choices == other.choices def check(self, value): if self._check_allow_empty(value): return None else: # Allow options that are not strings (e.g. tuples of strings) if isinstance(value, basestring) \ and not all(isinstance(t, basestring) for t in self.choices): value = self._eval_string(value) # HACK to allow for preferences with "choice" item that has # a list of tuples as argumnet if all(isinstance(t, tuple) for t in self.choices): choices = list(self.choices) + [t[0] for t in self.choices] else: choices = self.choices # convert json list to tuple if all(isinstance(t, tuple) for t in self.choices) \ and isinstance(value, list): value = tuple(value) if value in choices: return value elif isinstance(value, basestring) and value.lower() in choices: return value.lower() else: raise ValueError, 'Value should be one of %s' % unicode(choices) class Range(Integer): '''Definition that defines an integer value in a certain range''' __slots__ = ('min', 'max') def __init__(self, default, min, max): self.min = min self.max = max ConfigDefinition.__init__(self, default) def __eq__(self, other): return ConfigDefinition.__eq__(self, other) \ and (self.min, self.max) == (other.min, other.max) def check(self, value): value = Integer.check(self, value) if self._check_allow_empty(value): return None elif self.min <= value <= self.max: return value else: raise ValueError, 'Value should be between %i and %i' % (self.min, self.max) class Coordinate(ConfigDefinition): '''Class defining a config value that is a coordinate (i.e. a tuple of two integers). This is e.g. used to store for window coordinates. If the value is a list of two integers, it will automatically be converted to a tuple. ''' def __init__(self, default, allow_empty=False): if default == (None, None): allow_empty=True ConfigDefinition.__init__(self, default, allow_empty) def check(self, value): if isinstance(value, basestring): value = self._eval_string(value) if self._check_allow_empty(value) \ or value == (None, None) and self.allow_empty: return None else: if isinstance(value, list): value = tuple(value) if ( isinstance(value, tuple) and len(value) == 2 and isinstance(value[0], int) and isinstance(value[1], int) ): return value else: raise ValueError, 'Value should be a coordinate (tuple of 2 integers)' value_is_coord = Coordinate # XXX for backward compatibility _definition_classes = { str: String, unicode: String, basestring: String, int: Integer, float: Float, bool: Boolean, } def build_config_definition(default=None, check=None, allow_empty=False): '''Convenience method to construct a L{ConfigDefinition} object based on a default value an/or a check. ''' if default is None and check is None: raise AssertionError, 'At least provide either a default or a check' elif check is None: check = default.__class__ if isinstance(check, (type, types.ClassType)): # is a class if issubclass(check, ConfigDefinition): return check(default, allow_empty=allow_empty) elif check in _definition_classes: return _definition_classes[check](default, allow_empty) else: return ConfigDefinitionByClass(default, check, allow_empty) elif isinstance(check, (set, list)) \ or (isinstance(check, tuple) and not isinstance(default, int)): return Choice(default, check, allow_empty) elif isinstance(check, tuple) and isinstance(default, int): assert len(check) == 2 \ and isinstance(check[0], int) \ and isinstance(check[1], int) return Range(default, check[0], check[1]) else: raise ValueError, 'Unrecognized check type' class ConfigDict(ControlledDict): '''The class defines a dictionary of config keys. To add a key in this dictionary it must first be defined using one of the sub-classes of L{ConfigDefinition}. This definition takes care of validating the value of the config keys and (de-)serializing the values from and to text representation used in the config files. Both getting and setting a value will raise a C{KeyError} when the key has not been defined first. An C{ValueError} is raised when the value does not conform to the definition. THis class derives from L{ControlledDict} which in turn derives from L{OrderedDict} so changes to the config can be tracked by the C{changed} signal, and values are kept in the same order so the order in which items are written to the config file is predictable. ''' def __init__(self, E=None, **F): assert not (E and F) ControlledDict.__init__(self) self.definitions = OrderedDict() if E: self._input = dict(E) else: self._input = F def copy(self): '''Shallow copy of the items @returns: a new object of the same class with the same items ''' new = self.__class__() new.update(self) new._input.update(self._input) return new def update(self, E=None, **F): '''Like C{dict.update()}, copying values from C{E} or C{F}. However if C{E} is also a C{ConfigDict}, also the definitions are copied along. Do use C{update()} when setting multiple values at once since it results in emitting C{changed} only once. ''' if E and isinstance(E, ConfigDict): self.define( (k, E.definitions[k]) for k in E if not k in self ) ControlledDict.update(self, E, **F) def dump(self): '''Returns a dict that combines the defined keys with any undefined input keys. Used e.g. when you only define part of the keys in the dict, but want to preserve all of them when writing back to a file. ''' # TODO make this output ordered as well... dump = dict(self._input) dump.update(self) return dump # Note that OrderedDict optimizes __getitem__, cannot overload it def __setitem__(self, k, v): if k in self.definitions: try: v = self.definitions[k].check(v) except ValueError, error: raise ValueError, 'Invalid config value for %s: "%s" - %s' % (k, v, error.args[0]) else: ControlledDict.__setitem__(self, k, v) else: raise KeyError('Config key "%s" has not been defined' % k) def input(self, E=None, **F): '''Like C{update()} but won't raise on failures. Values for undefined keys are stored and validated once the key is defined. Invalid values only cause a logged error message but do not cause errors to be raised. ''' assert not (E and F) update = E or F if isinstance(update, collections.Mapping): items = update.items() else: items = update for key, value in items: if key in self.definitions: self._set_input(key, value) else: self._input[key] = value # validated later def define(self, E=None, **F): '''Set one or more defintions for this config dict Can cause error log when values prior given to C{input()} do not match the definition. ''' assert not (E and F) update = E or F if isinstance(update, collections.Mapping): items = update.items() else: items = update for key, definition in items: if key in self.definitions: if definition != self.definitions[key]: raise AssertionError, \ 'Key is already defined with different definition: %s\n%s != %s' \ % (key, definition, self.definitions[key]) else: continue self.definitions[key] = definition if key in self._input: value = self._input.pop(key) self._set_input(key, value) else: with self.blocked_signals('changed'): OrderedDict.__setitem__(self, key, definition.default) def _set_input(self, key, value): try: value = self.definitions[key].check(value) except ValueError, error: logger.warn( 'Invalid config value for %s: "%s" - %s', key, value, error.args[0] ) value = self.definitions[key].default with self.blocked_signals('changed'): OrderedDict.__setitem__(self, key, value) def setdefault(self, key, default, check=None, allow_empty=False): '''Set the default value for a configuration item. @note: Usage of this method with keyword arguments is depreciated, use L{define()} instead. Compatible with C{dict.setdefault()} but extended with functionality to check the value that is in the dict, and use the default if the value is mal-formed. This is used extensively in zim to do a sanity check on values in the configuration files. If you initialize the config items with this method you can assume them to be safe afterward and avoid a lot of checks or bugs later in the code. @param key: the dict key @param default: the default value for this key @param check: the check to do on the values, when the check fails the value is considered mal-formed and the default is used while a warning is logged. If C{check} is C{None} the default behavior will be to compare the classes of the set value and the default and enforce them to be of the same type. Automatic conversion is done for values of type C{list} with defaults of type C{tuple}. And for defaults of type C{str} or C{unicode} the C{basestring} type is used as check. As a special case when the default is C{None} the check is not allowed to be C{None} as well. If C{check} is given and it is a class the existing value will be checked to be of that class. Same special case for tuples and strings applies here. If C{check} is given and is a C{set}, C{list} or C{tuple} the value will be tested to be in this set or list. If the default is an integer and C{check} is a tuple of two integers, the check will be that the value is in this range. (For compatibility with L{InputForm} extra argument for integer spin boxes.) If C{check} is given and it is a function it will be used to check the value in the dictionary if it exists. The function is called as:: check(value, default) Where C{value} is the current value in the dict and C{default} is the default value that was provided. The function can not only check the value, it can also do on the fly modifications, e.g. to coerce it into a specific type. If the value is OK the function should return the (modified) value, if not it should raise an C{AssertionError}. When this error is raised the default is used and the dict is considered being modified. ( Note that 'assert' statements in the code can be removed by code optimization, so explicitly call "C{raise AssertionError}". ) Examples of functions that can be used as a check are: L{check_class_allow_empty} and L{value_is_coord}. @param allow_empty: if C{True} the value is allowed to be empty (either empty string or C{None}). In this case the default is not set to overwrite an empty value, but only for a mal-formed value or for a value that doesn't exist yet in the dict. ''' if key in self.definitions \ and check is None \ and allow_empty is False: # Real setdefault return ControlledDict.setdefault(self, key, default) else: # Define definition = build_config_definition(default, check, allow_empty) self.define({key: definition}) return self.__getitem__(key) class SectionedConfigDict(ControlledDict): '''Dict with multiple sections of config values Sections are auto-vivicated when a non-existing item is retrieved. ''' def __setitem__(self, k, v): assert isinstance(v, (ControlledDict, list)) # FIXME shouldn't we get rid of the list option here ? ControlledDict.__setitem__(self, k, v) def __getitem__(self, k): try: return ControlledDict.__getitem__(self, k) except KeyError: with self.blocked_signals('changed'): ControlledDict.__setitem__(self, k, ConfigDict()) return ControlledDict.__getitem__(self, k) class INIConfigFile(SectionedConfigDict): '''Dict to represent a configuration file in "ini-style". Since the ini-file is devided in section this is represented as a dict of dicts. This class represents the top-level with a key for each section. The values are in turn L{ConfigDict}s which contain the key value pairs in that section. A typical file might look like:: [Section1] param1=foo param2=bar [Section2] enabled=True data={'foo': 1, 'bar': 2} (The values are parsed by the L{ConfigDefinition} for each key) By default when parsing sections of the same name they will be merged and values that appear under the same section name later in the file will overwrite values that appeared earlier. As a special case we can support sections that repeat under the same section name. To do this assign the section name a list before parsing. Sections and parameters whose name start with '_' are considered as private and are not stored when the config is written to file. This can be used for caching values that should not be persistent across instances. ''' # TODO get rid of the read() and write() methods here # separate the dict object from the file object # let parse() and dump() take a file-like object def __init__(self, file, monitor=False): '''Constructor @param file: a L{File} or L{ConfigFile} object for reading and writing the config. @param monitor: if C{True} will listen to the C{changed} signal of the file object and update the dict accordingly. Leave C{False} for objects with a short life span. ''' SectionedConfigDict.__init__(self) self.file = file try: with self.blocked_signals('changed'): self.read() self.set_modified(False) except FileNotFoundError: pass if monitor: self.connectto(self.file, 'changed', self.on_file_changed) def on_file_changed(self, *a): if self.file.check_has_changed_on_disk(): try: with self.blocked_signals('changed'): self.read() except FileNotFoundError: pass else: # First emit top level to allow general changes self.emit('changed') with self.blocked_signals('changed'): for section in self.values(): section.emit('changed') self.set_modified(False) def read(self): '''Read data from file''' assert not self.modified, 'dict has unsaved changes' logger.debug('Loading config from: %s', self.file) self.parse(self.file.readlines()) # Will fail with FileNotFoundError if file does not exist def parse(self, text): '''Parse an "ini-style" configuration. Fills the dictionary with values from this text, wil merge with existing sections and overwrite existing values. @param text: a string or a list of lines ''' # Note that we explicitly do _not_ support comments on the end # of a line. This is because "#" could be a valid character in # a config value. if isinstance(text, basestring): text = text.splitlines(True) section = None values = [] for line in text: line = line.strip() if not line or line.startswith('#'): continue elif line.startswith('[') and line.endswith(']'): if values: section.input(values) values = [] name = line[1:-1].strip() section = self[name] elif '=' in line: if section is None: logger.warn('Parameter outside section: %s', line) else: key, string = line.split('=', 1) values.append((str(key.rstrip()), string.lstrip())) # key is not unicode else: logger.warn('Could not parse line: %s', line) else: if values: section.input(values) def write(self): '''Write data and set C{modified} to C{False}''' self.file.writelines(self.dump()) self.set_modified(False) def write_async(self): '''Write data asynchronously and set C{modified} to C{False} @returns: an L{FunctionThread} object ''' func = FunctionThread( self.file, self.file.writelines, self.dump()) func.start() self.set_modified(False) return func def dump(self): '''Serialize the config to a "ini-style" config file. @returns: a list of lines with text in "ini-style" formatting ''' lines = [] def dump_section(name, section): try: lines.append('[%s]\n' % name) for key, value in section.items(): if not key.startswith('_'): lines.append('%s=%s\n' % (key, section.definitions[key].tostring(value))) lines.append('\n') except: logger.exception('Dumping section [%s] failed:\n%r', name, section) for name, section in self.items(): if section and not name.startswith('_'): if isinstance(section, list): for s in section: dump_section(name, s) else: dump_section(name, section) return lines class HeaderParsingError(Error): '''Error when parsing a L{HeadersDict}''' description = '''\ Invalid data was found in a block with headers. This probably means the header block was corrupted and can not be read correctly.''' def __init__(self, line): self.msg = 'Invalid header >>%s<<' % line.strip('\n') class HeadersDict(ControlledDict): '''This class maps a set of headers in the rfc822 format. Can e.g. look like:: Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2010-12-14T14:15:09.134955 Header names are always kept in "title()" format to ensure case-insensitivity. ''' _is_header_re = re.compile('^([\w\-]+):\s+(.*)') _is_continue_re = re.compile('^(\s+)(?=\S)') def __init__(self, text=None): '''Constructor @param text: the header text, passed on to L{parse()} ''' OrderedDict.__init__(self) if not text is None: self.parse(text) def __getitem__(self, k): return OrderedDict.__getitem__(self, k.title()) def __setitem__(self, k, v): return OrderedDict.__setitem__(self, k.title(), v) def read(self, lines): '''Checks for headers at the start of the list of lines and read them into the dict until the first empty line. Will remove any lines belonging to the header block from the original list, so after this method returns the input does no longer contain the header block. @param lines: a list of lines ''' self._parse(lines, fatal=False) if lines and lines[0].isspace(): lines.pop(0) def parse(self, text): '''Adds headers defined in 'text' to the dict. Trailing whitespace is ignored. @param text: a header block, either as string or as a list of lines. @raises HeaderParsingError: when C{text} is not a valid header block ''' if isinstance(text, basestring): lines = text.rstrip().splitlines(True) else: lines = text[:] # make copy so we do not destry the original self._parse(lines) def _parse(self, lines, fatal=True): header = None while lines: is_header = self._is_header_re.match(lines[0]) if is_header: header = is_header.group(1) value = is_header.group(2) self[header] = value.strip() elif self._is_continue_re.match(lines[0]) and not header is None: self[header] += '\n' + lines[0].strip() else: if fatal: raise HeaderParsingError, lines[0] else: break lines.pop(0) def dump(self, strict=False): '''Serialize the dict to a header block in rfc822 header format. @param strict: if C{True} lines will be properly terminated with '\\r\\n' instead of '\\n'. @returns: the header block as a list of lines ''' buffer = [] for k, v in self.items(): v = v.strip().replace('\n', '\n\t') buffer.extend((k, ': ', v, '\n')) text = ''.join(buffer) if strict: text = text.replace('\n', '\r\n') return text.splitlines(True) class HierarchicDict(object): '''This class implements a data store that behaves as a hierarchig dict of dicts. Each key in this object is considered a hierarchic path (the path separator is ':' for obvious reasons). The dict for each key will "inherit" all values from parent paths. However setting a new value will set it specifically for that key, without changing the value in the "parents". This is specifically used to store namespace properties for zim notebooks. So each child namespace will inherit the properties of it's parents unless it was explicitly set for that child namespace. There is a special member dict stored under the key "__defaults__" which has the top-level fallback properties. Child dicts are auto-vivicated, so this object only implements C{__getitem__()} but no C{__setitem__()}. ''' # Note that all the magic is actually implemented by HierarchicDictFrame __slots__ = ('dict',) def __init__(self, defaults=None): '''Constructor @param defaults: dict with the default properties ''' self.dict = {} self.dict['__defaults__'] = defaults or {} def __getitem__(self, k): if not isinstance(k, basestring): k = k.name # assume zim path return HierarchicDictFrame(self.dict, k) class HierarchicDictFrame(object): '''Object acts as a member dict for L{HierarchicDict}''' __slots__ = ('dict', 'key') def __init__(self, dict, key): '''Constructor @param dict: the dict used to store the properties per namespace (internal in HierarchicDict) @param key: the key for this member dict ''' self.dict = dict self.key = key def _keys(self): yield self.key parts = self.key.split(':') parts.pop() while parts: yield ':'.join(parts) parts.pop() yield '' # top level namespace def get(self, k, default=None): try: v = self.__getitem__(k) except KeyError: return default else: return v def __getitem__(self, k): for key in self._keys(): if key in self.dict and k in self.dict[key]: return self.dict[key][k] else: if k in self.dict['__defaults__']: return self.dict['__defaults__'][k] else: raise KeyError def __setitem__(self, k, v): if not self.key in self.dict: self.dict[self.key] = {} self.dict[self.key][k] = v def remove(self, k): if self.key in self.dict and k in self.dict[self.key]: return self.dict[self.key].pop(k) else: raise KeyError zim-0.65/zim/config/__init__.py0000664000175000017500000000642112374655231016305 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2013 Jaap Karssenberg from .basedirs import * from .dicts import * from .manager import * '''This module defines all functions and objects related to the application config. The sub module L{zim.config.manager} contains that L{ConfigManager} object, which is the main object to access configuration files. In L{zim.config.dicts} a number of classes are defined that represent configuration files as dictionaries. And classes to define the config options that are used and how to validate those. The file system paths where to search for config files are defined in L{zim.config.basedirs}. ''' # FIXME - when XDG variables in basedirs.py change, they don't change # in this module ... # should they move to their own module ? # TODO: Define a ResourceManager for loading resources (icons, # images, templates, ..) # Singleton class # Avoid using basedirs directly elsewhere in the code # TODO: resources like icons etc can be managed by a Singleton ResourceManager def data_dirs(path=None): '''Generator listing paths that contain zim data files in the order that they should be searched. These will be the equivalent of e.g. "~/.local/share/zim", "/usr/share/zim", etc. @param path: a file path relative to to the data dir, including this will list sub-folders with this relative path. @returns: yields L{Dir} objects for the data dirs ''' zimpath = ['zim'] if path: if isinstance(path, basestring): path = [path] assert not path[0] == 'zim' zimpath.extend(path) yield XDG_DATA_HOME.subdir(zimpath) if ZIM_DATA_DIR: if path: yield ZIM_DATA_DIR.subdir(path) else: yield ZIM_DATA_DIR for dir in XDG_DATA_DIRS: yield dir.subdir(zimpath) def data_dir(path): '''Get an data dir sub-folder. Will look up C{path} relative to all data dirs and return the first one that exists. Use this function to find any folders from the "data/" folder in the source package. @param path: a file path relative to to the data dir @returns: a L{Dir} object or C{None} ''' for dir in data_dirs(path): if dir.exists(): return dir else: return None def data_file(path): '''Get a data file. Will look up C{path} relative to all data dirs and return the first one that exists. Use this function to find any files from the "data/" folder in the source package. @param path: a file path relative to to the data dir (e.g. "zim.png") @returns: a L{File} object or C{None} ''' for dir in data_dirs(): file = dir.file(path) if file.exists(): return file else: return None def user_dirs(): '''Get the XDG user dirs. @returns: a dict with directories for the XDG user dirs. These are typically defined in "~/.config/user-dirs.dirs". Common user dirs are: "XDG_DESKTOP_DIR", "XDG_DOWNLOAD_DIR", etc. If no definition is found an empty dict will be returned. ''' dirs = {} file = XDG_CONFIG_HOME.file('user-dirs.dirs') try: for line in file.readlines(): line = line.strip() if line.isspace() or line.startswith('#'): continue else: try: assert '=' in line key, value = line.split('=', 1) value = os.path.expandvars(value.strip('"')) dirs[key] = Dir(value) except: logger.exception('Exception while parsing %s', file) except FileNotFoundError: pass return dirs zim-0.65/zim/config/manager.py0000664000175000017500000002450012374655231016156 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2013 Jaap Karssenberg from __future__ import with_statement from weakref import WeakValueDictionary from . import basedirs from .dicts import INIConfigFile from zim.fs import FileNotFoundError from zim.signals import ConnectorMixin, SignalEmitter, SignalHandler class ConfigManager(object): '''This class defines an object that manages a set of config files. The config manager abstracts the lookup of files using the XDG search paths and ensures that there is only a single instance used for each config file. The config manager can switch the config file based on the config X{profile} that is used. The profile is determined by the notebook properties. However this object relies on it's creator to setup the hooks to get the property from the notebook. Changes to the profile are communicated to all users of the config by means of the "changed" signals on L{ConfigFile} and L{ConfigDict} objects. ''' def __init__(self, dir=None, dirs=None, profile=None): '''Constructor @param dir: the folder for reading and writing config files, e.g. a C{Dir} or a C{VirtualConfigBackend} objects. If no dir is given, the XDG basedirs are used and C{dirs} is ignored. @param dirs: list or generator of C{Dir} objects used as search path when a config file does not exist on C{dir} @param profile: initial profile name ''' self.profile = profile self._config_files = WeakValueDictionary() self._config_dicts = WeakValueDictionary() if dir is None: assert dirs is None, "Do not provide 'dirs' without 'dir'" self._dir = dir self._dirs = dirs def set_profile(self, profile): '''Set the profile to use for the configuration @param profile: the profile name or C{None} ''' assert profile is None or isinstance(profile, basestring) if profile != self.profile: self.profile = profile for path, conffile in self._config_files.items(): if path.startswith('/'): file, defaults = self._get_file(path) conffile.set_files(file, defaults) # Updates will cascade through the dicts by the # "changed" signals on various objects def _get_file(self, filename): basepath = filename.replace('/', '') if self.profile: path = filename.replace('/', 'profiles/%s/' % self.profile) else: path = basepath if self._dir: file = self._dir.file(path) if self._dirs: defaults = DefaultFileIter(self._dirs, path) else: defaults = DefaultFileIter([], path) if self.profile and filename.startswith('/'): mypath = filename.replace('/', '') defaults.extra.insert(0, self._dir.file(mypath)) else: file = basedirs.XDG_CONFIG_HOME.file('zim/' + path) defaults = XDGConfigFileIter(basepath) ## Backward compatibility for profiles if self.profile \ and filename in ( '/preferences.conf', '/style.conf' ): backwardfile = self._get_backward_file(filename) defaults.extra.insert(0, backwardfile) return file, defaults def _get_backward_file(self, filename): if filename == '/preferences.conf': path = 'profiles/%s.conf' % self.profile elif filename == '/style.conf': path = 'styles/%s.conf' % self.profile else: raise AssertionError if self._dir: return self._dir.file(path) else: return basedirs.XDG_CONFIG_HOME.file('zim/' + path) def get_config_file(self, filename): '''Returns a C{ConfigFile} object for C{filename}''' if filename not in self._config_files: file, defaults = self._get_file(filename) config_file = ConfigFile(file, defaults) self._config_files[filename] = config_file return self._config_files[filename] def get_config_dict(self, filename): '''Returns a C{SectionedConfigDict} object for C{filename}''' if filename not in self._config_dicts: file = self.get_config_file(filename) config_dict = ConfigManagerINIConfigFile(file) self._config_dicts[filename] = config_dict return self._config_dicts[filename] #def get_all_config_files(filename) - iterate multiple values ? #def get_config_section(filename, section): - return section def VirtualConfigManager(**data): return ConfigManager(VirtualConfigBackend(**data)) class DefaultFileIter(object): '''Generator for iterating default files Will yield first the files in C{extra} followed by files that are based on C{path} and C{dirs}. Yields only existing files. ''' def __init__(self, dirs, path, extra=None): self.path = path self.dirs = dirs self.extra = extra or [] def __iter__(self): for file in self.extra: if file.exists(): yield file for dir in self.dirs: file = dir.file(self.path) if file.exists(): yield file class XDGConfigDirsIter(object): '''Generator for iterating XDG config dirs Yields the "zim" subdir of each XDG config file. ''' def __iter__(self): from . import data_dirs # XXX yield basedirs.XDG_CONFIG_HOME.subdir(('zim')) for dir in basedirs.XDG_CONFIG_DIRS: yield dir.subdir(('zim')) for dir in data_dirs(): yield dir class XDGConfigFileIter(DefaultFileIter): '''Like C{DefaultFileIter}, but uses XDG config dirs''' def __init__(self, path, extra=None): self.path = path self.dirs = XDGConfigDirsIter() self.extra = extra or [] class ConfigManagerINIConfigFile(INIConfigFile): '''Like L{INIConfigFile} but with autosave when the dict changes''' def __init__(self, file): INIConfigFile.__init__(self, file, monitor=True) self.connect_after('changed', self.on_changed) # autosave on changing the dict, connect after # regular handlers to avoid getting stuck with a set @SignalHandler def on_changed(self, *a): with self.on_file_changed.blocked(): self.write() @SignalHandler def on_file_changed(self, *a): with self.on_changed.blocked(): INIConfigFile.on_file_changed(self, *a) class ConfigFile(ConnectorMixin, SignalEmitter): '''Container object for a config file Maps to a "base" file in the home folder, used to write new values, and an optional default file, which is used for reading only. @ivar file: the underlying file object for the base config file in the home folder @ivar defaults: a generator that yields default files @note: this class implement similar API to the L{File} class but is explicitly not a sub-class of L{File} because config files should typically not be moved, renamed, etc. It just implements the reading and writing methods. @signal: C{changed ()}: emitted when the underlying file changed (based on C{gio} monitoring support) or for file monitors or on profile switched ''' # TODO __signals__ def __init__(self, file, defaults=None): self.file = None self.defaults = None with self.blocked_signals('changed'): self.set_files(file, defaults) def __repr__(self): return '<%s: %s>' % (self.__class__.__name__, self.file.path) def __eq__(self, other): return isinstance(other, ConfigFile) \ and other.file == self.file def set_files(self, file, defaults=None): if self.file: self.disconnect_from(self.file) self.file = file self.defaults = defaults or [] #~ self.connectto(self.file, 'changed', self.on_file_changed) self.emit('changed') #~ def on_file_changed(self, file, *a): #~ print "CONF FILE changed:", file # TODO verify etag (we didn't write ourselves) #~ self.emit('changed') def check_has_changed_on_disk(self): return True # we do not emit the signal if it is not real... @property def basename(self): return self.file.basename def touch(self): '''Ensure the custom file in the home folder exists. Either by copying a default config file, or touching an empty file. Intended to be called before trying to edit the file with an external editor. ''' if not self.file.exists(): for default in self.defaults: default.copyto(self.file) break else: self.file.touch() # create empty file def read(self, fail=False): '''Read the base file or first default file @param fail: if C{True} a L{FileNotFoundError} error is raised when neither the base file or a default file are found. If C{False} it will return C{''} for a non-existing file. @returns: file content as a string ''' try: return self.file.read() except FileNotFoundError: for default in self.defaults: return default.read() else: if fail: raise else: return '' def readlines(self, fail=False): '''Read the base file or first default file @param fail: if C{True} a L{FileNotFoundError} error is raised when neither the base file or a default file are found. If C{False} it will return C{[]} for a non-existing file. @returns: file content as a list of lines ''' try: return self.file.readlines() except FileNotFoundError: for default in self.defaults: return default.readlines() else: if fail: raise else: return [] def write(self, text): '''Write base file, see L{File.write()}''' self.file.write(text) def writelines(self, lines): '''Write base file, see L{File.writelines()}''' self.file.writelines(lines) def remove(self): '''Remove user file, leaves default files in place''' if self.file.exists(): return self.file.remove() class VirtualConfigBackend(object): '''Virtual dir, mainly used for testing''' def __init__(self, **data): self._data = data def file(self, path): return VirtualConfigBackendFile(self._data, path) class VirtualConfigBackendFile(object): '''Virtual file, mainly used for testing''' def __init__(self, data, path): self._key = path self._data = data @property def path(self): return '/' + self._key @property def basename(self): import os return os.path.basename(self.path) def connect(self, handler, *a): pass def disconnect(self, handler): pass def exists(self): return self._key in self._data \ and self._data[self._key] is not None def touch(self): self._data.setdefault(self._key, '') def copyto(self, other): text = self.read() other.write(text) def read(self): try: text = self._data[self._key] except KeyError: raise FileNotFoundError(self) else: if text is None: raise FileNotFoundError(self) else: return text def readlines(self): text = self.read() return text.splitlines(True) def write(self, text): self._data[self._key] = text or '' def writelines(self, lines): self._data[self._key] = ''.join(lines) or '' def remove(self): del self._data[self._key] zim-0.65/zim/config/basedirs.py0000664000175000017500000000631012613745417016341 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2013 Jaap Karssenberg '''This module defines the search path for zim config files following the freedesktop.org (XDG) Base Dir specification. ''' import os import logging from zim.fs import File, Dir from zim.environ import environ logger = logging.getLogger('zim.config') ## Initialize config paths ZIM_DATA_DIR = None #: 'data' dir relative to script file (when running from source), L{Dir} or C{None} XDG_DATA_HOME = None #: L{Dir} for XDG data home XDG_DATA_DIRS = None #: list of L{Dir} objects for XDG data dirs path XDG_CONFIG_HOME = None #: L{Dir} for XDG config home XDG_CONFIG_DIRS = None #: list of L{Dir} objects for XDG config dirs path XDG_CACHE_HOME = None #: L{Dir} for XDG cache home def set_basedirs(): '''This method sets the global configuration paths for according to the freedesktop basedir specification. Called automatically when module is first loaded, should be called explicitly only when environment has changed. ''' global ZIM_DATA_DIR global XDG_DATA_HOME global XDG_DATA_DIRS global XDG_CONFIG_HOME global XDG_CONFIG_DIRS global XDG_CACHE_HOME # Cast string to folder import zim zim_data_dir = File(zim.ZIM_EXECUTABLE).dir.subdir('data') if zim_data_dir.exists(): ZIM_DATA_DIR = zim_data_dir if os.name == 'nt': APPDATA = environ['APPDATA'] XDG_DATA_HOME = Dir( environ.get('XDG_DATA_HOME', APPDATA + r'\zim\data')) XDG_DATA_DIRS = map(Dir, environ.get_list('XDG_DATA_DIRS', '~/.local/share/')) # Backwards compatibility XDG_CONFIG_HOME = Dir( environ.get('XDG_CONFIG_HOME', APPDATA + r'\zim\config')) XDG_CONFIG_DIRS = map(Dir, environ.get_list('XDG_CONFIG_DIRS', '~/.config/')) # Backwards compatibility try: import _winreg as wreg wreg_key = wreg.OpenKey( wreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders') cache_dir = str(wreg.QueryValueEx(wreg_key, "Cache")[0].replace(u'%USERPROFILE%', environ['USERPROFILE'])) wreg.CloseKey(wreg_key) except: cache_dir = APPDATA + r'\zim\cache' # Not using TMP here because it is cleaned too often XDG_CACHE_HOME = Dir( environ.get('XDG_CACHE_HOME', cache_dir + r'\zim')) else: XDG_DATA_HOME = Dir( environ.get('XDG_DATA_HOME', '~/.local/share/')) XDG_DATA_DIRS = map(Dir, environ.get_list('XDG_DATA_DIRS', ('/usr/share/', '/usr/local/share/'))) XDG_CONFIG_HOME = Dir( environ.get('XDG_CONFIG_HOME', '~/.config/')) XDG_CONFIG_DIRS = map(Dir, environ.get_list('XDG_CONFIG_DIRS', ('/etc/xdg/',))) XDG_CACHE_HOME = Dir( environ.get('XDG_CACHE_HOME', '~/.cache')) # Call on module initialization to set defaults set_basedirs() def log_basedirs(): '''Write the search paths used to the logger, used to generate debug output ''' if ZIM_DATA_DIR: logger.debug('Running from a source dir: %s', ZIM_DATA_DIR.dir) else: logger.debug('Not running from a source dir') logger.debug('Set XDG_DATA_HOME to %s', XDG_DATA_HOME) logger.debug('Set XDG_DATA_DIRS to %s', XDG_DATA_DIRS) logger.debug('Set XDG_CONFIG_HOME to %s', XDG_CONFIG_HOME) logger.debug('Set XDG_CONFIG_DIRS to %s', XDG_CONFIG_DIRS) logger.debug('Set XDG_CACHE_HOME to %s', XDG_CACHE_HOME) zim-0.65/zim/history.py0000664000175000017500000002477512374655231015016 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg '''This module implements the history for navigating pages in the notebook. The main class is L{History}. Also there is a specialized class L{HistoryPath} which extends L{Path} with history information. ''' import gobject import logging from zim.notebook import Path from zim.config import json MAX_HISTORY = 25 MAX_RECENT = 10 logger = logging.getLogger('zim.history') class HistoryPath(Path): '''Path with some additional info from the history. @ivar cursor: cursor position as integer offset from start of the text buffer @ivar scroll: scroll position of the text view as integer @ivar is_first: C{True} when this is the first path in the history @ivar is_last: C{True} when this is the last path in the history ''' __slots__ = ('cursor', 'scroll', 'is_first', 'is_last') def __init__(self, name, cursor=None, scroll=None): Path.__init__(self, name) self.scroll = scroll self.cursor = cursor self.is_first = False self.is_last = False class RecentPath(Path): pass class HistoryList(list): '''A list of L{HistoryPath}s which takes care of serialization when saving in a config file, and de-serialization on construction. ''' def __init__(self, list): '''Constructor @param list: a list of 3-tuples giving path name, cursor position and scroll position. Will be converted in a list with L{HistoryPath}s ''' try: for name, cursor, scroll in list: self.append(HistoryPath(name, cursor, scroll)) except: logger.exception('Could not parse history list:') def __getitem__(self, i): path = list.__getitem__(self, i) if i == 0: path.is_first = True path.is_last = False elif i == len(self) - 1: path.is_first = False path.is_last = True else: path.is_first = False path.is_last = False return path def index(self, path): ids = [id(p) for p in self] return ids.index(id(path)) def serialize_zim_config(self): '''Serialize to string @returns: the list content as a json formatted string ''' data = [(path.name, path.cursor, path.scroll) for path in self] return json.dumps(data, separators=(',',':')) class History(gobject.GObject): '''History class, keeps track of a list of L{HistoryPath} objects. Also has a 'current' page which should match the current page in the interface. The current page normally is the latest page in the list, but when the user navigates back in the history it can be another position. @ivar notebook: the L{Notebook} @ivar uistate: the L{ConfigDict} used to store the history @signal: C{changed ()}: emitted when the path list changed ''' # We keep two stacks: # _history (== uistate['list']) # _recent (== uistate['recent']) # # The first is a list of pages as they were accesed in time, # the second is a list of recent pages that were seen in order they # were seen. Most of the time these two lists are duplicate, but if # the user navigates back and then clicks a link part of the _history # stack is dropped. In that case the _recent stack has pages that are # not in the history. # Both stacks keep history objects that have a cursor position etc. # and methods like get_child() and get_path() use data in both stacks. # # The prorperty _current holds an index of the _history stack pointing # to the current page. # # Note that the cursor position is set directly into the HistoryPath object # in the GtkInterface do_close_page event # # FIXME: if we also store the cursor in the recent pages it gets # remembered longer # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'changed': (gobject.SIGNAL_RUN_LAST, None, tuple()) } def __init__(self, notebook, uistate=None): '''Constructor @param notebook: a L{Notebook} object @param uistate: L{SectionedConfigDict} to store the history (history will use the 'History' section in ConfigDict) ''' gobject.GObject.__init__(self) self.notebook = notebook if uistate is None: self.uistate = {} else: self.uistate = uistate['History'] # Initialize history list and ensure current is within range # previous version (<= 0.49) used attributes 'pages' and 'history' # so we can not use those without breaking backward compatibility self.uistate.setdefault('list', []) self.uistate.setdefault('recent', []) self.uistate.setdefault('current', len(self._history)-1) self.uistate['list'] = HistoryList(self.uistate['list']) self.uistate['recent'] = HistoryList(self.uistate['recent']) if self._current < 0 or self._current > len(self._history) - 1: self._current = len(self._history)-1 # Initialize recent if it didn;t exist (was introduced version 0.55) # Add all items, then go back to last position if self._history and not self._recent: for p in self._history: self._update_recent(p) for i in range(len(self._history)-1, self._current-1, -1): p = self._history[i] self._update_recent(p) # Connect to notebook self.notebook.connect('moved-page', self._on_page_moved) self.notebook.connect('deleted-page', self._on_page_deleted) # read / write property _current = property( lambda self: self.uistate['current'], lambda self, value: self.uistate.__setitem__('current', value) ) @property def _history(self): return self.uistate['list'] @property def _recent(self): return self.uistate['recent'] def _on_page_deleted(self, nb, page): # Remove deleted pages from recent f = lambda p: p == page or p.ischild(page) changed = False for path in filter(f, self._recent): self._recent.remove(path) changed = True if changed: self.emit('changed') def _on_page_moved(self, nb, oldpath, newpath, update_links): # Update paths to reflect new position while keeping other data changed = False for list in (self._history, self._recent): for path in list: if path == oldpath: path.name = newpath.name changed = True elif path.ischild(oldpath): newchild = newpath + path.relname(oldpath) path.name = newchild.name changed = True if changed: self.emit('changed') def append(self, path): '''Append a new page to the history. Will drop the forward stack and make this page the latest page. @param path: L{Path} for the current page @emits: changed ''' if self._history and self._history[self._current] == path: pass # prevent duplicate entries in a row else: # drop forward stack while len(self._history) - 1 > self._current: self._history.pop() # purge old entries while len(self._history) >= MAX_HISTORY: self._history.pop(0) # append new page historypath = HistoryPath(path.name) self._history.append(historypath) self._current = len(self._history) - 1 # this assignment always triggers "modified" on the ControlledDict if not isinstance(path, RecentPath): self._update_recent(historypath) self.emit('changed') def _update_recent(self, path): # Make sure current page is on top of recent stack if self._recent and path == self._recent[-1]: return False if path in self._recent: self._recent.remove(path) while len(self._recent) >= MAX_RECENT: self._recent.pop(0) self._recent.append(path) return True def get_current(self): '''Get current path @returns: a L{HistoryPath} object ''' if self._history: return self._history[self._current] else: return None def set_current(self, path): '''Set current path (changes the pointer, does not change the list of pages) @param path: a L{HistoryPath} object @raises ValueError: when the path is not in the history list ''' assert isinstance(path, HistoryPath) self._current = self._history.index(path) # fails if path not in history if not isinstance(path, RecentPath) \ and self._update_recent(path): self.emit('changed') def get_previous(self): '''Get the previous path @returns: a L{HistoryPath} object or C{None} if current is already the first path in the list ''' if len(self._history) > 1 and self._current > 0: return self._history[self._current - 1] else: return None def get_next(self): '''Get the next path @returns: a L{HistoryPath} object or C{None} if current is already the last path in the list ''' if self._current < len(self._history) - 1: return self._history[self._current + 1] else: return None def get_child(self, path): '''Get the most recent path that is a direct child of the given path. If there is a recent grand-child of the given path in the history, that will be used as a bases to get a new L{Path} object. Used by the keybinding for navigating to child pages. @param path: a L{Path} object @returns: a L{HistoryPath} or L{Path} object or C{None} ''' for list in (self._history, self._recent): for p in reversed(list): if p.ischild(path): relname = p.relname(path) if ':' in relname: basename = relname.split(':')[0] return path + basename else: return path + relname else: return None def get_grandchild(self, path): '''Get the deepest nested grand-child of a given path. Used for the 'namespace' pathbar to keep showing child pages when the user navigates up. @param path: a L{Path} object @returns: a L{HistoryPath} object or C{None} ''' child = path for list in (self._history, self._recent): for p in reversed(list): if p.ischild(child): child = p if child == path: return None else: return Path(child.name) # Force normal Path def get_state(self, path): '''Looks through the history and recent pages to the last known cursor position for a page. @param path: a L{Path} object @returns: a tuple of cursor and scroll position for C{path} or C{(None, None)} ''' for list in (self._history, self._recent): for record in reversed(list): if record == path \ and not record.cursor is None: return record.cursor, record.scroll else: return None, None def get_history(self): '''Generator function that yields history records, latest first @returns: yields L{HistoryPath} objects ''' # Generator to avoid external acces to the list for p in reversed(self._history): yield p def get_recent(self): '''Generator function that yields recent pages @returns: yields L{RecentPath} objects ''' # Generator to avoid external acces to the list for p in reversed(self._recent): yield RecentPath(p.name) # yield Path instead of HistoryPath because that # would make the applciation think we are opening # from history. Opening from recent pages should # be like normal navigation instead. gobject.type_register(History) zim-0.65/zim/datetimetz.py0000664000175000017500000002073212600757111015444 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2010-2013 Jaap Karssenberg '''Thin wrapper for 'datetime' module from the standard library. Provides timezone info for the local time. Based on example code from standard library datetime documentation. Main usage of this module is the function L{now()}. It imports all from the standard datetime, so it can be used as a transparant replacement. Also adds a L{strfcal()} method and extends L{strftime()} to deal with weeknumbers correctly. ''' import re import locale from datetime import * import logging logger = logging.getLogger('zim') def now(): '''Like C{datetime.now()} but with local timezone info''' # Also setting microsecond to zero, to give isoformat() a nicer look return datetime.now(LocalTimezone()).replace(microsecond=0) # A class capturing the platform's idea of local time. import time as _time ZERO = timedelta(0) STDOFFSET = timedelta(seconds = -_time.timezone) if _time.daylight: DSTOFFSET = timedelta(seconds = -_time.altzone) else: DSTOFFSET = STDOFFSET DSTDIFF = DSTOFFSET - STDOFFSET class LocalTimezone(tzinfo): '''Implementation of tzinfo with the current time zone, based on the platform's idea of local time ''' def utcoffset(self, dt): if self._isdst(dt): return DSTOFFSET else: return STDOFFSET def dst(self, dt): if self._isdst(dt): return DSTDIFF else: return ZERO def tzname(self, dt): return _time.tzname[self._isdst(dt)] def _isdst(self, dt): tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1) stamp = _time.mktime(tt) tt = _time.localtime(stamp) return tt.tm_isdst > 0 # Initialize setting for first day of the week. This is locale # dependent, and the gtk.Calendar widget already has good code to find it out. # Unfortunately, the widget keeps that data private *%#*$()()*) ! MONDAY = 0 # iso calendar starts week at Monday SUNDAY = 6 FIRST_DAY_OF_WEEK = None def init_first_day_of_week(): global FIRST_DAY_OF_WEEK try: import babel mylocale = babel.Locale(locale.getdefaultlocale()[0]) if mylocale.first_week_day == 0: FIRST_DAY_OF_WEEK = MONDAY else: FIRST_DAY_OF_WEEK = SUNDAY logger.debug('According to babel first day of week is %i', FIRST_DAY_OF_WEEK) except ImportError: # Fallback gleaned from gtkcalendar.c - hence the inconsistency # with weekday numbers in iso calendar... t = _("calendar:week_start:0") # T: Translate to "calendar:week_start:0" if you want Sunday to be the first day of the week or to "calendar:week_start:1" if you want Monday to be the first day of the week if t[-1] == '0': FIRST_DAY_OF_WEEK = SUNDAY elif t[-1] == '1': FIRST_DAY_OF_WEEK = MONDAY else: logger.warn("Whoever translated 'calendar:week_start:0' did so wrongly.") FIRST_DAY_OF_WEEK = SUNDAY def dates_for_week(year, week): '''Returns the first and last day of the week for a given week number of a given year. @param year: year as int (e.g. 2012) @param week: week number as int (0 .. 53) @returns: a 2-tuple of: - a C{datetime.date} object for the start date of the week - a C{datetime.date} object for the end dateof the week @note: first day of the week can be either C{MONDAY} or C{SUNDAY}, this is configured in C{FIRST_DAY_OF_WEEK} based on the locale. ''' # Note that the weeknumber in the isocalendar does NOT depend on the # first day being Sunday or Monday, but on the first Thursday in the # new year. See datetime.isocalendar() for details. # If the year starts with e.g. a Friday, January 1st still belongs # to week 53 of the previous year. # Day of week in isocalendar starts with 1 for Mon and is 7 for Sun, # and week starts on Monday. if FIRST_DAY_OF_WEEK is None: init_first_day_of_week() jan1 = date(year, 1, 1) _, jan1_week, jan1_weekday = jan1.isocalendar() if FIRST_DAY_OF_WEEK == MONDAY: days = jan1_weekday - 1 # if Jan 1 is a Monday, days is 0 else: days = jan1_weekday # if Jan 1 is a Monday, days is 1 # for Sunday it becomes 7 (or -1 week) if jan1_week == 1: weeks = week - 1 else: # Jan 1st is still wk53 of the previous year weeks = week start = jan1 + timedelta(days=-days, weeks=weeks) end = start + timedelta(days=6) return start, end def weekcalendar(date): '''Get the year, week number and week day for a specific date. Like C{datetime.date.isocalendar()} but takes into account C{FIRST_DAY_OF_WEEK} correctly. @param date: a C{datetime.date} or C{datetime.datetime} object @returns: a year, a week number and a weekday as integers The weekday numbering depends on locale, 1 is always first day of the week, either a Sunday or a Monday. ''' # Both strftime %W and %U are not correct, they use differnt # week number count than the isocalendar. See datetime # module for details. # In short Jan 1st can still be week 53 of the previous year # So we can use isocalendar(), however this does not take # into accout FIRST_DAY_OF_WEEK, see comment in dates_for_week() if FIRST_DAY_OF_WEEK is None: init_first_day_of_week() year, week, weekday = date.isocalendar() if FIRST_DAY_OF_WEEK == SUNDAY and weekday == 7: # iso calendar gives us the week ending this sunday, # we want the next week monday = date + timedelta(days=1) year, week, weekday = monday.isocalendar() elif FIRST_DAY_OF_WEEK == SUNDAY: weekday += 1 return year, week, weekday def strfcal(format, date): '''Method similar to strftime, but dealing with the weeknumber, day of the week and the year of that week. Week 1 is the first week where the Thursday is in the new year. So e.g. the last day of 2012 is a Monday. And therefore the calendar week for 31 Dec 2012 is already week 1 2013. The locale decides whether a week starts on Monday (as the ISO standard would have it) or on Sunday. So depending on your locale Sun 6 Jan 2013 is either still week 1 or already the first day of week 2. Codes supported by this method: - C{%w} is replaced by the weekday as a decimal number [1,7], with 1 representing either Monday or Sunday depending on the locale - C{%W} is replaced by the weeknumber depending on the locale - C{%Y} is replaced by the year with century as a decimal number, the year depends on the weeknumber depending on the locale - C{%%} is replaced by % Difference between this method and strftime is that: 1. It uses locale to determine the first day of the week 2. It returns the year that goes with the weeknumber ''' # TODO: may want to add version of the codes that allow forcing # Monday or Sunday as first day, e.g. using %u %U %X and %v %V %Z year, week, weekday = weekcalendar(date) def replacefunc(matchobj): code = matchobj.group(0) if code == '%w': return str(weekday) elif code == '%W': return '%02d' % week elif code == '%Y': return str(year) elif code == '%%': return '%' else: return code # ignore unsupported codes return re.sub(r'\%.', replacefunc, format) def strftime(format, date): '''Extended version of strftime that adds a few POSIX codes - C{%u} is replaced by the weekday as a decimal number [1,7], with 1 representing Monday. - C{%V} is replaced by the week number of the year (Monday as the first day of the week) as a decimal number [01,53]. If the week containing 1 January has four or more days in the new year, then it is considered week 1. Otherwise, it is the last week of the previous year, and the next week is week 1. ''' year, week, weekday = date.isocalendar() def replacefunc(matchobj): code = matchobj.group(0) if code == '%u': return str(weekday) elif code == '%V': return str(week) else: return code # ignore unsupported codes format = re.sub(r'\%.', replacefunc, format) string = date.strftime(str(format)) # str() needed for python 2.5 compatibility strftime string = string.decode(locale.getlocale()[1]) # decode local specific output to unicode return string if __name__ == '__main__': #pragma: no cover import gettext gettext.install('zim', None, unicode=True, names=('_', 'gettext', 'ngettext')) init_first_day_of_week() if FIRST_DAY_OF_WEEK == SUNDAY: print 'First day of week: Sunday' else: print 'First day of week: Monday' print 'Now:', now().isoformat(), strftime("%z, %Z", now()) print 'Calendar:', strfcal('day %w of week %W %Y', now()) zim-0.65/zim/base.py0000664000175000017500000000046712374655231014217 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2012 Jaap Karssenberg from .signals import ConnectorMixin, SignalEmitter class Object(ConnectorMixin, SignalEmitter): '''Base class for zim classes that want to use signals''' pass # TODO add some logic for properties, preferences, state zim-0.65/zim/gui/0000775000175000017500000000000012615422672013507 5ustar jaapjaap00000000000000zim-0.65/zim/gui/objectmanager.py0000664000175000017500000001403112612214240016644 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2011 Jiří Janoušek # Copyright 2014 Jaap Karssenberg import gtk import gobject from zim.objectmanager import ObjectManager from zim.gui.widgets import ScrolledTextView, ScrolledWindow, TableVBox # Constants for grab-focus-cursor and release-focus-cursor POSITION_BEGIN = 1 POSITION_END = 2 class CustomObjectWidget(gtk.EventBox): '''Base class & contained for custom object widget We derive from a C{gtk.EventBox} because we want to re-set the default cursor for the area of the object widget. For this the widget needs it's own window for drawing. Child widgets should be added to the C{vbox} attribute. This attribute is a L{TableVBox} which draws 1px borders around it's child elements. @signal: C{link-clicked (link)}: To be emitted when the user clicks a link @signal: C{link-enter (link)}: To be emitted when the mouse pointer enters a link @signal: C{link-leave (link)}: To be emitted when the mouse pointer leaves a link @signal: C{grab-cursor (position)}: emitted when embedded widget should grab focus, position can be either POSITION_BEGIN or POSITION_END @signal: C{release-cursor (position)}: emitted when the embedded widget wants to give back focus to the embedding TextView ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'link-clicked': (gobject.SIGNAL_RUN_LAST, None, (object,)), 'link-enter': (gobject.SIGNAL_RUN_LAST, None, (object,)), 'link-leave': (gobject.SIGNAL_RUN_LAST, None, (object,)), 'grab-cursor': (gobject.SIGNAL_RUN_LAST, None, (int,)), 'release-cursor': (gobject.SIGNAL_RUN_LAST, None, (int,)), 'size-request': 'override', } def __init__(self): gtk.EventBox.__init__(self) self.set_border_width(5) self._has_cursor = False self.vbox = TableVBox() self.add(self.vbox) self._textview_width = -1 def do_realize(self): gtk.EventBox.do_realize(self) self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.ARROW)) def on_textview_size_changed(self, textview, width, height): self._textview_width = width self.queue_resize() def do_size_request(self, requisition): gtk.EventBox.do_size_request(self, requisition) #~ print "Widget requests: %i textview: %i" % (requisition.width, self._textview_width) if self._textview_width > requisition.width: requisition.width = self._textview_width def has_cursor(self): '''Returns True if this object has an internal cursor. Will be used by the TextView to determine if the cursor should go "into" the object or just jump from the position before to the position after the object. If True the embedded widget is expected to support grab_cursor() and use release_cursor(). ''' return self._has_cursor def set_has_cursor(self, has_cursor): '''See has_cursor()''' self._has_cursor = has_cursor def grab_cursor(self, position): '''Emits the grab-cursor signal''' self.emit('grab-cursor', position) def release_cursor(self, position): '''Emits the release-cursor signal''' self.emit('release-cursor', position) gobject.type_register(CustomObjectWidget) class TextViewWidget(CustomObjectWidget): # TODO make this the base class for the Sourceview plugin # and ensure the same tricks to integrate in the parent textview def __init__(self, buffer): CustomObjectWidget.__init__(self) self.set_has_cursor(True) self.buffer = buffer win, self.view = ScrolledTextView(monospace=True, hpolicy=gtk.POLICY_AUTOMATIC, vpolicy=gtk.POLICY_NEVER, shadow=gtk.SHADOW_NONE) self.view.set_buffer(buffer) self.view.set_editable(True) self.vbox.pack_start(win) # Hook up integration with pageview cursor movement self.view.connect('move-cursor', self.on_move_cursor) def do_grab_cursor(self, position): # Emitted when we are requesed to capture the cursor begin, end = self.buffer.get_bounds() if position == POSITION_BEGIN: self.buffer.place_cursor(begin) else: self.buffer.place_cursor(end) self.view.grab_focus() def on_move_cursor(self, view, step_size, count, extend_selection): # If you try to move the cursor out of the sourceview # release the cursor to the parent textview buffer = view.get_buffer() iter = buffer.get_iter_at_mark(buffer.get_insert()) if (iter.is_start() or iter.is_end()) \ and not extend_selection: if iter.is_start() and count < 0: self.release_cursor(POSITION_BEGIN) return None elif iter.is_end() and count > 0: self.release_cursor(POSITION_END) return None return None # let parent handle this signal class FallbackObjectWidget(TextViewWidget): def __init__(self, type, buffer): TextViewWidget.__init__(self, buffer) #~ self.view.set_editable(False) # object knows best how to manage content # TODO set background grey ? plugin = ObjectManager.find_plugin(type) if type else None if plugin: self._add_load_plugin_bar(plugin) else: label = gtk.Label(_("No plugin is available to display this object.")) # T: Label for object manager self.vbox.pack_start(label) def _add_load_plugin_bar(self, plugin): key, name, activatable, klass, _winextension = plugin hbox = gtk.HBox(False, 5) label = gtk.Label(_("Plugin %s is required to display this object.") % name) # T: Label for object manager hbox.pack_start(label) #~ if activatable: # and False: # Plugin can be enabled #~ button = gtk.Button(_("Enable plugin")) # T: Label for object manager #~ def load_plugin(button): #~ self.ui.plugins.load_plugin(key) #~ self.ui.reload_page() #~ button.connect("clicked", load_plugin) #~ else: # Plugin has some unresolved dependencies #~ button = gtk.Button(_("Show plugin details")) # T: Label for object manager #~ def plugin_info(button): #~ from zim.gui.preferencesdialog import PreferencesDialog #~ dialog = PreferencesDialog(self.ui, "Plugins", select_plugin=name) #~ dialog.run() #~ self.ui.reload_page() #~ button.connect("clicked", plugin_info) #~ hbox.pack_start(button) self.vbox.pack_start(hbox) self.vbox.reorder_child(hbox, 0) # TODO: undo(), redo() stuff zim-0.65/zim/gui/pathbar.py0000664000175000017500000004557312601515252015510 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008 Jaap Karssenberg import gtk import gobject from zim.gui.widgets import encode_markup_text # Constants DIR_FORWARD = 1 DIR_BACKWARD = -1 class ScrolledHBox(gtk.HBox): '''This class provides a widget that behaves like a HBox when there is enough space to render all child widgets. When space is limited it shows arrow buttons on the left and on the right to allow scrolling through the widgets. Note that this class does not (yet?) support packing options like 'expand', 'fill' etc. All child widgets can just be added with 'add()'. TODO this class does not yet support homogeneous spacing ''' # In order to display as many items as possible we use the following # scrolling algorithm: # # There is an attribute "anchor" which is a tuple of a direction and the index # of a child item. This anchor represents the last scrolling action. # We start filling the space by taking this anchor item as either left or right # side of the visible range (depending on the given direction) and start adding # other items from there. We can run out of items when we reach the end of the # item list, or we can run out of space when the next item is larger than the # space that is left. # Next we check if we can show more items by adding items in the opposite # direction. Possibly replacing our anchor as outer left or outer right item. # Once we know which items can be shown we start allocating space to the widgets. # # The indices of the first and last visible items are put in the attributes # "_first" and "_last". In subsequent scroll actions the new anchor item can be # determined based on these indices.Keep in mind that whether the items are rendered # left-to-right or right-to-left depends on the current locale. So the first and # last items can either be on the left or on the right. # # Slide buttons are shown unless all children fit in the given space. So # the space is calculated either with or without sliders. At the end we # check if the sliders are really needed. We choose to hide the slider if # it can't be used to scroll more instead of making it insensitive because # the arrows do not show very clear when they are sensitive and when not. # The space that is freed when a slider is hidden is not recycled because # that would pose the risk of clicking on a button when the slider suddenly # disappears # We also add the two scroll buttons to our child widgets, so when dealing # with the widgets that are scrolled one should use "get_children()[2:]". # Not sure if there is a cleaner way to do this # Actually wanted to inherit from gtk.Box instead of gtk.HBox, but seems # we can not call gtk.Box.__init__() to instantiate the object. __gsignals__ = { 'size-request': 'override', 'size-allocate': 'override', } initial_scroll_timeout = 300 # timeout before starting scrolling on button press scroll_timeout = 150 # timeout between scroll steps def __init__(self, spacing=0, homogeneous=False): gtk.HBox.__init__(self) self.set_spacing(spacing) self.set_homogeneous(homogeneous) self._scroll_timeout = None self._anchor = None # tuple of (direction, n) - used in allocate self._first = None # int for first item - set in allocate self._last = None # int for last item - set in allocate self._forw_button = ScrollButton(DIR_FORWARD) self._back_button = ScrollButton(DIR_BACKWARD) for button in (self._forw_button, self._back_button): self.add(button) button.connect('button-press-event', self._on_button_press) button.connect('button-release-event', self._on_button_release) button.connect('clicked', self._on_button_clicked) # TODO looks like gtk.widget_push_composite_child is intended # to flag internal children versus normal children # use this property + define forall to have sane API for these buttons def __del__(self): self.stop_scrolling() def _on_button_press(self, button, event): if event.button == 1: self.start_scrolling(button.direction, initial_timeout=True) def _on_button_release(self, button, event): self.stop_scrolling() def _on_button_clicked(self, button): self.scroll(button.direction) def scroll(self, direction, n=1): '''Scroll n items in either direction. Direction should be either DIR_FORWARD or DIR_BACKWARD, while n should be integer. Returns boolean for success. ''' # returning boolean also controls timeout behavior index = None max = len(self.get_children()[2:])-1 if direction == DIR_FORWARD: if self._last == max: return False else: index = self._last + n elif direction == DIR_BACKWARD: if self._first == 0: return False else: index = self._first - n else: assert False if index > max: index = max elif index < 0: index = 0 self._anchor = (direction, index) self.queue_resize() return True def scroll_to_child(self, child): i = self.get_children()[2:].index(child) if i < self._first: self.scroll(DIR_BACKWARD, self._first - i) elif i > self._last: self.scroll(DIR_FORWARD, i - self._last) else: pass # child was visible already def start_scrolling(self, direction, initial_timeout=False): '''Start continues scrolling. Direction should be either DIR_FORWARD or DIR_BACKWARD. If we were scrolling already, stops this action before setting new scroll direction. ''' self.stop_scrolling() if initial_timeout: self._scroll_timeout = \ gobject.timeout_add(self.initial_scroll_timeout, self.start_scrolling, direction) # indirect recurs else: self._scroll_timeout = \ gobject.timeout_add(self.scroll_timeout, self.scroll, direction) return False # make sure we are only called once from a timeout def stop_scrolling(self): '''Stop continues scrolling. Does not do anything if we were not scrolling. ''' if not self._scroll_timeout is None: gobject.source_remove(self._scroll_timeout) self._scroll_timeout = None def do_size_request(self, requisition): # Determine minimum size needed and store it in requisition # Minimum size should be enough to render the largest child with # scroll buttons on both sides + spacing + border child_wh_tuples = [c.size_request() for c in self.get_children()[2:]] if child_wh_tuples: width = max([c[0] for c in child_wh_tuples]) height = max([c[1] for c in child_wh_tuples]) else: width = 0 height = 0 spacing = self.get_spacing() for button in (self._forw_button, self._back_button): w, h = button.size_request() if h > height: height = h width += w + spacing border = self.get_border_width() width += 2 * border height += 2 * border #~ print "Requesting WxH: %i x %i" % (width, height) requisition.height = height requisition.width = width def do_size_allocate(self, allocation): # Assign the available space to the child widgets # See discussion of allocation algorithm above #~ print "Allocated WxH: %i x %i" % (allocation.width, allocation.height) #~ print "At X,Y: %i, %i" % (allocation.x, allocation.y) gtk.HBox.do_size_allocate(self, allocation) children = self.get_children()[2:] if not children: self._forw_button.set_child_visible(False) self._back_button.set_child_visible(False) return # nothing to render direction, index = self._anchor or (DIR_FORWARD, len(children)-1) assert 0 <= index <= len(children) assert direction in (DIR_FORWARD, DIR_BACKWARD) # default (DIR_FORWARD, -1) should show the last item (right most) # and starts filling the space backward (to the left) spacing = self.get_spacing() border = self.get_border_width() widths = [c.get_child_requisition()[0] for c in children] total = reduce(int.__add__, widths) + len(widths) * spacing + 2 * border if total <= allocation.width: show_scroll_buttons = False first, last = 0, len(children)-1 else: # determine which children to show show_scroll_buttons = True first, last = index, index available = allocation.width - widths[index] for button in (self._forw_button, self._back_button): available -= button.get_child_requisition()[0] + spacing if direction == DIR_FORWARD: # fill items from the direction we came from with last scroll for i in range(index-1, -1, -1): needed = widths[i] + spacing if needed > available: break else: first = i available -= needed # see if there is any space to fill items on the other side for i in range(index+1, len(children), 1): needed = widths[i] + spacing if needed > available: break else: last = i available -= needed else: # DIR_BACKWARD # fill items from the direction we came from with last scroll for i in range(index+1, len(children)): needed = widths[i] + spacing if needed > available: break else: last = i available -= needed # see if there is any space to fill items on the other side for i in range(index-1, -1, -1): needed = widths[i] + spacing if needed > available: break else: first = i available -= needed self._first, self._last = first, last # Allocate children y = allocation.y + border h = allocation.height - 2*border child_allocation = gtk.gdk.Rectangle(y=y, height=h) # y and height are the same for all if not self.get_direction() == gtk.TEXT_DIR_RTL: # Left to Right child_allocation.x = allocation.x + border if show_scroll_buttons and first != 0: child_allocation.width = self._back_button.get_child_requisition()[0] self._back_button.set_child_visible(True) self._back_button.size_allocate(child_allocation) else: self._back_button.set_child_visible(False) if show_scroll_buttons: # Reserve the space, even if hidden child_allocation.x += self._back_button.get_child_requisition()[0] + spacing for i in range(first, last+1): child_allocation.width = widths[i] children[i].set_child_visible(True) children[i].size_allocate(child_allocation) child_allocation.x += widths[i] + spacing # set x for next child if show_scroll_buttons and last != len(children)-1: # reset x - there may be space between last button and scroll button child_allocation.width = self._forw_button.get_child_requisition()[0] child_allocation.x = allocation.x + allocation.width - child_allocation.width - border self._forw_button.set_child_visible(True) self._forw_button.size_allocate(child_allocation) else: # hide scroll button self._forw_button.set_child_visible(False) else: # Right to Left child_allocation.x = allocation.x + allocation.width - border if show_scroll_buttons and first != 0: child_allocation.width = self._back_button.get_child_requisition()[0] child_allocation.x -= child_allocation.width self._back_button.set_child_visible(True) self._back_button.size_allocate(child_allocation) child_allocation.x -= spacing else: self._back_button.set_child_visible(False) if show_scroll_buttons: # Reserve the space, even if hidden child_allocation.x = self._back_button.get_child_requisition()[0] + spacing for i in range(first, last+1): child_allocation.width = widths[i] child_allocation.x -= child_allocation.width children[i].set_child_visible(True) children[i].size_allocate(child_allocation) child_allocation.x -= spacing # set x for next child if show_scroll_buttons and last != len(children)-1: # reset x - there may be space between last button and scroll button child_allocation.width = self._forw_button.get_child_requisition()[0] child_allocation.x = allocation.x + border self._forw_button.set_child_visible(True) self._forw_button.size_allocate(child_allocation) else: # hide scroll button self._forw_button.set_child_visible(False) # Hide remaining children for child in children[0:first]: child.set_child_visible(False) for child in children[last+1:]: child.set_child_visible(False) def do_focus(self, direction): # Overrule navigation for while leaving # navigation with and in tact # (so do not "sub-navigate" with ). # Otherwise the user has to tab through all buttons before # he can tab to the next widget. if direction in (gtk.DIR_TAB_FORWARD, gtk.DIR_TAB_BACKWARD) \ and self.focus_child is not None: return False # Let outer container go to next widget else: return gtk.HBox.do_focus(self, direction) # Need to register classes defining gobject signals gobject.type_register(ScrolledHBox) class ScrollButton(gtk.Button): '''Arrow buttons used by ScrolledHBox''' def __init__(self, direction): gtk.Button.__init__(self) self.direction = direction if self.get_direction() != gtk.TEXT_DIR_RTL: # Left to Right if direction == DIR_FORWARD: arrow_dir = gtk.ARROW_RIGHT else: arrow_dir = gtk.ARROW_LEFT else: # Right to Left if direction == DIR_FORWARD: arrow_dir = gtk.ARROW_LEFT else: arrow_dir = gtk.ARROW_RIGHT self.add(gtk.Arrow(arrow_dir, gtk.SHADOW_OUT)) self.set_relief(gtk.RELIEF_NONE) class PathBar(ScrolledHBox): '''Base class for pathbars in the zim GUI, extends ScrolledHBox for usage with a list of ToggleButtons representing zim Path objects''' def __init__(self, ui, history=None, spacing=0, homogeneous=False): ScrolledHBox.__init__(self, spacing, homogeneous) self.ui = ui self.history = None self._selected = None if history: self.set_history(history) self.ui.connect_after('open-page', self._after_open_page) def set_history(self, history): self.history = history self.history.connect('changed', lambda o: self._update()) self._update() self._select(history.get_current()) def _after_open_page(self, ui, page, path): # Since we connect after open page, update has likely been done # already from the history 'changed' signal - if not trigger it here. self._select(path) if self._selected is None: self._update() self._select(path) def _update(self): if self.history is None: return for button in self.get_children()[2:]: self.remove(button) self._selected = None for path in self.get_paths(): button = gtk.ToggleButton(label=path.basename) button.set_use_underline(False) button.zim_path = path button.connect('clicked', self.on_button_clicked) button.connect('popup-menu', self.on_button_popup_menu) button.connect('button-release-event', self.do_button_release_event) # TODO Drag n drop support also nice to have button.show() self.add(button) # FIXME tooltips seem not to work - not sure why if gtk.gtk_version >= (2, 12) \ and gtk.pygtk_version >= (2, 12): for button in self.get_children()[2:]: button.set_tooltip_text(button.zim_path.name) else: tooltips = gtk.Tooltips() for button in self.get_children()[2:]: tooltips.set_tip(button, button.zim_path.name) def get_paths(self): '''To be implemented by the sub class, should return a list (or iterable) of notebook paths to show in the pathbar. ''' raise NotImplemented def _select(self, path): def set_active(button, active): button.handler_block_by_func(self.on_button_clicked) button.set_active(active) label = button.get_child() if active: label.set_markup(''+encode_markup_text(label.get_text())+'') else: label.set_text(label.get_text()) # get_text() gives string without markup button.handler_unblock_by_func(self.on_button_clicked) if not self._selected is None: set_active(self._selected, False) for button in reversed(self.get_children()[2:]): if button.zim_path == path: self._selected = button break else: self._selected = None if not self._selected is None: set_active(self._selected, True) def on_button_clicked(self, button): self.ui.open_page(button.zim_path) def do_button_release_event(self, button, event): '''Handler for button-release-event, triggers popup menu''' if event.button == 3: button.emit('popup-menu') # FIXME do we need to pass x/y and button ? return True def on_button_popup_menu(self, button): menu = gtk.Menu() self.ui.populate_popup('page_popup', menu, button.zim_path) menu.popup(None, None, None, 3, 0) return True def get_selected_path(self): '''Returns path currently selected or None''' if self._selected: return self._selected.zim_path else: return None class HistoryPathBar(PathBar): # Get last X paths from history, add buttons # Clicking in the pathbar will always add another entry for that # path to the last position def get_paths(self): # TODO enforce max number of paths shown paths = list(self.history.get_history()) paths.reverse() return paths class RecentPathBar(PathBar): # Get last X unique paths from history, add buttons # When a button is clicked we do not want to change the view # So on open page we need to check if the page was in the list # already or not def get_paths(self): # TODO enforce max number of paths shown paths = list(self.history.get_recent()) paths.reverse() return paths class RecentChangesPathBar(PathBar): def __init__(self, *arg, **kwarg): PathBar.__init__(self, *arg, **kwarg) self.ui.notebook.connect_after('stored-page', self.on_stored_page) def on_stored_page(self, *a): self._update() current = self.history.get_current() if current: self._select(current) def get_paths(self): index = self.ui.notebook.index return reversed(list( index.list_recent_pages(offset=0, limit=10))) class NamespacePathBar(PathBar): # Add buttons for namespace up to and including current page # Use history to query for sub-pages to show as well # Clicking a button in the pathbar should not change the view def get_paths(self): # no need to enforce a max number of paths here current = self.history.get_current() if not current: return [] path = self.history.get_grandchild(current) or current paths = list(path.parents()) paths.reverse() paths.pop(0) # remove root paths.append(path) # add leaf return paths ############################ class TestPath(object): def __init__(self, name): self.name = name self.basename = name class TestPathBar(PathBar): def __init__(self): PathBar.__init__(self, None, None) self.history = 'XXX' self._update() def get_paths(self): for path in ('foo', 'bar', 'baz', 'looooooongggggggg item here', 'dus', 'ja', 'hmm'): yield TestPath(path) if __name__ == '__main__': window = gtk.Window() window.connect('destroy', lambda o: gtk.main_quit()) window.add(TestPathBar()) window.show_all() gtk.main() zim-0.65/zim/gui/recentchangesdialog.py0000664000175000017500000000521212600766544020055 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2013 Jaap Karssenberg import gtk import gobject import logging import zim.datetimetz as datetime from zim.notebook import Path from zim.gui.widgets import Dialog, BrowserTreeView, ScrolledWindow logger = logging.getLogger('zim.gui.dialogs') class RecentChangesDialog(Dialog): def __init__(self, ui): Dialog.__init__(self, ui, _('Recent Changes'), # T: Dialog title buttons=gtk.BUTTONS_CLOSE, defaultwindowsize=(400, 300) ) self.treeview = RecentChangesTreeView(ui) self.vbox.add(ScrolledWindow(self.treeview)) self.update() self.ui.notebook.connect_after('stored-page', lambda *a: self.update()) def update(self): model = self.treeview.get_model() model.clear() list = self.ui.notebook.index.list_recent_pages(offset=0, limit=50) for indexpath in list: model.append((indexpath.name, indexpath.contentkey)) # HACK ! class RecentChangesTreeView(BrowserTreeView): NAME_COL = 0 MODIFIED_COL = 1 def __init__(self, ui): model = gtk.ListStore(str, str) # NAME_COL, MODIFIED_COL BrowserTreeView.__init__(self, model) self.ui = ui cell_renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Page'), cell_renderer, text=self.NAME_COL) # T: Column header column.set_sort_column_id(self.NAME_COL) column.set_expand(True) self.append_column(column) today = datetime.date.today() yesterday = today - datetime.timedelta(days=1) def render_date(col, cell, model, i): utime = model.get_value(i, self.MODIFIED_COL) if utime: utime = float(utime) dt = datetime.datetime.fromtimestamp(utime) date = dt.date() if date == today: text = _('Today') + datetime.strftime(' %H:%M', dt) # T: label for modified time elif date == yesterday: text = _('Yesterday') + datetime.strftime(' %H:%M', dt) # T: label for modified time elif date.year == today.year: text = datetime.strftime('%a %d %b %H:%M', dt) # TODO allow config for format ? else: text = datetime.strftime('%a %d %b %Y %H:%M', dt) # TODO allow config for format ? else: text = '' cell.set_property('text', text) cell_renderer = gtk.CellRendererText() #cell_renderer.set_property('font', 'mono') column = gtk.TreeViewColumn(_('Last Modified'), cell_renderer, text=self.MODIFIED_COL) # T: Column header column.set_cell_data_func(cell_renderer, render_date) column.set_sort_column_id(self.MODIFIED_COL) self.append_column(column) self.connect('row-activated', self._do_open_page) def _do_open_page(self, view, path, col): page = Path( self.get_model()[path][self.NAME_COL].decode('utf-8') ) self.ui.open_page(page) zim-0.65/zim/gui/exportdialog.py0000664000175000017500000004015112461126142016553 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008,2014 Jaap Karssenberg from __future__ import with_statement import gtk import logging import zim.formats import zim.templates from zim.fs import File, Dir, TmpFile from zim.stores import encode_filename from zim.gui.widgets import Assistant, AssistantPage, \ ProgressBarDialog, ErrorDialog, QuestionDialog, \ MessageDialog, LogFileDialog, Button from zim.notebook import Path from zim.export import * from zim.export.selections import * logger = logging.getLogger('zim.export') class ExportDialog(Assistant): def __init__(self, ui): Assistant.__init__(self, ui, _('Export'), # T: dialog title help=':Help:Export', defaultwindowsize=(400, 325)) self.append_page(InputPage(self)) self.append_page(FormatPage(self)) self.append_page(OutputPage(self)) def do_response_ok(self): output, exporter = self.get_exporter() selection = self.get_selection() logger.debug('exporter: %s, selection: %s', exporter.__class__.__name__, selection.__class__.__name__) if exporter is None or selection is None: logger.debug('Cancelled - selection') return False # canceled # Check index up to date index = self.ui.notebook.index if index.updating: with ProgressBarDialog(self, _('Updating index')) as dialog: # T: Title of progressbar dialog index.ensure_update(callback=lambda p: dialog.pulse(p.name)) if dialog.cancelled: logger.debug('Cancelled - progress dialog index') return False # Run export logging_context = LogContext() with logging_context: with ProgressBarDialog(self, _('Exporting notebook')) as dialog: # T: Title for progressbar window for p in exporter.export_iter(selection): if not dialog.pulse(p.name): logger.debug('Cancelled - progress dialog export') return False # canceled #~ print '>>> %s E: %i, W: %i' % ( #~ logging_context.file.path, #~ logging_context.handler.n_error, logging_context.handler.n_warning) #~ print logging_context.file.read() #~ print '---' ExportDoneDialog(self, logging_context, output).run() return True def get_selection(self): if self.uistate['selection'] == 'all': return AllPages(self.ui.notebook) else: path = self.uistate['selected_page'] if self.uistate['selection_recursive']: return SubPages(self.ui.notebook, path) else: return SinglePage(self.ui.notebook, path) def get_exporter(self): #~ import pprint #~ pprint.pprint(self.uistate) #~ return True options = {} for k in ('format', 'template', 'index_page'): if self.uistate[k] and not self.uistate[k].isspace(): options[k] = self.uistate[k] options['format'] = \ zim.formats.canonical_name(options['format']) if options['template'] == '__file__': options['template'] = self.uistate['template_file'] if self.uistate['document_root'] == 'url': options['document_root_url'] = self.uistate['document_root_url'] if options['format'] == 'mhtml': # Export MHTML file options.pop('format', None) options.pop('index_page', None) file = self.get_file() if file: return file, build_mhtml_file_exporter(file, **options) else: return None, None elif self.uistate['output'] == 'single_file': options.pop('index_page', None) if self.uistate['selection'] == 'page': options['namespace'] = self.uistate['selected_page'] file = self.get_file() if file: return file, build_single_file_exporter(file, **options) else: return None, None elif self.uistate['selection'] == 'all': # Export full notebook to dir dir = self.get_folder() if dir: return dir, build_notebook_exporter(dir, **options) else: return None, None else: # Export page to file options.pop('index_page', None) file = self.get_file() if file: path = self.uistate['selected_page'] return file, build_page_exporter(file, page=path, **options) else: return None, None def get_folder(self): dir = Dir(self.uistate['output_folder']) if dir.exists() and len(dir.list()) > 0: ok = QuestionDialog(self, ( _('Folder exists: %s') % dir.path, # T: message heading _('Folder already exists and has content, ' 'exporting to this folder may overwrite ' 'existing files. ' 'Do you want to continue?' ) # T: detailed message, answers are Yes and No ) ).run() if not ok: return None return dir def get_file(self): file = File(self.uistate['output_file']) if file.exists(): ok = QuestionDialog(self, ( _('File exists'), # T: message heading _('This file already exists.\n' 'Do you want to overwrite it?' ) # T: detailed message, answers are Yes and No ) ).run() if not ok: return None return file class InputPage(AssistantPage): '''Assistant page allowing to select the page(s) for export''' title = _('Select the pages to export') # T: title of step in export dialog def __init__(self, assistant): AssistantPage.__init__(self, assistant) self.add_form(( ('selection:all', 'option', _('Complete _notebook')), # T: Option in export dialog to export complete notebook #~ ('selection:selection', 'option', _('_Selection')), # T: Option in export dialog to export selection #~ ('selection_query', 'string', None), ('selection:page', 'option', _('Single _page')), # T: Option in export dialog to export selection None, ('page', 'page', _('Page')), # T: Input field in export dialog ('recursive', 'bool', _('Include subpages')), # T: Input field in export dialog ), { 'page': assistant.ui.page, 'recursive': True, }, depends={ 'page': 'selection:page', 'recursive': 'selection:page', } ) self.form.widgets['page'].existing_only = True def init_uistate(self): #~ self.uistate.setdefault('selection', 'all', ('all', 'page')) self.uistate.setdefault('selection', 'all') self.uistate.setdefault('selection_recursive', True) self.uistate.setdefault('selected_page', self.form['page'], check=Path) self.form['selection'] = self.uistate['selection'] def save_uistate(self): self.uistate['selection'] = self.form['selection'] self.uistate['selected_page'] = self.form['page'] self.uistate['selection_recursive'] = self.form['recursive'] class FormatPage(AssistantPage): '''Assistant page allowing to select the output format and template''' title = _('Select the export format') # T: title of step in export dialog CHOICE_OTHER = _('Other...') # T: Option in drop down menu to specify another file # FUTURE: this page could have a dynamic form with additional # fields requested by the template, e.g. author etc. def __init__(self, assistant): AssistantPage.__init__(self, assistant) self.export_formats = zim.formats.list_formats(zim.formats.EXPORT_FORMAT) self.export_formats.insert(1, 'MHTML (Web Page Archive)') # TODO translatable self.add_form(( ('format', 'choice', _('Format'), self.export_formats), # T: Input label in the export dialog ('template', 'choice', _('Template'), ()), # T: Input label in the export dialog ('template_file', 'file', None), None, ('document_root:absolute', 'option', _('Link files under document root with full file path')), # T: radio option in export dialog ('document_root:url', 'option', _('Map document root to URL')+': '), # T: radio option in export dialog ('document_root_url', 'string', None), ), depends={ 'document_root_url': 'document_root:url' } ) ## Same button appears in edit preferences dialog if gtk.gtk_version >= (2, 10) \ and gtk.pygtk_version >= (2, 10): url_button = gtk.LinkButton( 'https://github.com/jaap-karssenberg/zim-wiki/wiki/Templates', _('Get more templates online') # T: label for button with URL ) self.pack_start(url_button, False) # Set template list based on selected format def set_templates(self): format = self.form['format'] format = zim.formats.canonical_name(format) if format == 'mhtml': format = 'html' combobox = self.form.widgets['template'] combobox.get_model().clear() for name, _ in zim.templates.list_templates(format): combobox.append_text(name) combobox.append_text(self.CHOICE_OTHER) combobox.set_sensitive(True) template = self.uistate['template'] if template == '__file__': # Select "Other..." combobox.set_active(len(templates)) else: try: self.form['template'] = template except ValueError: combobox.set_active(0) self.form.widgets['format'].connect_object('changed', set_templates, self) # Hook template entry to be sensitive on "Other.." self.form.widgets['template_file'].set_sensitive(False) self.form.widgets['template'].connect('changed', lambda o: self.form.widgets['template_file'].set_sensitive( o.get_active_text() == self.CHOICE_OTHER) ) # Check if we have a document root - if not disable all options docroot = assistant.ui.notebook.document_root if not docroot: for widget in self.form.widgets: if widget.startswith('document_root:'): self.form.widgets[widget].set_sensitive(False) self.uistate.input(document_root_url='') def init_uistate(self): self.uistate.setdefault('format', 'HTML') self.uistate.setdefault('template', 'Default') self.uistate.setdefault('template_file', '') self.uistate.setdefault('document_root', 'absolute', check=set(('absolute', 'url'))) self.uistate.setdefault('document_root_url', '') try: self.form['format'] = self.uistate['format'] if self.uistate['template'] == '__file__': self.form['template'] = self.CHOICE_OTHER else: self.form['template'] = self.uistate['template'] except ValueError: pass self.form['template_file'] = self.uistate['template_file'] self.form['document_root'] = self.uistate['document_root'] self.form['document_root_url'] = self.uistate['document_root_url'] def save_uistate(self): self.uistate.update(self.form) if self.uistate['template'] == self.CHOICE_OTHER: self.uistate['template'] = '__file__' class OutputPage(AssistantPage): '''Assistant page allowing to select output file or folder''' title = _('Select the output file or folder') # T: title of step in export dialog def __init__(self, assistant): AssistantPage.__init__(self, assistant) self.add_form(( ('output:multi_file', 'option', _('Export each page to a separate file')), # T: Label for option in export dialog ('output:single_file', 'option', _('Export all pages to a single file')), # T: Label for option in export dialog None, ('folder', 'dir', _('Output folder')), # T: Label for folder selection in export dialog ('index', 'string', _('Index page')), # T: Label for setting a name for the index of exported pages # TODO validation for this entry - valid name, but not existing ('file', 'output-file', _('Output file')), # T: Label for file selection in export dialog ), depends={ 'index': 'folder', } ) for widget in self.form.widgets: self.form.widgets[widget].set_no_show_all(True) self.form.widgets['output:single_file'].connect('toggled', self.on_output_changed) def init_uistate(self): # Switch between folder selection or file selection based # on whether we selected full notebook or single page in the # first page self.uistate.setdefault('output', 'multi_file') self.uistate.setdefault('output_folder', None, Dir) self.uistate.setdefault('index_page', '') self.uistate.setdefault('output_file', None, File) if self.uistate.get('format', '').startswith('MHTML'): # XXX make this a format property to be queried self.form.widgets['output:multi_file'].set_sensitive(False) self.form.widgets['output:single_file'].set_sensitive(False) self.form.widgets['output:single_file'].set_active(True) else: self.form.widgets['output:multi_file'].set_sensitive(True) self.form.widgets['output:single_file'].set_sensitive(True) self.form.widgets['output:multi_file'].show() self.form.widgets['output:single_file'].show() self.form['output'] = self.uistate['output'] self.on_output_changed(None) # Set file name basename = self.uistate['selected_page'].basename format = self.uistate['format'] if format.startswith('MHTML'): ext = 'mht' else: ext = zim.formats.get_format(format).info['extension'] if self.uistate['output_file'] \ and isinstance(self.uistate['output_file'], File): dir = self.uistate['output_file'].dir file = dir.file(encode_filename(basename + '.' + ext)) else: file = File('~/' + encode_filename(basename + '.' + ext)) self.uistate['output_file'] = file self.form['file'] = self.uistate['output_file'] self.form['folder'] = self.uistate['output_folder'] def on_output_changed(self, o): if self.uistate.get('selection') == 'page': self.set_show_file(True) else: self.set_show_file(self.form['output'] == 'single_file') def set_show_file(self, show_file): if show_file: self.form.widgets['folder'].set_sensitive(False) self.form.widgets['folder'].hide() self.form.widgets['file'].set_sensitive(True) self.form.widgets['file'].show() else: self.form.widgets['folder'].set_sensitive(True) self.form.widgets['folder'].show() self.form.widgets['file'].set_sensitive(False) self.form.widgets['file'].hide() def save_uistate(self): self.uistate['output_file'] = self.form['file'] self.uistate['output_folder'] = self.form['folder'] self.uistate['index_page'] = self.form['index'] self.uistate['output'] = self.form['output'] class ExportDoneDialog(MessageDialog): def __init__(self, parent, logging_context, output): self.logging_context = logging_context self.output = output n_error = logging_context.handler.n_error n_warning = logging_context.handler.n_warning if n_error and n_warning: text = _('%(n_error)i errors and %(n_warning)i warnings occurred, see log') % {'n_error': n_error, 'n_warning': n_warning} # T: label in export dialog elif n_error: text = _('%i errors occurred, see log') % n_error # T: label in export dialog elif n_warning: text = _('%i warnings occurred, see log') % n_warning # T: label in export dialog else: text = None MessageDialog.__init__(self, parent, (_('Export completed'), text)) # T: label in export dialog log_button = Button(_('View _Log'), stock='gtk-file') # T: button in export dialog log_button.set_sensitive(logging_context.file.exists()) log_button.connect_object( 'clicked', self.__class__.on_show_log, self) #~ open_button = #~ self.add_extra_button(open_button) self.add_extra_button(log_button) def on_show_log(self): LogFileDialog(self, self.logging_context.file).run() def on_open_file(self): self.ui.open_file(self.output) # XXX class LogContext(object): '''Context to log errors and warnings to a log file''' def __init__(self): names = ['zim.export', 'zim.templates', 'zim.formats'] level = logging.INFO self.logger = logging.getLogger('zim') self.level = level self.file = TmpFile(basename='export-log.txt', unique=False, persistent=True) self.file.remove() # clean up previous run self.handler = LogHandler(self.file.path) self.handler.setLevel(self.level) self.handler.addFilter(LogFilter(names)) self.handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s') ) def __enter__(self): #~ self._old_level = self.logger.getEffectiveLevel() #~ if self._old_level > self.level: #~ self.logger.setLevel(self.level) self.logger.addHandler(self.handler) def __exit__(self, exc_type, exc_val, exc_tb): self.logger.removeHandler(self.handler) #~ self.logger.setLevel(self._old_level) self.handler.close() return False # re-raises error class LogFilter(logging.Filter): def __init__(self, names): self.names = names def filter(self, record): return any(record.name.startswith(n) for n in self.names) class LogHandler(logging.FileHandler): def __init__(self, filename, mode='w', encoding='UTF-8', delay=True): logging.FileHandler.__init__(self, filename, mode, encoding, delay) self.n_warning = 0 self.n_error = 0 def emit(self, record): # more detailed logging has lower number, so WARN > INFO > DEBUG # log to file unless output is a terminal and logging <= INFO if record.levelno >= logging.ERROR: self.n_error += 1 elif record.levelno >= logging.WARNING: self.n_warning += 1 logging.FileHandler.emit(self, record) zim-0.65/zim/gui/widgets.py0000664000175000017500000041257512610170423015532 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2014 Jaap Karssenberg '''This module contains a number of custom gtk widgets that are used in the zim gui modules. These include base clases for windows and dialogs like L{Window}, L{Dialog}, L{FileDialog}, L{QuestionDialog}, L{ErrorDialog}, and L{Assistant}. Especially the Dialog class contains a number of convenience methods. An important class is te L{InputForm} which is used extensively in the zim gui to layout forms of input fields etc. And the related specialized input widgets like L{InputEntry}, L{FileEntry}, L{FolderEntry}, L{LinkEntry}, L{PageEntry} and L{NamespaceEntry}. These widgets take care of converting specific object types, proper utf-8 encoding etc. The remaining classes are various widgets used in the gui: L{Button}, L{IconButton}, L{IconChooserButton}, L{MenuButton}, L{ImageView}, L{SingleClickTreeView}, L{BrowserTreeView}, and L{TextBuffer} @newfield requires: Requires ''' import gobject import gtk import pango import logging import sys import os import re import weakref import unicodedata import locale try: import gtksourceview2 except ImportError: gtksourceview2 = None import zim import zim.errors import zim.config import zim.fs from zim.fs import File, Dir from zim.config import value_is_coord from zim.notebook import Notebook, Path, PageNameError from zim.parsing import link_type from zim.signals import ConnectorMixin logger = logging.getLogger('zim.gui') if os.environ.get('ZIM_TEST_RUNNING'): TEST_MODE = True TEST_MODE_RUN_CB = None else: TEST_MODE = False TEST_MODE_RUN_CB = None # Check the (undocumented) list of constants in gtk.keysyms to see all names KEYVAL_LEFT = gtk.gdk.keyval_from_name('Left') KEYVAL_RIGHT = gtk.gdk.keyval_from_name('Right') KEYVALS_ASTERISK = ( gtk.gdk.unicode_to_keyval(ord('*')), gtk.gdk.keyval_from_name('KP_Multiply')) KEYVALS_SLASH = ( gtk.gdk.unicode_to_keyval(ord('\\')), gtk.gdk.unicode_to_keyval(ord('/')), gtk.gdk.keyval_from_name('KP_Divide')) KEYVAL_ESC = gtk.gdk.keyval_from_name('Escape') # UI Environment config. Would properly belong in zim.gui.__init__ # but defined here to avoid unnecessary dependencies on zim.gui ui_environment = { 'platform': None, # platform name to trigger platform specific optimizations 'maxscreensize': None, # max screensize _if_ fixed by the platform 'smallscreen': False, # trigger optimizations for small screens } # Check for Maemo environment if zim.PLATFORM == 'maemo': import hildon gtkwindowclass = hildon.Window ui_environment['platform'] = 'maemo' if hasattr(gtkwindowclass,'set_app_menu'): ui_environment['maemo_version'] = 'maemo5' else: ui_environment['maemo_version'] = 'maemo4' ui_environment['maxscreensize'] = (800, 480) ui_environment['smallscreen'] = True # Maemo gtk UI bugfix: expander-size is set to 0 by default gtk.rc_parse_string('''\ style "toolkit" { GtkTreeView::expander-size = 12 } class "GtkTreeView" style "toolkit" ''' ) else: gtkwindowclass = gtk.Window def encode_markup_text(text): '''Encode text such that it can be used in a piece of markup text without causing errors. Needed for all places where e.g. a label depends on user input and is formatted with markup to show it as bold text. @param text: label text as string @returns: encoded text ''' return text.replace('&', '&').replace('>', '>').replace('<', '<') def decode_markup_text(text): '''Decode text that was encoded with L{encode_markup_text()} and remove any markup tags. @param text: markup text @returns: normal text ''' text = re.sub('<.*?>', '', text) return text.replace('>', '>').replace('<', '<').replace('&', '&') def gtk_window_set_default_icon(): '''Function to set the zim icon as the default window icon for all gtk windows in this process. ''' from zim.config import ZIM_DATA_DIR, XDG_DATA_HOME, XDG_DATA_DIRS iconlist = [] if ZIM_DATA_DIR: dir = ZIM_DATA_DIR + '../icons' for name in ('zim16.png', 'zim32.png', 'zim48.png'): file = dir.file(name) if file.exists(): pixbuf = gtk.gdk.pixbuf_new_from_file(file.path) iconlist.append(pixbuf) else: sizes = ['16x16', '32x32', '48x48'] for dir in [XDG_DATA_HOME] + XDG_DATA_DIRS: for size in sizes: file = dir.file('icons/hicolor/%s/apps/zim.png' % size) if file.exists(): sizes.remove(size) pixbuf = gtk.gdk.pixbuf_new_from_file(file.path) iconlist.append(pixbuf) if not sizes: break if not iconlist: # fall back to data/zim.png file = zim.config.data_file('zim.png') pixbuf = gtk.gdk.pixbuf_new_from_file(file.path) iconlist.append(pixbuf) # also register it as stock since theme apparently is not found factory = gtk.IconFactory() factory.add_default() set = gtk.IconSet(pixbuf=pixbuf) factory.add('zim', set) if len(iconlist) < 3: logger.warn('Could not find all icon sizes for the application icon') gtk.window_set_default_icon_list(*iconlist) def ScrolledWindow(widget, hpolicy=gtk.POLICY_AUTOMATIC, vpolicy=gtk.POLICY_AUTOMATIC, shadow=gtk.SHADOW_IN): '''Wrap C{widget} in a C{gtk.ScrolledWindow} and return the resulting widget @param widget: any Gtk widget @param hpolicy: the horizontal scrollbar policy @param vpolicy: the vertical scrollbar policy @param shadow: the shadow type @returns: a C{gtk.ScrolledWindow} ''' window = gtk.ScrolledWindow() window.set_policy(hpolicy, vpolicy) window.set_shadow_type(shadow) if isinstance(widget, (gtk.TextView, gtk.TreeView, gtk.Layout)): # Known native-scrolling widgets window.add(widget) else: window.add_with_viewport(widget) if hpolicy == gtk.POLICY_NEVER: hsize = -1 # do not set else: hsize = 24 if vpolicy == gtk.POLICY_NEVER: vsize = -1 # do not set else: vsize = 24 window.set_size_request(hsize, vsize) # scrolled widgets have at least this size... # by setting this minimum widgets can not "disappear" when # HPaned or VPaned bar is pulled all the way return window def ScrolledTextView(text=None, monospace=False, **kwarg): '''Initializes a C{gtk.TextView} with sane defaults for displaying a piece of multiline text and wraps it in a scrolled window @param text: initial text to show in the textview @param monospace: when C{True} the font will be set to monospaced and line wrapping disabled, use this to display log files etc. @param kwarg: arguments passed on to L{ScrolledWindow} @returns: a 2-tuple of the scrolled window and the textview ''' textview = gtk.TextView(TextBuffer()) textview.set_editable(False) textview.set_left_margin(5) textview.set_right_margin(5) if monospace: font = pango.FontDescription('Monospace') textview.modify_font(font) else: textview.set_wrap_mode(gtk.WRAP_WORD) if text: textview.get_buffer().set_text(text) window = ScrolledWindow(textview, **kwarg) return window, textview def ScrolledSourceView(text=None, syntax=None): '''If GTKSourceView was succesfully loaded, this generates a SourceView and initializes it. Otherwise ScrolledTextView will be used as a fallback. @param text: initial text to show in the view @param syntax: this will try to enable syntax highlighting for the given language. If None, no syntax highlighting will be enabled. @returns: a 2-tuple of a window and a view. ''' if gtksourceview2: gsvbuf = gtksourceview2.Buffer() if syntax: gsvbuf.set_highlight_syntax(True) language_manager = gtksourceview2.LanguageManager() gsvbuf.set_language(language_manager.get_language(syntax)) if text: gsvbuf.set_text(text) textview = gtksourceview2.View(gsvbuf) textview.set_property("show-line-numbers", True) textview.set_property("auto-indent", True) font = pango.FontDescription('Monospace') textview.modify_font(font) textview.set_property("smart-home-end", True) window = ScrolledWindow(textview) return (window, textview) else: return ScrolledTextView(text=text, monospace=True) def populate_popup_add_separator(menu, prepend=False): '''Convenience function that adds a C{gtk.SeparatorMenuItem} to a context menu. Checks if the menu already contains items, if it is empty does nothing. Also if the menu already has a seperator in the required place this function does nothing. This helps with building menus more dynamically. @param menu: the C{gtk.Menu} object for the popup @param prepend: if C{False} append, if C{True} prepend ''' items = menu.get_children() if not items: pass # Nothing to do elif prepend: if not isinstance(items[0], gtk.SeparatorMenuItem): sep = gtk.SeparatorMenuItem() menu.prepend(sep) else: if not isinstance(items[-1], gtk.SeparatorMenuItem): sep = gtk.SeparatorMenuItem() menu.append(sep) def gtk_combobox_set_active_text(combobox, text): '''Opposite of C{gtk.ComboBox.get_active_text()}. Sets the active item based on a string. Will match this string against the list of options and select the correct index. @raises ValueError: when the string is not found in the list. ''' model = combobox.get_model() for i, value in enumerate(model): if value[0] == text: return combobox.set_active(i) else: raise ValueError, text def gtk_notebook_get_active_tab(nb): '''Returns the label of the active tab or C{None}''' widget = gtk_notebook_get_active_page(nb) if widget: return nb.get_tab_label_text(widget) else: return None def gtk_notebook_get_active_page(nb): '''Returns the active child widget or C{None}''' num = nb.get_current_page() if num >= 0: return nb.get_nth_page(num) else: return None def gtk_notebook_set_active_tab(nb, label): '''Set active tab by the label of the tab''' for child in nb.get_children(): if nb.get_tab_label_text(child) == label: num = nb.page_num(child) nb.set_current_page(num) break else: raise ValueError, 'No such tab: %s' % label class TextBuffer(gtk.TextBuffer): '''Sub-class of C{gtk.TextBuffer} that handles utf-8 decoding''' def get_text(self, start, end, include_hidden_chars=True): text = gtk.TextBuffer.get_text(self, start, end, include_hidden_chars) if text: text = text.decode('utf-8') return text def get_slice(self, start, end, include_hidden_chars=True): text = gtk.TextBuffer.get_slice(self, start, end, include_hidden_chars) if text: text = text.decode('utf-8') return text def rotate_pixbuf(pixbuf): '''Rotate the pixbuf to match orientation from EXIF info. This is intended for e.g. photos that have EXIF information that shows how the camera was held. @returns: a new version of the pixbuf or the pixbuf itself. ''' # For newer gtk we could use gtk.gdk.Pixbuf.apply_embedded_orientation # Values for orientation seen in some random snippet in gtkpod o = pixbuf.get_option('orientation') if o: o = int(o) if o == 3: # 180 degrees return pixbuf.rotate_simple(gtk.gdk.PIXBUF_ROTATE_UPSIDEDOWN) elif o == 6: # 270 degrees return pixbuf.rotate_simple(gtk.gdk.PIXBUF_ROTATE_CLOCKWISE) elif o == 9: # 90 degrees return pixbuf.rotate_simple(gtk.gdk.PIXBUF_ROTATE_COUNTERCLOCKWISE) else: # No rotation info, older gtk version, or advanced transpose return pixbuf def help_text_factory(text): '''Create a label with an "info" icon in front of it. Intended for informational text in dialogs. @param text: the text to display @returns: a C{gtk.HBox} ''' hbox = gtk.HBox(spacing=12) image = gtk.image_new_from_stock(gtk.STOCK_INFO, gtk.ICON_SIZE_BUTTON) image.set_alignment(0.5, 0.0) hbox.pack_start(image, False) label = gtk.Label(text) label.set_use_markup(True) label.set_alignment(0.0, 0.0) hbox.add(label) return hbox def _do_sync_widget_state(widget, a, subject): # Signal handler to update state of subject based on state of widget subject.set_sensitive(widget.get_property('sensitive')) subject.set_no_show_all(widget.get_no_show_all()) if widget.get_property('visible'): subject.show() else: subject.hide() def _do_sync_widget_state_check_active(widget, *a): if len(a) == 1: subject = a[0] else: subject = a[1] _do_sync_widget_state(widget, '', subject) subject.set_sensitive(widget.get_active()) def _sync_widget_state(widget, subject, check_active=False): # Hook label or secondary widget to follow state of e.g. entry widget # check_active is only meaningful if widget is a togglebutton and # will also add a dependency on the active state of the widget check_active = check_active and hasattr(widget, 'get_active') if check_active: func = _do_sync_widget_state_check_active else: func = _do_sync_widget_state func(widget, '', subject) for property in ('visible', 'no-show-all', 'sensitive'): widget.connect_after('notify::%s' % property, func, subject) if check_active: subject.set_sensitive(widget.get_active()) widget.connect_after('toggled', func, subject) def input_table_factory(inputs, table=None): '''Function to help with the layout of widgets in tables. Only use this function directly if you want a completely custom input form. For standard forms see the L{InputForm} class. @param inputs: a list of inputs. These inputs should be either a tuple of a string and one or more widgets, a single widget, a string, or C{None}. For a tuple the lable will be lined out in the first column followed by all the widgets. If a tuple is given and the first item is C{None}, the widget will be lined out in the 2nd column. A single widget will be lined out in line with the lables (this is meant for e.g. checkboxes that have the label behind the checkbox as part of the widget). A string will be put as a label on it's own row. Use of markup is assumed. An input that has a C{None} value will result in an empty row in the table, separating field above and below. @param table: options C{gtk.Table}, if given inputs will be appended to this table @returns: a C{gtk.Table} ''' if table is None: table = gtk.Table() table.set_border_width(5) table.set_row_spacings(5) table.set_col_spacings(12) i = table.get_property('n-rows') for input in inputs: if input is None: table.attach(gtk.Label(' '), 0,1, i,i+1, xoptions=gtk.FILL) # HACK: force empty row to have height of label elif isinstance(input, basestring): label = gtk.Label() label.set_markup(input) table.attach(label, 0,4, i,i+1) # see column below about col span for single widget case elif isinstance(input, tuple): text = input[0] if text: label = gtk.Label(text + ':') label.set_alignment(0.0, 0.5) else: label = gtk.Label(' '*4) # minimum label width table.attach(label, 0,1, i,i+1, xoptions=gtk.FILL) _sync_widget_state(input[1], label) for j, widget in enumerate(input[1:]): if isinstance(widget, gtk.Entry): table.attach(widget, j+1,j+2, i,i+1, xoptions=gtk.FILL|gtk.EXPAND) else: table.attach(widget, j+1,j+2, i,i+1, xoptions=gtk.FILL) if j > 0: _sync_widget_state(input[1], widget) else: widget = input table.attach(widget, 0,4, i,i+1) # We span 4 columns here so in case these widgets are # the widest in the tables (e.g. checkbox + label) # they don't force expanded size on first 3 columns # (e.g. label + entry + button). i += 1 return table class Button(gtk.Button): '''Sub-class of C{gtk.Button} which changes the constructor to allow specifying a stock icon I{and} a label at the same time. ''' def __init__(self, label=None, stock=None, use_underline=True, status_bar_style=False): '''Constructor If both C{label} and C{stock} are given the button will have a stock icon but a custom label (for the default C{gtk.Button} class this is an "either or" choice). If only stock or only label is given, it falls back to the default behavior. @param label: text for the button @param stock: constant for a stock item @param use_underline: if C{True} a "_" in the label will @param status_bar_style: when C{True} all padding and border underline the next character ''' if label is None or stock is None: gtk.Button.__init__(self, label=label, stock=stock) else: gtk.Button.__init__(self, label=label) icon = gtk.image_new_from_stock(stock, gtk.ICON_SIZE_BUTTON) self.set_image(icon) self.set_use_underline(use_underline) if status_bar_style: button_set_statusbar_style(self) class IconButton(gtk.Button): '''Button with a stock icon, but no label.''' def __init__(self, stock, relief=True, size=gtk.ICON_SIZE_BUTTON): '''Constructor @param stock: constant for the stock item @param relief: when C{False} the button has no visible raised edge and will be flat against the background @param size: the icon size ''' gtk.Button.__init__(self) icon = gtk.image_new_from_stock(stock, size) self.add(icon) self.set_alignment(0.5, 0.5) if not relief: self.set_relief(gtk.RELIEF_NONE) def CloseButton(): '''Constructs a close button for panes and bars''' return IconButton(gtk.STOCK_CLOSE, relief=False, size=gtk.ICON_SIZE_MENU) class IconChooserButton(gtk.Button): '''Widget to allow the user to choose an icon. Intended e.g. for the dialog to configure a custom tool to set an icon for the tool. Shows a button with an image of the icon which opens up a file dialog when clicked. ''' def __init__(self, stock=gtk.STOCK_MISSING_IMAGE, pixbuf=None): '''Constructor @param stock: initial stock icon (until an icon is selected) @param pixbuf: initial image as pixbuf (until an icon is selected) ''' gtk.Button.__init__(self) self.file = None image = gtk.Image() self.add(image) self.set_alignment(0.5, 0.5) if pixbuf: image.set_from_pixbuf(pixbuf) else: image.set_from_stock(stock, gtk.ICON_SIZE_DIALOG) def do_clicked(self): dialog = FileDialog(self, _('Select File')) # T: dialog title dialog.add_filter_images() file = dialog.run() if file: self.set_file(file) def set_file(self, file): '''Set the file to display in the chooser button @param file: a L{File} object ''' image = self.get_child() size = max(image.size_request()) # HACK to get icon size pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(file.path, size, size) image.set_from_pixbuf(pixbuf) self.file = file def get_file(self): '''Get the selected icon file @returns: a L{File} object ''' return self.file # Need to register classes defining / overriding gobject signals gobject.type_register(IconChooserButton) class SingleClickTreeView(gtk.TreeView): '''Sub-class of C{gtk.TreeView} that implements single-click navigation. ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'populate-popup': (gobject.SIGNAL_RUN_LAST, None, (object,)), } mask = gtk.gdk.SHIFT_MASK | gtk.gdk.META_MASK # backwards compatibility if gtk.gtk_version < (2, 12) \ and gtk.pygtk_version >= (2, 12): def set_rubber_banding(self, enable): pass def is_rubber_banding_active(self): return False def do_button_press_event(self, event): # Implement hook for context menu if event.type == gtk.gdk.BUTTON_PRESS \ and event.button == 3: # Check selection state - item under cursor should be selected # see do_button_release_event for comments x, y = map(int, event.get_coords()) info = self.get_path_at_pos(x, y) selection = self.get_selection() if x > 0 and y > 0 and not info is None: path, column, x, y = info if not selection.path_is_selected(path): selection.unselect_all() selection.select_path(path) # else the clcik was on a already selected path else: # click outside area with items ? selection.unselect_all() # Pop menu menu = self.get_popup() if menu: menu.show_all() menu.popup(None, None, None, 3, event.get_time()) else: return gtk.TreeView.do_button_press_event(self, event) def do_button_release_event(self, event): # Implement single click behavior for activating list items # this needs to be done on button release to avoid conflict with # selections, drag-n-drop, etc. if event.type == gtk.gdk.BUTTON_RELEASE \ and event.button == 1 and not event.state & self.mask \ and not self.is_rubber_banding_active(): x, y = map(int, event.get_coords()) # map to int to suppress deprecation warning :S # note that get_coords() gives back (0, 0) when cursor # is outside the treeview window (e.g. drag & drop that # was started inside the tree - see bug lp:646987) info = self.get_path_at_pos(x, y) if x > 0 and y > 0 and not info is None: path, column, x, y = info if self.get_selection().path_is_selected(path): self.row_activated(path, column) # This action is conditional on the path being selected # because otherwise we can not toggle the folding state # of a path without activating it. The assumption being # that the path gets selected on button press and then # gets activated on button release. Clicking the # expander in front of a path should not select the path. # This logic is based on particulars of the C implementation # and might not be future proof. return gtk.TreeView.do_button_release_event(self, event) def get_popup(self): '''Get a popup menu (the context menu) for this widget @returns: a C{gtk.Menu} or C{None} @emits: populate-popup @implementation: do NOT overload this method, implement L{do_initialize_popup} instead ''' menu = gtk.Menu() self.do_initialize_popup(menu) self.emit('populate-popup', menu) if len(menu.get_children()) > 0: return menu else: return None def do_initialize_popup(self, menu): '''Initialize the context menu. This method is called before the C{populate-popup} signal and can be used to put any standard items in the menu. @param menu: the C{gtk.Menu} object for the popup @implementation: can be implemented by sub-classes. Default implementation calls L{populate_popup_expand_collapse()} if the model is a C{gtk.TreeStore}. Otherwise it does nothing. ''' model = self.get_model() if isinstance(model, gtk.TreeStore): self.populate_popup_expand_collapse(menu) def populate_popup_expand_collapse(self, menu, prepend=False): '''Adds "Expand _all" and "Co_llapse all" items to a context menu. Called automatically by the default implementation of L{do_initialize_popup()}. @param menu: the C{gtk.Menu} object for the popup @param prepend: if C{False} append, if C{True} prepend ''' expand = gtk.MenuItem(_("Expand _All")) # T: menu item in context menu expand.connect_object('activate', self.__class__.expand_all, self) collapse = gtk.MenuItem(_("_Collapse All")) # T: menu item in context menu collapse.connect_object('activate', self.__class__.collapse_all, self) populate_popup_add_separator(menu, prepend=prepend) if prepend: menu.prepend(collapse) menu.prepend(expand) else: menu.append(expand) menu.append(collapse) def get_cell_renderer_number_of_items(self): '''Get a C{gtk.CellRendererText} that is set up for rendering the number of items below a tree item. Used to enforce common style between tree views. @returns: a C{gtk.CellRendererText} object ''' cr = gtk.CellRendererText() cr.set_property('xalign', 1.0) #~ cr2.set_property('scale', 0.8) cr.set_property('foreground', 'darkgrey') return cr # Need to register classes defining / overriding gobject signals gobject.type_register(SingleClickTreeView) class BrowserTreeView(SingleClickTreeView): '''Sub-class of C{gtk.TreeView} that is intended for hierarchic lists that can be navigated in "browser mode". It inherits the single-click behavior of L{SingleClickTreeView} and adds the following keybindings: - C{}: Collapse sub-items - C{}: Expand sub-items - C{\}: Collapse whole tree - C{*}: Expand whole tree ''' # TODO some global option to restore to double click navigation ? def __init__(self, *arg): '''Constructor, all arguments are passed to C{gtk.TreeView}''' gtk.TreeView.__init__(self, *arg) self.get_selection().set_mode(gtk.SELECTION_BROWSE) def do_key_press_event(self, event): # Keybindings for the treeview: # * expand all # / or \ collapse all # Right expand sub items # Left collapse sub items handled = True #~ print 'KEY %s (%i)' % (gtk.gdk.keyval_name(event.keyval), event.keyval) if event.keyval in KEYVALS_ASTERISK: self.expand_all() elif event.keyval in KEYVALS_SLASH: self.collapse_all() elif event.keyval == KEYVAL_LEFT: model, paths = self.get_selection().get_selected_rows() if len(paths) == 1: self.collapse_row(paths[0]) elif event.keyval == KEYVAL_RIGHT: model, paths = self.get_selection().get_selected_rows() if len(paths) == 1: self.expand_row(paths[0], 0) else: handled = False if handled: return True else: return gtk.TreeView.do_key_press_event(self, event) # Need to register classes defining / overriding gobject signals gobject.type_register(BrowserTreeView) def button_set_statusbar_style(button): # Set up a style for the statusbar variant to decrease spacing of the button gtk.rc_parse_string('''\ style "zim-statusbar-button-style" { GtkWidget::focus-padding = 0 GtkWidget::focus-line-width = 0 xthickness = 0 ythickness = 0 } widget "*.zim-statusbar-button" style "zim-statusbar-button-style" ''') button.set_name('zim-statusbar-button') button.set_relief(gtk.RELIEF_NONE) class MenuButton(gtk.HBox): '''This class implements a button which pops up a menu when clicked. It behaves different from a combobox because it is not a selector and the button does not show the selected item. So it more like a normal menu. Main example where this class is used is the button with backlinks in the statusbar of the main window. This module is based loosely on gedit-status-combo-box.c from the gedit sources. ''' def __init__(self, label, menu, status_bar_style=False): '''Constructor @param label: the label to show on the button (string or C{gtk.Label}) @param menu: the menu to show on button click @param status_bar_style: when C{True} all padding and border is removed so the button fits in the status bar ''' gtk.HBox.__init__(self) if isinstance(label, basestring): self.label = gtk.Label() self.label.set_markup_with_mnemonic(label) else: assert isinstance(label, gtk.Label) self.label = label self.menu = menu self.button = gtk.ToggleButton() if status_bar_style: button_set_statusbar_style(self.button) widget = self.label else: arrow = gtk.Arrow(gtk.ARROW_UP, gtk.SHADOW_NONE) widget = gtk.HBox(spacing=3) widget.pack_start(self.label, False) widget.pack_start(arrow, False) self.button.add(widget) # We need to wrap stuff in an eventbox in order to get the gdk.Window # which we need to get coordinates when positioning the menu self.eventbox = gtk.EventBox() self.eventbox.add(self.button) self.add(self.eventbox) self.button.connect_object( 'button-press-event', self.__class__.popup_menu, self) self._clicked_signal = self.button.connect_object( 'clicked', self.__class__.popup_menu, self) # TODO reduce size of toggle-button - see gedit-status-combo for example # TODO looks like other statusbar items resize on toggle button def popup_menu(self, event=None): '''This method actually pops up the menu. @param event: the gdk event that triggered this action @implementation: can be overloaded, e.g. to populate the menu dynamically. ''' if not self.get_property('sensitive'): return if event: # we came from button-press-event or similar button = event.button time = event.time if self.button.get_active(): return else: button = 0 time = gtk.get_current_event_time() self.button.handler_block(self._clicked_signal) self.button.set_active(True) self.button.handler_unblock(self._clicked_signal) self.menu.connect('deactivate', self._deactivate_menu) self.menu.show_all() self.menu.popup(None, None, self._position_menu, button, time) def _position_menu(self, menu): x, y = self.eventbox.window.get_origin() w, h = menu.get_toplevel().size_request() y -= h # make the menu pop above the button return x, y, False def _deactivate_menu(self, menu): self.button.handler_block(self._clicked_signal) self.button.set_active(False) self.button.handler_unblock(self._clicked_signal) # Need to register classes defining / overriding gobject signals gobject.type_register(MenuButton) class PanedClass(object): # We change default packing to shrink=False def pack1(self, widget, resize=True, shrink=False): gtk.Paned.pack1(self, widget, resize, shrink) def pack2(self, widget, resize=True, shrink=False): gtk.Paned.pack2(self, widget, resize, shrink) add1 = pack1 add2 = pack2 def add(*a): raise NotImplementedError def pack(*a): raise NotImplementedError class HPaned(PanedClass, gtk.HPaned): pass class VPaned(PanedClass, gtk.VPaned): pass class InputForm(gtk.Table): '''This class implements a table with input widgets. It takes care of constructing the widgets and lay them out as a well formatted input form. This class can be accessed as a dict to get and set the values of the various input widgets by name. This makes it more or less transparent when getting and setting values from the form into the config or preferences. @ivar notebook: the L{Notebook} object, used e.g. for completion in L{PageEntry} inputs @ivar widgets: a dict with the input widgets by name. Use this to access the widgets directly (e.g. to wire more signals). @signal: C{last-activated ()}: this signal is emitted when the last widget in the form is activated, can be used to trigger a default response in a dialog. @signal: C{input-valid-changes ()}: valid state the form changed ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'last-activated': (gobject.SIGNAL_RUN_LAST, None, ()), 'input-valid-changed': (gobject.SIGNAL_RUN_LAST, None, ()), } # Supported input widgets: # CheckButton # RadioButton # SpinButton # ComboBox (text based) # PageEntry / NamespaceEntry / LinkEntry # InputEntry # Because of naming used to map radio buttons into a group # we can't use the keys of the widget mapping one-on-one for # the value mapping. This is why we keep the attribute '_keys'. def __init__(self, inputs=None, values=None, depends=None, notebook=None): '''Constructor. @param inputs: list with input definitions, see L{add_inputs()} for details @param values: initial values for the inputs @param depends: dict with dependencies between widgets, see L{depends()} for details @param notebook: a L{Notebook} object, e.g. for completion in L{PageEntry} inputs ''' gtk.Table.__init__(self) self.set_border_width(5) self.set_row_spacings(5) self.set_col_spacings(12) self.notebook = notebook self._input_valid = True self._keys = [] # names of options - radiogroups are represented as a single item self.widgets = {} # all widgets - contains individual radiobuttons self._widgets = [] # sequence for widgets in self.widgets self._default_activate = None if inputs: self.add_inputs(inputs) if depends: for k, v in depends.items(): self.depends(k, v) if values: self.update(values) def set_default_activate(self, name): '''Mark a widget as the default activation widget. This will cause the "last-activated" signal to be triggered for this widget even if it is not the last widget in the form. @param name: the name or C{None} ''' if name is None: self._default_activate = None else: self._default_activate = self.widgets[name] #{ Form construction methods def add_inputs(self, inputs): '''Add input widgets to the form. Inputs are defined by 3-tuples or 4-tuples of: - The input name - The input type - The label to put in front of the input field - optional extra argument The following input types are supported: - "C{bool}" - C{True} or C{False} (checkbox) - "C{int}" - integer (spin button) - "C{string}" - text entry (L{InputEntry}) - "C{password}" - text entry with chars hidden (L{InputEntry}) - "C{page}" - a page L{Path} (L{PageEntry}) - "C{namespace}" - a namespace L{Path} (L{NamespaceEntry}) - "C{link}" - a link as string (L{LinkEntry}) - "C{dir}" - a L{Dir} object (L{FolderEntry}) - "C{file}" - a L{File} object for an existing file (L{FileEntry}) - "C{image}" - like 'file' but specific for images - "C{output-file}" - like 'file' but for new or existing file - "C{option}" - single option in a group (radio checkboxes) - "C{choice}" - list with choices (combo box) - "C{color}" - color string The "C{int}" and "C{choice}" options need an extra argument to specify the allowed inputs. For "C{int}" this should be a 2-tuple with the minimum and maximum values. For 'choice' it should be a tuple or list with the items to choose from. If the items in the list are 2-tuples they are considered pairs of a key and a user readable label. The input type "C{option}"' can be used to have groups of checkboxes. In this case the name should exist of two parts separated by a ':', first part is the group name and the second part the key for this option. This way multiple options of the same group can be specified as separate widgets. Only the group name will show up as a key in the form, and the value will be the option name of the selected radio button. So you can have names like "select:all" and "select:page" which will result in two radiobuttons. The form will have a key "select" which has either a value "all" or a value "page". The "C{page}", "C{namespace}" and "C{link}" types support an optional extra argument which gives the reference L{Path} for resolving relative paths. This also requires the notebook to be set. A string in the input list will result in a label in the form, using markup. A C{None} or C{''} value in the input list will result in additional row spacing in the form. ''' # For options we use rsplit to split group and option name. # The reason for this that if there are any other ":" separated # parts they belong to the group name, not the option name. # (This is used in e.g. the preference dialog to encode sections # where an option goes in the config.) widgets = [] for input in inputs: if not input: widgets.append(None) continue elif isinstance(input, basestring): widgets.append(input) continue if len(input) == 4: name, type, label, extra = input else: name, type, label = input extra = None if type == 'bool': widgets.append(gtk.CheckButton(label=label)) elif type == 'option': assert ':' in name, 'BUG: options should have name of the form "group:key"' key, _ = name.rsplit(':', 1) # using rsplit to assure another ':' in the # group name is harmless group = self._get_radiogroup(key) if not group: group = None # we are the first widget else: group = group[0][1] # link first widget in group widgets.append(gtk.RadioButton(group=group, label=label)) elif type == 'int': button = gtk.SpinButton() button.set_range(*extra) button.set_increments(1, 5) widgets.append((label, button)) elif type == 'choice': combobox = gtk.combo_box_new_text() if all(isinstance(t, tuple) for t in extra): mapping = {} for key, value in extra: combobox.append_text(value) mapping[value] = key combobox.zim_key_mapping = mapping else: for option in extra: combobox.append_text(option) widgets.append((label, combobox)) elif type == 'link': #~ assert self.notebook entry = LinkEntry(self.notebook, path=extra) # FIXME use inline icon for newer versions of Gtk button = gtk.Button('_Browse') button.connect_object('clicked', entry.__class__.popup_dialog, entry) widgets.append((label, entry, button)) elif type == 'page': #~ assert self.notebook entry = PageEntry(self.notebook, path=extra) widgets.append((label, entry)) elif type == 'namespace': #~ assert self.notebook entry = NamespaceEntry(self.notebook, path=extra) widgets.append((label, entry)) elif type in ('dir', 'file', 'image', 'output-file'): if type == 'dir': entry = FolderEntry() else: new = (type == 'output-file') entry = FileEntry(new=new) entry.file_type_hint = type # FIXME use inline icon for newer versions of Gtk button = gtk.Button('_Browse') button.connect_object('clicked', entry.__class__.popup_dialog, entry) widgets.append((label, entry, button)) elif type in ('string', 'password'): entry = InputEntry() entry.zim_type = type if type == 'password': entry.set_visibility(False) if extra: entry.set_check_func(extra) widgets.append((label, entry)) elif type == 'color': button = gtk.ColorButton() widgets.append((label, button)) else: assert False, 'BUG: unknown field type: %s' % type # Register widget widget = widgets[-1] if isinstance(widget, tuple): widget = widget[1] self.widgets[name] = widget self._widgets.append(name) if ':' in name: # radio button - only add group once group, _ = name.split(':', 1) if not group in self._keys: self._keys.append(group) else: self._keys.append(name) # Connect activate signal if isinstance(widget, gtk.Entry): widget.connect('activate', self.on_activate_widget) else: pass # Connect valid state if isinstance(widget, InputEntry): widget.connect('input-valid-changed', self._check_input_valid) for property in ('visible', 'sensitive'): widget.connect_after('notify::%s' % property, self._check_input_valid) input_table_factory(widgets, table=self) self._check_input_valid() # update our state def depends(self, subject, object): '''Make one of the inputs depend on another widget. This means that e.g. the "subject" widget will become insensitive when the "object" widget is made insensitive. Also hiding the "object" will result in the "subject" being hidden as well. If the "object" has an active state (e.g. if it is an checkbox or a radio option) the "subject" will only be sensitive when the "object" is active. This is useful e.g. when you want a text input that is only sensitive when a specific radio box is selected. @param subject: the name of the subject widget @param object: the name of the object widget ''' subject = self.widgets[subject] object = self.widgets[object] _sync_widget_state(object, subject, check_active=True) def get_input_valid(self): '''Get combined state of all sensitive widgets in the form @returns: C{True} if all sensitive widgets have a valid input ''' return self._input_valid def _check_input_valid(self, *a): # Called by signals when widget state changes #~ print '-'*42 valid = [] for name in self._widgets: widget = self.widgets[name] if isinstance(widget, InputEntry) \ and widget.get_property('visible') \ and widget.get_property('sensitive'): valid.append(self.widgets[name].get_input_valid()) #~ print '>', name, valid[-1] #~ print '=', all(valid) valid = all(valid) if self._input_valid != valid: self._input_valid = valid self.emit('input-valid-changed') def _get_radiogroup(self, name): name += ':' group = [k for k in self._widgets if k.startswith(name)] return [(k, self.widgets[k]) for k in group] def on_activate_widget(self, widget): if widget == self._default_activate \ or not self._focus_next(widget, activatable=True): self.emit('last-activated') def focus_first(self): '''Focus the first widget in the form''' return self._focus_next(None) def focus_next(self): '''Focus the next input in the form''' if gtk.gtk_version >= (2, 14) \ and gtk.pygtk_version >= (2, 14): widget = self.get_focus_child() else: for w in self.widgets.values(): if w.is_focus: widget = w break if widget: return self._focus_next(widget) else: return False def _focus_next(self, widget, activatable=False): # If 'activatable' is True we only focus widgets that have # an 'activated' signal (mainly just TextEntries). This is used # to fine tune the last-activated signal if widget is None: i = 0 else: for k, v in self.widgets.items(): if v == widget: i = self._widgets.index(k) + 1 break else: raise ValueError for k in self._widgets[i:]: widget = self.widgets[k] if widget.get_property('sensitive') \ and widget.get_property('visible') \ and not ( activatable and not isinstance(widget, (gtk.Entry, gtk.ComboBox)) ): widget.grab_focus() return True else: return False #} #{ Dict access methods def __getitem__(self, key): if not key in self._keys: raise KeyError, key elif key in self.widgets: widget = self.widgets[key] if isinstance(widget, LinkEntry): return widget.get_text() # Could be either page or file elif isinstance(widget, (PageEntry, NamespaceEntry)): return widget.get_path() elif isinstance(widget, FSPathEntry): return widget.get_path() elif isinstance(widget, InputEntry): return widget.get_text() elif isinstance(widget, gtk.CheckButton): return widget.get_active() elif isinstance(widget, gtk.ComboBox): if hasattr(widget, 'zim_key_mapping'): label = widget.get_active_text() if label: label = label.decode('utf-8') return widget.zim_key_mapping.get(label) or label else: return widget.get_active_text() elif isinstance(widget, gtk.SpinButton): return int(widget.get_value()) elif isinstance(widget, gtk.ColorButton): if gtk.gtk_version > (2, 14) \ and gtk.pygtk_version >= (2, 14): # This version supposedly gives compacter values return str(widget.get_color()) else: return widget.get_color().to_string() else: raise TypeError, widget.__class__.name else: # Group of RadioButtons for name, widget in self._get_radiogroup(key): if widget.get_active(): _, name = name.rsplit(':', 1) # using rsplit to assure another ':' in the # group name is harmless return name def __setitem__(self, key, value): if not key in self._keys: raise KeyError, key elif key in self.widgets: widget = self.widgets[key] if isinstance(widget, LinkEntry): assert isinstance(value, basestring) widget.set_text(value) elif isinstance(widget, (PageEntry, NamespaceEntry)): if isinstance(value, Path): widget.set_path(value) else: widget.set_text(value or '') elif isinstance(widget, FSPathEntry): if isinstance(value, (File, Dir)): widget.set_path(value) else: widget.set_text(value or '') elif isinstance(widget, InputEntry): value = value or '' widget.set_text(value) elif isinstance(widget, gtk.CheckButton): widget.set_active(value) elif isinstance(widget, gtk.ComboBox): if hasattr(widget, 'zim_key_mapping'): for key, v in widget.zim_key_mapping.items(): if v == value: gtk_combobox_set_active_text(widget, key) break else: gtk_combobox_set_active_text(widget, value) else: gtk_combobox_set_active_text(widget, value) elif isinstance(widget, gtk.SpinButton): widget.set_value(value) elif isinstance(widget, gtk.ColorButton): color = gtk.gdk.color_parse(value) widget.set_color(color) else: raise TypeError, widget.__class__.name else: # RadioButton widget = self.widgets[key + ':' + value] widget.set_active(True) def __iter__(self): return iter(self._keys) def __contains__(self, key): return key in self._keys def keys(self): return self._keys def items(self): return [(k, self[k]) for k in self._keys] def update(self, map): '''Update the value for any existing widget to the value given in C{map}. Unkown keys in C{map} are ignored and widgets that do not have a value in C{map} keep their original value. @param map: a dict with new values for the widgets ''' for key, value in map.items(): if key in self._keys: self[key] = value def copy(self): '''Copy the values of all widgets in the form into a normal dict @returns: a dict with widget values ''' values = {} for key in self._keys: values[key] = self[key] return values #} # Need to register classes defining / overriding gobject signals gobject.type_register(InputForm) class InputEntry(gtk.Entry): '''Sub-class of C{gtk.Entry} with support for highlighting mal-formatted inputs and handles UTF-8 decoding. This class must be used as a generic replacement for C{gtk.Entry} to avoid UTF-8 issues. (This is enforced by the zim test suite which will throw an error for any module using C{gtk.Entry} directly.) The widget has a "valid" state which determines if the content is well formed or not. When the state is invalid the widget will have a red background color. This is used e.g. in dialog response handlers to show the user what widget to modify. The valid state can be either done manually by calling L{set_input_valid()}, or it can be done automatically by providing a function to check what content is valid. Using a function is recommended because it gives more immediate feedback to the user. @signal: C{input-valid-changes ()}: valid state of the widget changed ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'input-valid-changed': (gobject.SIGNAL_RUN_LAST, None, ()), } ERROR_COLOR = '#EF7F7F' # light red (derived from Tango style guide) def __init__(self, check_func=None, allow_empty=True, show_empty_invalid=False, placeholder_text=None, allow_whitespace=False): '''Constructor @param check_func: a function to check input is valid. This function will be called with the current text as argument and should return C{True} if this text is a valid input. @param allow_empty: if C{False} an empty string is considered invalid input @param show_empty_invalid: if C{True} a red background is also shown when the entry is still empty, if C{False} the background is kept normal even if the empty input is invalid. Without this option a whole input form would start in red color, which looks bad. @param placeholder_text: text to show in the widget when it is empty and does not have focus, text will be shown in a color different from normal text and disappear when the user selects the widget. Used to set hints on the usage of the widget. @param allow_whitespace: if C{True} allow trailing whitespace or even string containing only whitespace. If C{False} all whitespace is stripped. ''' # NOTE: when porting to Gtk3 use gtk.Entry.set_placeholder_text() # and remove our own implementation gtk.Entry.__init__(self) self._normal_color = None self.allow_empty = allow_empty self.show_empty_invalid = show_empty_invalid self.allow_whitespace = allow_whitespace self.placeholder_text = placeholder_text self._placeholder_text_shown = False self.check_func = check_func self._input_valid = False self.do_changed() # Initialize state self.connect('changed', self.__class__.do_changed) def _init_base_color(*a): # This is handled on expose event, because style does not # yet reflect theming on construction if self._normal_color is None: self._normal_color = self.style.base[gtk.STATE_NORMAL] self._set_base_color(self.get_input_valid()) self.connect('expose-event', _init_base_color) def set_check_func(self, check_func): '''Set a function to check whether input is valid or not @param check_func: the function ''' self.check_func = check_func self.do_changed() def set_icon(self, icon, cb_func, tooltip=None): '''Add an icon in the entry widget behind the text @param icon: the icon as stock ID @param cb_func: the callback when the icon is clicked; the callback will be called without any arguments @param tooltip: tooltip text for the icon @returns: C{True} if succesful, C{False} if not supported by Gtk version @requires: Gtk >= 2.16 @todo: add argument to set tooltip on the icon ''' if gtk.gtk_version < (2, 16) \ and gtk.pygtk_version >= (2, 16): return False self.set_property('secondary-icon-stock', icon) if tooltip: self.set_property('secondary-icon-tooltip-text', tooltip) def on_icon_press(self, icon_pos, event): if icon_pos == gtk.ENTRY_ICON_SECONDARY: cb_func() self.connect('icon-press', on_icon_press) return True def set_icon_to_clear(self): '''Adds a "clear" icon in the entry widget This method calls L{set_icon()} with the right defaults for a stock "Clear" icon. In addition it makes the icon insensitive when there is no text in the entry. Clicking the icon will clear the entry. @returns: C{True} if succesful, C{False} if not supported by Gtk version @requires: Gtk >= 2.16 ''' if gtk.gtk_version < (2, 16) \ and gtk.pygtk_version >= (2, 16): return False self.set_icon(gtk.STOCK_CLEAR, self.clear, _('Clear')) # T: tooltip for the inline icon to clear a text entry widget def check_icon_sensitive(self): text = self.get_text() self.set_property('secondary-icon-sensitive', bool(text)) check_icon_sensitive(self) self.connect('changed', check_icon_sensitive) return True def get_text(self): '''Get the text from the widget. Like C{gtk.Entry.get_text()} but with UTF-8 decoding and whitespace stripped. @returns: string ''' if self._placeholder_text_shown: return '' text = gtk.Entry.get_text(self) if not text: return '' elif self.allow_whitespace: return text.decode('utf-8') else: return text.decode('utf-8').strip() def set_text(self, text): '''Wrapper for C{gtk.Entry.set_text()}. @param text: string ''' if not text \ and not self.get_property('has-focus'): gtk.Entry.set_text(self, text) self._show_placeholder_text() else: self._hide_placeholder_text() gtk.Entry.set_text(self, text) def get_input_valid(self): '''Get the valid state. @returns: C{True} if the input is valid ''' return self._input_valid def set_input_valid(self, valid, show_empty_invalid=None): '''Set input valid or invalid state @param valid: C{True} or C{False} @param show_empty_invalid: if not C{None} change the C{show_empty_invalid} attribute ''' if show_empty_invalid is not None: self.show_empty_invalid = show_empty_invalid if valid == self._input_valid: return if self._normal_color: self._set_base_color(valid) # else: not yet initialized self._input_valid = valid self.emit('input-valid-changed') def _set_base_color(self, valid): if valid \ or (not self.get_text() and not self.show_empty_invalid): self.modify_base(gtk.STATE_NORMAL, self._normal_color) else: self.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.ERROR_COLOR)) def clear(self): '''Clear the text in the entry''' self.set_text('') def do_expose_event(self, event): gtk.Entry.do_expose_event(self, event) if not self.get_property('has-focus'): self._show_placeholder_text() def do_focus_in_event(self, event): self._hide_placeholder_text() gtk.Entry.do_focus_in_event(self, event) def do_focus_out_event(self, event): gtk.Entry.do_focus_out_event(self, event) self._show_placeholder_text() def _show_placeholder_text(self): if not self.get_text() \ and self.placeholder_text: self._placeholder_text_shown = True gtk.Entry.set_text(self, self.placeholder_text) layout = self.get_layout() attr = pango.AttrList() end = len(self.placeholder_text) attr.insert(pango.AttrStyle(pango.STYLE_ITALIC, 0, end)) c = 65535/16*8 attr.insert(pango.AttrForeground(c,c,c, 0, end)) # TODO make color configurable, now just solid grey layout.set_attributes(attr) # The layout is reset when new text is set, so # no need to "unset" the style at _hide_placeholder_text() def _hide_placeholder_text(self): if self._placeholder_text_shown: gtk.Entry.set_text(self, '') self._placeholder_text_shown = False def do_changed(self): text = self.get_text() or '' if self.check_func: self.set_input_valid(self.check_func(text)) else: self.set_input_valid(bool(text) or self.allow_empty) # Need to register classes defining / overriding gobject signals gobject.type_register(InputEntry) class FSPathEntry(InputEntry): '''Base class for L{FileEntry} and L{FolderEntry}, handles input of file system paths. File paths can either be absolute paths or relative to the notebook. When a notebook and optionally a page path are set, L{Notebook.resolve_file()} is used to make file paths relative. This class should not be instantiated directly, use either L{FileEntry} or L{FolderEntry}. @todo: add completion for file paths - make sure both absolute and relative paths are supported + re-use this completion in L{LinkEntry} ''' def __init__(self): InputEntry.__init__(self, allow_empty=False) self.notebook = None self.notebookpath = None self.action = None self.file_type_hint = None def set_use_relative_paths(self, notebook, path=None): '''Set the notebook and path to be used for relative paths. @param notebook: the L{Notebook} object for resolving paths or C{None} to disable relative paths. @param path: a L{Path} object used for resolving relative links ''' self.notebook = notebook self.notebookpath = path def set_path(self, path): '''Set the file path for this entry @param path: a L{File} or L{Dir} object ''' assert isinstance(path, (File, Dir)) if self.notebook: text = self.notebook.relative_filepath(path, self.notebookpath) if text is None: if self.notebook.document_root: text = path.uri else: text = path.path self.set_text(text) else: self.set_text(path.user_path or path.path) def get_path(self): '''Get the file path for this entry @returns: a L{File} or L{Dir} object (depending on sub-class) ''' text = self.get_text() if text: if self.notebook: path = self.notebook.resolve_file(text, self.notebookpath) if path: return self._class(path.path) return self._class(text) else: return None def popup_dialog(self): '''Run a dialog to browse for a file or folder. Used by the 'browse' button in input forms. ''' window = self.get_toplevel() if self.action == gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER: title = _('Select Folder') # T: dialog title elif self.file_type_hint == 'image': title = _('Select Image') # T: dialog title else: title = _('Select File') # T: dialog title dialog = FileDialog(window, title, self.action) if self.file_type_hint == 'image': dialog.add_filter_images() path = FSPathEntry.get_path(self) # overloaded in LinkEntry if path: dialog.set_file(path) file = dialog.run() if not file is None: FSPathEntry.set_path(self, file) class FileEntry(FSPathEntry): '''Widget to select a file''' _class = File def __init__(self, file=None, new=False): '''Constructor. @param file: a L{File} object @param new: if C{True} the intention is a new file (e.g. output file), or to overwrite an existing file. If C{False} only existing files can be selected. ''' FSPathEntry.__init__(self) self.file_type_hint = 'file' if new: self.action = gtk.FILE_CHOOSER_ACTION_SAVE else: self.action = gtk.FILE_CHOOSER_ACTION_OPEN if file: self.set_file(file) set_file = FSPathEntry.set_path get_file = FSPathEntry.get_path class FolderEntry(FSPathEntry): '''Widget to select a folder''' _class = Dir def __init__(self, folder=None): '''Constructor @param folder: a L{Dir} object ''' FSPathEntry.__init__(self) self.file_type_hint = 'dir' self.action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER if folder: self.set_folder(folder) set_folder = FSPathEntry.set_path get_folder = FSPathEntry.get_path def gtk_entry_completion_match_func(completion, key, iter, column): if key is None: return False key = key.decode('utf-8').lower() key = unicodedata.normalize('NFKD', key) # decode utf-8 because we are called by gtk function # normalization could be done elsewhere, but keep together model = completion.get_model() text = model.get_value(iter, column) if text is not None: text = unicodedata.normalize('NFKD', text.decode('utf-8')) return key in text.lower() else: return False def gtk_entry_completion_match_func_startswith(completion, key, iter, column): if key is None: return False key = key.decode('utf-8').lower() key = unicodedata.normalize('NFKD', key) # decode utf-8 because we are called by gtk function # normalization could be done elsewhere, but keep together model = completion.get_model() text = model.get_value(iter, column) if text is not None: text = unicodedata.normalize('NFKD', text.decode('utf-8')) return text.lower().startswith(key) else: return False class PageEntry(InputEntry): '''Widget to select a zim page path This widget features completion for existing page names and shows whether the entered text is not a valid page name. The page paths can be shown eitehr absolute or relative. If a reference path is given paths will be shown relative to this reference. ''' _allow_select_root = False # This attribute implements logic needed for NamespaceEntry def __init__(self, notebook, path=None, subpaths_only=False, existing_only=False): '''Constructor @param notebook: the L{Notebook} object for resolving paths and completing existing pages, but allowed to be C{None} e.g. for testing @param path: a L{Path} object used for resolving relative links @param subpaths_only: if C{True} the input will always be considered a child 'C{path}' @param existing_only: if C{True} only allow to select existing pages @note: 'C{subpaths_only}' and 'C{existing_only}' can also be set using the like named attributes ''' self.notebook = notebook self.notebookpath = path self.subpaths_only = subpaths_only self.existing_only = existing_only self._current_completion = () if self._allow_select_root: placeholder_text = _('') # T: default text for empty page section selection else: placeholder_text = None InputEntry.__init__(self, allow_empty=self._allow_select_root, placeholder_text=placeholder_text) assert path is None or isinstance(path, Path) completion = gtk.EntryCompletion() completion.set_model(gtk.ListStore(str, str)) # visible name, match name completion.set_text_column(0) completion.set_inline_completion(True) self.set_completion(completion) def set_use_relative_paths(self, notebook, path=None): '''Set the notebook and path to be used for relative paths. @param notebook: the L{Notebook} object for resolving paths and completing existing pages, or C{None} to disable relative paths. @param path: a L{Path} object used for resolving relative links ''' self.notebook = notebook self.notebookpath = path def set_path(self, path): '''Set the path to be shown in the entry. If you have the link as a string, use L{set_text()} instead @param path: L{Path} object ''' self.set_text(':'+path.name) def get_path(self): '''Get the path shown in the widget. If C{None} is returned the widget is flagged as invalid. So e.g. in a dialog you can get a path and refuse to close a dialog if the path is None and the user will automatically be alerted to the missing input. @returns: a L{Path} object or C{None} is no valid path was entered ''' name = self.get_text().decode('utf-8').strip() if self._allow_select_root and (name == ':' or not name): return Path(':') elif not name: self.set_input_valid(False) return None else: if self.subpaths_only and not name.startswith('+'): name = '+' + name try: if self.notebook: path = self.notebook.resolve_path(name, source=self.notebookpath) else: path = Path(name) except PageNameError: self.set_input_valid(False) return None else: if self.existing_only: page = self.notebook.get_page(path) if not (page and page.exists()): return None return path @staticmethod def _walk_relative(notebook, path): # sort nearest neighbor first using relative paths ## TODO can be more efficient with a visitor pattern ## that can stop recursion of some branches or force order # first yield children index = notebook.index for p in index.walk(path): yield notebook.relative_link(path, p), p.basename # than peers and parents, sort by distance if path.namespace: parent = Path(path.parts[0]) peers = [] for p in index.walk(parent): if not p.ischild(path): relname = notebook.relative_link(path, p) basename = p.basename distance = relname.count(':') peers.append((distance, relname, basename)) peers.sort() for distance, relname, basename in peers: yield relname, basename else: parent = path # than the rest of the tree, excluding direct parent for p in index.walk(): if not p.ischild(parent): yield notebook.relative_link(path, p), p.basename def do_changed(self): text = self.get_text() if not text: if self.existing_only: self.set_input_valid(False) else: self.set_input_valid(True) # FIXME: why should pageentry always allow empty input ? return # Check for a valid page name and clean up the text for completion orig = text if text in (':', '+'): pass else: try: text = Notebook.cleanup_pathname(text.lstrip('+')) except PageNameError: self.set_input_valid(False) return else: if self.existing_only: path = self.get_path() # get_path() checks existence self.set_input_valid(not path is None) else: self.set_input_valid(True) # restore pre- and postfix to cleaned up text if orig[0] == ':' and text[0] != ':': text = ':' + text elif orig[0] == '+' and text[0] != '+': text = '+' + text if orig[-1] == ':' and text[-1] != ':': text = text + ':' # Start completion #~ print 'COMPLETE page: "%s", raw: "%s", ref: %s' % (text, orig, self.notebookpath) if not self.notebook: return # no completion without a notebook if ':' in text: i = text.rfind(':') prefix = text[:i+1] # can still start with "+" elif text.startswith('+'): prefix = '+' else: prefix = '' # Check if we completed already for this case if prefix == self._current_completion: return else: self._current_completion = prefix # Resolve path if prefix == ':': path = Path(':') elif prefix == '': if self.notebookpath: path = Path(self.notebookpath.namespace) else: path = Path(':') elif prefix == '+': path = self.notebookpath or Path(':') else: link = prefix reference = self.notebookpath or Path(':') if self.subpaths_only and not link.startswith('+'): link = '+' + link.lstrip(':') try: path = self.notebook.resolve_path(link, source=reference) except PageNameError: return # Fill model with pages from pathname completion = self.get_completion() model = completion.get_model() model.clear() if prefix: # Complete a single namespace based on the prefix completion.set_match_func(gtk_entry_completion_match_func_startswith, 1) for p in self.notebook.index.list_pages(path): model.append((prefix+p.basename, prefix+p.basename)) else: # Find any pages that match the text completion.set_match_func(gtk_entry_completion_match_func, 1) if self.notebookpath: for relname, basename in self._walk_relative(self.notebook, self.notebookpath): model.append((relname, basename)) else: for p in self.notebook.index.walk(): model.append((":"+p.name, p.basename)) completion.complete() class NamespaceEntry(PageEntry): '''Widget to select a zim page path as a namespace Use this instead of L{PageEntry} when you want to allow selecting a namespace. E.g. this will be allowed to select ":" or empty string for the root namespace, which is not allowed in PageEntry. ''' _allow_select_root = True class LinkEntry(PageEntry, FileEntry): '''Widget entering links in zim pages. This widget accepts either zim page paths, file paths and URLs. ''' _class = File def __init__(self, notebook, path=None): '''Constructor @param notebook: the L{Notebook} object for resolving paths and completing existing pages, but allowed to be C{None} e.g. for testing @param path: a L{Path} object used for resolving relative links ''' PageEntry.__init__(self, notebook, path) self.action = gtk.FILE_CHOOSER_ACTION_OPEN self.file_type_hint = None def get_path(self): # Check we actually got a valid path text = self.get_text().decode('utf-8').strip() if text: type = link_type(text) if type == 'page': return PageEntry.get_path(self) else: return None else: return None def do_changed(self): # Switch between path completion and file completion text = self.get_text().decode('utf-8').strip() if text: type = link_type(text) if type == 'page': PageEntry.do_changed(self) #~ elif type == 'file': #~ FileEntry.do_changed(self) else: self.set_input_valid(True) else: self.set_input_valid(True) def format_title(title): '''Formats a window title (in fact just adds " - Zim" to the end).''' assert not title.lower().endswith(' zim') return '%s - Zim' % title def get_window(widget): window = widget.get_toplevel() if widget else None # GtkInterface also implements get_toplevel return window if isinstance(window, gtk.Window) else None def register_window(window): '''Register this instance with the zim application, if not done so already. ''' if hasattr(window, 'ui') \ and hasattr(window.ui, 'register_new_window'): window.ui.register_new_window(window) class uistate_property(object): '''Class for uistate get/set attributes''' # TODO add hook such that it will be initialized on init of owner obj def __init__(self, key, *default): self.key = key self.default = default self._initialized = False def __get__(self, obj, klass): if obj: if not self._initialized: obj.uistate.setdefault(self.key, *self.default) self._initialized = True return obj.uistate[self.key] def __set__(self, obj, value): obj.uistate[self.key] = value # Some constants used to position widgets in the window panes # These are named rather than numbered because they also appear # in plugin preferences as options and as uistate keys TOP = 'top' #: Top frame position in window BOTTOM = 'bottom'#: Bottom frame position in window LEFT_PANE = 'left_pane' #: Left pane position in window RIGHT_PANE = 'right_pane' #: Right pane position in window TOP_PANE = 'top_pane' #: Top pane position in window BOTTOM_PANE = 'bottom_pane' #: Bottom pane position in window PANE_POSITIONS = ( (LEFT_PANE, _('Left Side Pane')), # T: Option for placement of plugin widgets (RIGHT_PANE, _('Right Side Pane')), # T: Option for placement of plugin widgets (BOTTOM_PANE, _('Bottom Pane')), # T: Option for placement of plugin widgets (TOP_PANE, _('Top Pane')), # T: Option for placement of plugin widgets ) WIDGET_POSITIONS = ( ((LEFT_PANE, TOP), _('Top Left')), # T: Option for placement of plugin widgets ((LEFT_PANE, BOTTOM), _('Bottom Left')), # T: Option for placement of plugin widgets ((RIGHT_PANE, TOP), _('Top Right')), # T: Option for placement of plugin widgets ((RIGHT_PANE, BOTTOM), _('Bottom Right')), # T: Option for placement of plugin widgets ) class WindowSidePane(gtk.VBox): # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'close': (gobject.SIGNAL_RUN_LAST, None, ()), } def __init__(self): gtk.VBox.__init__(self) # Add bar with label and close button self.topbar = gtk.HBox() self.topbar.label = gtk.Label() self.topbar.label.set_alignment(0.0, 0.5) self.topbar.pack_start(self.topbar.label) self.topbar.pack_end(self._close_button(), False) self.pack_start(self.topbar, False) # Add notebook self.notebook = gtk.Notebook() self.notebook.set_show_border(False) if gtk.gtk_version >= (2, 22) \ and gtk.pygtk_version >= (2, 22): button = self._close_button() self.notebook.set_action_widget(button, gtk.PACK_END) self.add(self.notebook) self._update_topbar() def _close_button(self): button = CloseButton() button.connect('clicked', lambda o: self.emit('close')) return button def _update_topbar(self): children = self.get_children() assert children[0] == self.topbar n_pages = self.notebook.get_n_pages() # remove close button if any for widget in children: if isinstance(widget, WindowSidePaneWidget): widget.embed_closebutton(None) for widget in self.notebook.get_children(): if isinstance(widget, WindowSidePaneWidget): widget.embed_closebutton(None) # Option 1: widget above notebook or no tabs in notebook # Show topbar without title, show tabs in notebook # (or embed close button in widget) if children[1] != self.notebook or n_pages == 0: embedded = False if children[1] != self.notebook \ and isinstance(children[1], WindowSidePaneWidget): # see if we can embed the close button in the widget button = self._close_button() embedded = children[1].embed_closebutton(button) if not embedded: self.topbar.label.set_text('') # no title self.topbar.set_no_show_all(False) self.topbar.show_all() else: self.topbar.set_no_show_all(True) self.topbar.hide() self.notebook.set_show_tabs(True) if gtk.gtk_version >= (2, 22) \ and gtk.pygtk_version >= (2, 22): button = self.notebook.get_action_widget(gtk.PACK_END) button.set_no_show_all(True) button.hide() # TODO: for widget + single tab case add another title bar ? # Option 2: notebook with single tab # hide tabs, use topbar to show tab label # (or embed close button in notebook tab) elif n_pages == 1: self.notebook.set_show_tabs(False) child = self.notebook.get_nth_page(0) title = self.notebook.get_tab_label_text(child) self.topbar.label.set_text(title) if gtk.gtk_version >= (2, 22) \ and gtk.pygtk_version >= (2, 22): button = self.notebook.get_action_widget(gtk.PACK_END) button.set_no_show_all(True) button.hide() embedded = False if isinstance(child, WindowSidePaneWidget): # see if we can embed the close button in the widget button = self._close_button() embedded = child.embed_closebutton(button) if not embedded: self.topbar.set_no_show_all(False) self.topbar.show_all() else: self.topbar.set_no_show_all(True) self.topbar.hide() # Option 3: notebook with multiple tabs # show tabs, no text in topbar # If possible put close button next to tabs else: self.notebook.set_show_tabs(True) self.topbar.label.set_text('') # no title if gtk.gtk_version >= (2, 22) \ and gtk.pygtk_version >= (2, 22): button = self.notebook.get_action_widget(gtk.PACK_END) button.set_no_show_all(False) button.show_all() self.topbar.set_no_show_all(True) self.topbar.hide() else: self.topbar.set_no_show_all(False) self.topbar.show_all() def add_widget(self, widget, position): self.pack_start(widget, False) if position == TOP: # shuffle above notebook, below close bar self.reorder_child(widget, 1) self._update_topbar() def add_tab(self, title, widget): self.notebook.append_page(widget, tab_label=gtk.Label(title)) self._update_topbar() def remove(self, widget): # Note: try box.remove() except .. causes GErrors here :( if widget in self.get_children(): gtk.Box.remove(self, widget) self._update_topbar() return True elif widget in self.notebook.get_children(): self.notebook.remove(widget) self._update_topbar() return True else: return False def is_empty(self): children = self.get_children() if len(children) == 2: assert children[0] == self.topbar assert children[1] == self.notebook return children[1].get_n_pages() == 0 # check for tabs else: return False # some widget in the pane def grab_focus(self): if self.is_empty(): return widget = gtk_notebook_get_active_page(self.notebook) if widget: widget.grab_focus() elif self.notebook.get_n_pages() > 0: self.notebook.set_current_page(0) widget = self.notebook.get_nth_page(0) widget.grab_focus() else: for widget in self.get_children(): if widget != self.topbar and widget != self.notebook: widget.grab_focus() break def do_key_press_event(self, event): if event.keyval == KEYVAL_ESC: self.emit('close') return True else: return gtk.VBox.do_key_press_event(self, event) # Need to register classes defining gobject signals gobject.type_register(WindowSidePane) class WindowSidePaneWidget(object): '''Base class for widgets that want to integrate nicely in the L{WindowSidePane} ''' def embed_closebutton(self, button): '''Embed a button in the widget to close the side pane @param button: an L{IconButton} or C{None} to un-set @returns: C{True} if supported and succesful ''' return False from zim.config import ConfigDefinition, ConfigDefinitionByClass class ConfigDefinitionPaneToggle(ConfigDefinition): def __init__(self, default, window): ConfigDefinition.__init__(self, default) self.window = window def check(self, value): # Must be list of valid pane names if isinstance(value, basestring): value = self._eval_string(value) if isinstance(value, (tuple, list)) \ and all(e in self.window._zim_window_sidepanes for e in value): return value else: raise ValueError, 'Unknown pane names in: %s' % value class ConfigDefinitionPaneState(ConfigDefinitionByClass): # Check value is state as used by set_pane_state() and # get_pane_state(), so 3 elements: boolean, integer and # a label or None def __init__(self, default): ConfigDefinitionByClass.__init__(self, default, klass=tuple) def check(self, value): value = ConfigDefinitionByClass.check(self, value) if isinstance(value, (tuple, list)) \ and len(value) == 3 \ and isinstance(value[0], bool) \ and isinstance(value[1], int) \ and (value[2] is None or isinstance(value[2], basestring)): return value else: raise ValueError, 'Value is not a valid pane state' class Window(gtkwindowclass): '''Sub-class of C{gtk.Window} that will take care of hooking the window into the application framework and adds entry points so plugins can add side panes etc. It will divide the window horizontally in 3 panes, and the center pane again vertically in 3. The result is something like this:: +-----------------------------+ |menu | +-----+----------------+------+ | | top pane | | | | | | | s +----------------+ s | | i | Main widget | i | | d | | d | | e | | e | | b +----------------+ b | | a |tabs| | a | | r | bottom pane | r | | | | | +----------------------+------+ Any pane that is not used will not been shown. The important thing is to create placeholders where plugins *might* want to add some widget. When zim is configured to run on a maemo device this class will inherit from C{hildon.Window} instead of C{gtk.Window} to make sure it plays nicely with the maemo environment. All windows in zim must inherit from this class. @signal: C{pane-state-changed (pane, visible, active)}: emitted when visibility or active tab changed for a specific pane ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'pane-state-changed': (gobject.SIGNAL_RUN_LAST, None, (object, bool, object)), } def __init__(self): gtkwindowclass.__init__(self) self._registered = False self._last_sidepane_focus = None self._zim_window_main = gtk.VBox() self._zim_window_left_paned = HPaned() self._zim_window_right_paned = HPaned() self._zim_window_top_paned = VPaned() self._zim_window_bottom_paned = VPaned() self._zim_window_left_pane = WindowSidePane() self._zim_window_right_pane = WindowSidePane() self._zim_window_top_pane = WindowSidePane() self._zim_window_bottom_pane = WindowSidePane() self._zim_window_top_special = gtk.VBox() gtkwindowclass.add(self, self._zim_window_main) self._zim_window_main.add(self._zim_window_left_paned) self._zim_window_left_paned.pack1(self._zim_window_left_pane, resize=False) self._zim_window_left_paned.pack2(self._zim_window_right_paned, resize=True) self._zim_window_right_paned.pack1(self._zim_window_top_special, resize=True) self._zim_window_right_paned.pack2(self._zim_window_right_pane, resize=False) self._zim_window_top_special.add(self._zim_window_top_paned) self._zim_window_top_paned.pack1(self._zim_window_top_pane, resize=False) self._zim_window_top_paned.pack2(self._zim_window_bottom_paned, resize=True) self._zim_window_bottom_paned.pack2(self._zim_window_bottom_pane, resize=True) self._zim_window_sidepanes = { LEFT_PANE: ( self._zim_window_left_paned, self._zim_window_left_pane), RIGHT_PANE: ( self._zim_window_right_paned, self._zim_window_right_pane), TOP_PANE: ( self._zim_window_top_paned, self._zim_window_top_pane), BOTTOM_PANE: ( self._zim_window_bottom_paned, self._zim_window_bottom_pane), } def _on_switch_page(notebook, page, pagenum, key): visible, size, active = self.get_pane_state(key) self.emit('pane-state-changed', key, visible, active) for key, value in self._zim_window_sidepanes.items(): paned, pane = value pane.set_no_show_all(True) pane.zim_pane_state = (False, 200, None) pane.connect('close', lambda o, k: self.set_pane_state(k, False), key) pane.notebook.connect_after('switch-page', _on_switch_page, key) def add(self, widget): '''Add the main widget. @param widget: gtk widget to add in the window ''' self._zim_window_bottom_paned.pack1(widget, resize=True) def add_bar(self, widget, position): '''Add a bar to top or bottom of the window. Used e.g. to add menu-, tool- & status-bars. @param widget: gtk widget for the bar @param position: C{TOP} or C{BOTTOM} ''' self._zim_window_main.pack_start(widget, False) if position == TOP: # reshuffle widget to go above main widgets but # below earlier added bars i = self._zim_window_main.child_get_property( self._zim_window_left_paned, 'position') self._zim_window_main.reorder_child(widget, i) self._zim_window_main.set_focus_chain([self._zim_window_left_paned]) # Force to ignore the bars in keyboard navigation # items in the bars are all accesible by accelerators def add_tab(self, title, widget, pane): '''Add a tab in one of the panes. @param title: string with title to put in the tab @param widget: the gtk widget to show in the tab @param pane: can be one of: C{LEFT_PANE}, C{RIGHT_PANE}, C{TOP_PANE} or C{BOTTOM_PANE}. ''' key = pane paned, pane = self._zim_window_sidepanes[key] pane.add_tab(title, widget) self.set_pane_state(key, True) def add_widget(self, widget, position): '''Add a widget in one of the panes outside of the tabs @param widget: the gtk widget to show in the tab @param position: a 2-tuple of a pane and a position in the pane. First element can be either C{LEFT_PANE} or C{RIGHT_PANE} (C{TOP_PANE} and C{BOTTOM_PANE} are not supported). Second element can be either C{TOP}, or C{BOTTOM}. @note: Placing a widget in C{TOP_PANE}, C{TOP}, is supported as a special case, but should not be used by plugins. ''' key, pos = position if key in (TOP_PANE, BOTTOM_PANE): if key == TOP_PANE and pos == TOP: # Special case for top widget outside of pane # used especially for PathBar self._zim_window_top_special.pack_start(widget, False) self._zim_window_top_special.reorder_child(widget, 0) else: raise NotImplementedError elif key in (LEFT_PANE, RIGHT_PANE): paned, pane = self._zim_window_sidepanes[key] pane.add_widget(widget, pos) self.set_pane_state(key, True) else: raise KeyError def remove(self, widget): '''Remove widget from any pane @param widget: the widget to remove ''' if self._last_sidepane_focus == widget: self._last_sidepane_focus = None box = self._zim_window_top_special if widget in box.get_children(): box.remove(widget) return for key in (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE): paned, pane = self._zim_window_sidepanes[key] if pane.remove(widget): if pane.is_empty(): self.set_pane_state(key, False) break else: raise ValueError, 'Widget not found in this window' def init_uistate(self): assert self.uistate self.uistate.define(( ('toggle_panes', ConfigDefinitionPaneToggle([], self)), )) for key in (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE): default = self.get_pane_state(key) self.uistate.define(( (key, ConfigDefinitionPaneState(default)), )) self.set_pane_state(key, *self.uistate[key]) def save_uistate(self): assert self.uistate for key in (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE): self.uistate[key] = self.get_pane_state(key) def get_pane_state(self, pane): '''Returns the state of a side pane. @param pane: can be one of: C{LEFT_PANE}, C{RIGHT_PANE}, C{TOP_PANE} or C{BOTTOM_PANE}. @returns: a 3-tuple of visibility (boolean), pane size (integer), and active tab (label). ''' # FIXME revert calculate size instead of position for left # and bottom widget key = pane paned, pane = self._zim_window_sidepanes[key] if pane.get_property('visible'): position = paned.get_position() active = gtk_notebook_get_active_tab(pane.notebook) return (True, position, active) else: return pane.zim_pane_state return state def set_pane_state(self, pane, visible, size=None, activetab=None, grab_focus=False): '''Returns the state of a side pane. @param pane: can be one of: C{LEFT_PANE}, C{RIGHT_PANE}, C{TOP_PANE} or C{BOTTOM_PANE}. @param visible: C{True} to show the pane, C{False} to hide @param size: size of the side pane @param activetab: label of the active tab in the notebook or None (fails silently if tab is not found) @param grab_focus: if C{True} active tab will grab focus ''' # FIXME get parent widget size and subtract to get position # for left and botton notebook # FIXME enforce size < parent widget and > 0 key = pane paned, pane = self._zim_window_sidepanes[key] if pane.get_property('visible') == visible \ and size is None and activetab is None: if grab_focus: pane.grab_focus() return # nothing else to do oldstate = self.get_pane_state(key) if size is None: size = oldstate[1] if activetab is None: activetab = oldstate[2] position = size if visible: if not pane.is_empty(): pane.set_no_show_all(False) pane.show_all() paned.set_position(position) if activetab is not None: try: gtk_notebook_set_active_tab(pane.notebook, activetab) except ValueError: pass if grab_focus: pane.grab_focus() #else: # logger.debug('Trying to show an empty pane...') else: pane.hide() pane.set_no_show_all(True) pane.zim_pane_state = (visible, size, activetab) self.emit('pane-state-changed', key, visible, activetab) def toggle_panes(self, show=None): '''Toggle between showing and not showing panes. Will remember the panes that were shown last time this method was called but defaults to showing all panes. @param show: if C{True} show panes, if C{False} hide them, if C{None} toggle current state ''' # Note that our uistate['toggle_panes'] does not # reflect what panes are visible when e.g. restarting zim # - this is saved in the pane state uistate - instead it # remembers what panes could be shown when toggling. visible = bool(self.get_visible_panes()) if show is None: show = not visible elif show == visible: return # nothing to do if show: panes = self.uistate['toggle_panes'] \ or (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE) for pane in panes: self.set_pane_state(pane, True) else: self.uistate['toggle_panes'] = self.get_visible_panes() for pane in (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE): self.set_pane_state(pane, False) def show_all_panes(self): for pane in (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE): self.set_pane_state(pane, True) def get_visible_panes(self): '''Returns a list of panes that are visible''' panes = [] for key in (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE): paned, pane = self._zim_window_sidepanes[key] if not pane.is_empty() and pane.get_property('visible'): panes.append(key) return panes def get_used_panes(self): '''Returns a list of panes that are in use (i.e. not empty)''' panes = [] for key in (LEFT_PANE, RIGHT_PANE, TOP_PANE, BOTTOM_PANE): paned, pane = self._zim_window_sidepanes[key] if not pane.is_empty(): panes.append(key) return panes def do_set_focus(self, widget): # keep track of last sidepane widget that had focus.. if widget: parent = widget.get_parent() while parent: if isinstance(parent, WindowSidePane): self._last_sidepane_focus = widget break parent = parent.get_parent() return gtkwindowclass.do_set_focus(self, widget) def focus_last_sidepane(self): if self._last_sidepane_focus \ and self._last_sidepane_focus.get_property('visible'): self._last_sidepane_focus.grab_focus() return True else: return False def pack_start(self, *a): raise NotImplementedError, "Use add() instead" def show(self): self.show_all() def show_all(self): # First register, than init uistate - this ensures plugins # are enabled before we finalize the presentation of the window. # This is important for state of e.g. panes to work correctly if not self._registered: self._registered = True register_window(self) if hasattr(self, 'uistate'): self.init_uistate() gtkwindowclass.show_all(self) # Need to register classes defining gobject signals gobject.type_register(Window) class Dialog(gtk.Dialog, ConnectorMixin): '''Sub-class of C{gtk.Dialog} with a number of convenience methods to create dialogs. Also takes care of registering dialogs with the main interface object, so plugins can hook into them. Intended as base class for all input dialogs in zim. (See L{ErrorDialog}, L{QuestionDialog}, L{MessageDialog} and L{FileDialog} for other dialog types). A minimal sub-class should implement a constructor which calls L{Dialog.__init__()} and L{Dialog.add_form()} to defined the dialog, and implements C{do_response_ok()} to handle the result. The C{Dialog} class takes care of calling L{ConnecterMixin.disconnect_all()} when it is destroyed. So sub-classes can use the L{ConnectorMixin} methods and all callbacks will be cleaned up after the dialog. @ivar ui: parent C{gtk.Window} or C{GtkInterface} @ivar vbox: C{gtk.VBox} for main widgets of the dialog @ivar form: L{InputForm} added by C{add_form()} @ivar uistate: L{ConfigDict} to store state of the dialog, persistent per notebook. The size and position of the dialog are stored as automatically in this dict already. @ivar result: result to be returned by L{run()} @ivar destroyed: when C{True} the dialog is already destroyed ''' @classmethod def unique(klass, handler, *args, **opts): '''Constructor which ensures there is only one instance of this dialog at a time. It implements a singleton pattern by installing a weak reference in the handler object. If there is an dialog active which is not yet destroyed, this dialog is returned, otherwise a new dialog is created. Typically you can use this as:: dialog = MyDialog.unique(ui, somearg) dialog.present() @param handler: the object constructing the dialog @param args: arguments to pass to the dialog constructor @param opts: arguments to pass to the dialog constructor @note: when a dialog already existed the arguments provided to this constructor are not used ''' attr = '_unique_dialog_%s' % klass.__name__ dialog = None if hasattr(handler, attr): ref = getattr(handler, attr) dialog = ref() if dialog is None or dialog.destroyed: if dialog: dialog.destroy() # just to be sure - can be called several times without problem dialog = klass(*args, **opts) setattr(handler, attr, weakref.ref(dialog)) return dialog def __init__(self, ui, title, buttons=gtk.BUTTONS_OK_CANCEL, button=None, help_text=None, help=None, defaultwindowsize=(-1, -1) ): '''Constructor. @param ui: either a parent window or dialog or the main C{GtkInterface} object @param title: the dialog title @param buttons: a constant controlling what kind of buttons the dialog will have. One of: - C{None} or C{gtk.BUTTONS_NONE}: for dialogs taking care of constructing the buttons themselves - C{gtk.BUTTONS_OK_CANCEL}: Render Ok and Cancel - C{gtk.BUTTONS_CLOSE}: Only set a Close button @param button: a 2-tuple of a label and a stock item to use instead of the default 'Ok' button (either stock or label can be None). @param help_text: set the help text, see L{add_help_text()} @param help: pagename for a manual page, see L{set_help()} @param defaultwindowsize: default window size in pixels @note: some sub-classes expect C{self.ui} to always be a L{GtkInterface} ''' gtk.Dialog.__init__( self, parent=get_window(ui), title=format_title(title), flags=gtk.DIALOG_NO_SEPARATOR|gtk.DIALOG_DESTROY_WITH_PARENT, ) if hasattr(ui, 'ui') and hasattr(ui.ui, 'uistate'): ui = ui.ui # HACK - we get other window instead.. - avoid triggering Mock objects in test ... self.ui = ui self.result = None self._registered = False if not ui_environment['smallscreen']: self.set_border_width(10) self.vbox.set_spacing(5) if hasattr(self, 'uistate'): assert isinstance(self.uistate, zim.config.ConfigDict) # just to be sure elif hasattr(ui, 'uistate') \ and isinstance(ui.uistate, zim.config.SectionedConfigDict): key = self.__class__.__name__ self.uistate = ui.uistate[key] else: self.uistate = zim.config.ConfigDict() # note: _windowpos is defined with a leading "_" so it is not # persistent across instances, this is intentional to avoid # e.g. messy placement for seldom used dialogs self.uistate.setdefault('_windowpos', None, check=value_is_coord) if self.uistate['_windowpos'] is not None: x, y = self.uistate['_windowpos'] self.move(x, y) self.uistate.setdefault('windowsize', defaultwindowsize, check=value_is_coord) if self.uistate['windowsize'] is not None: w, h = self.uistate['windowsize'] self.set_default_size(w, h) self._no_ok_action = False if not button is None: button = Button(*button) if buttons is None or buttons == gtk.BUTTONS_NONE: self._no_ok_action = True elif buttons == gtk.BUTTONS_OK_CANCEL: self.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) if button: self.add_action_widget(button, gtk.RESPONSE_OK) else: self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) elif buttons == gtk.BUTTONS_CLOSE: self.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_OK) self._no_ok_action = True else: assert False, 'BUG: unknown button type' # TODO set Ok button as default widget # see gtk.Window.set_default() if help_text: self.add_help_text(help_text) if help: self.set_help(help) def destroy(self): self.disconnect_all() gtk.Dialog.destroy(self) @property def destroyed(self): return not self.has_user_ref_count # Returns True when dialog has been destroyed #{ Layout methods def add_extra_button(self, button, pack_start=True): '''Add a button to the action area at the bottom of the dialog. Packs the button in the list of primary buttons (by default these are in the lower right of the dialog) @param button: the C{gtk.Button} (or other widget) @param pack_start: if C{True} pack to the left (towards the middle of the dialog), if C{False} pack to the right. ''' self.action_area.pack_start(button, False) if pack_start: self.action_area.reorder_child(button, 0) def set_help(self, pagename): '''Set the name of the manual page with help for this dialog. Setting this will add a "help" button to the dialog. @param pagename: the manual page name ''' #~ assert hasattr(self.ui, 'show_help'), 'Need ui object to open help' self.help_page = pagename button = gtk.Button(stock=gtk.STOCK_HELP) button.connect_object('clicked', self.__class__.show_help, self) self.action_area.add(button) self.action_area.set_child_secondary(button, True) def show_help(self, page=None): '''Show a help page @param page: the manual page, if C{None} the page as set with L{set_help()} is used ''' self.ui.show_help(page or self.help_page) # recurses until gui.show_help is reached def add_help_text(self, text): '''Adds a label with an info icon in front of it. Intended for informational text in dialogs. @param text: help text ''' hbox = help_text_factory(text) self.vbox.pack_start(hbox, False) def add_text(self, text): '''Adds a label to the dialog Also see L{add_help_text()} for another style option. @param text: dialog text ''' label = gtk.Label(text) label.set_use_markup(True) label.set_alignment(0.0, 0.0) self.vbox.pack_start(label, False) def add_form(self, inputs, values=None, depends=None, trigger_response=True): '''Convenience method to construct a form with input widgets and add them to the dialog. See L{InputForm.add_inputs()} for details. @param inputs: list with input definitions @param values: initial values for the inputs @param depends: dict with dependencies between inputs @param trigger_response: if C{True} pressing C{} in the last entry widget will immediatly call L{response_ok()}. Set to C{False} if more forms will follow in the same dialog. ''' if hasattr(self.ui, 'notebook'): notebook = self.ui.notebook else: notebook = None self.form = InputForm(inputs, values, depends, notebook) if trigger_response: self.form.connect('last-activated', lambda o: self.response_ok()) self.vbox.pack_start(self.form, False) return self.form #} #{ Interaction methods def run(self): '''Wrapper for C{gtk.Dialog.run()}, also calls C{show_all()} @returns: C{self.result} ''' self.show_all() if TEST_MODE: assert TEST_MODE_RUN_CB, 'Dialog run without test callback' TEST_MODE_RUN_CB(self) else: while not self.destroyed: gtk.Dialog.run(self) return self.result def present(self): self.show_all() if TEST_MODE: assert TEST_MODE_RUN_CB, 'Dialog run without test callback' TEST_MODE_RUN_CB(self) else: gtk.Dialog.present(self) def show(self): self.show_all() def show_all(self): logger.debug('Opening dialog "%s"', self.title) if not self._registered: register_window(self) self._registered = True if not TEST_MODE: gtk.Dialog.show_all(self) def response_ok(self): '''Trigger the response signal with response type 'OK'.''' self.response(gtk.RESPONSE_OK) def assert_response_ok(self): '''Like L{response_ok()}, but raise an error when L{do_response_ok} returns C{False}. Also it explicitly does not handle errors in L{do_response_ok}. Intended for use by the test suite. @returns: C{self.result} @raises AssertionError: if L{do_response_ok} returns C{False} ''' if not (self._no_ok_action or self.do_response_ok() is True): raise AssertionError, '%s.do_response_ok() did not return True' % self.__class__.__name__ self.save_uistate() self.destroy() return self.result def do_response(self, id): # Handler for the response signal, dispatches to do_response_ok() # or do_response_cancel() and destroys the dialog if that function # returns True. # Ensure the dialog always closes on delete event, regardless # of any errors or bugs that may occur. if id == gtk.RESPONSE_OK and not self._no_ok_action: logger.debug('Dialog response OK') try: destroy = self.do_response_ok() except Exception, error: ErrorDialog(self.ui, error).run() destroy = False else: if not destroy: logger.warning('Dialog input not valid') elif id == gtk.RESPONSE_CANCEL: logger.debug('Dialog response CANCEL') try: destroy = self.do_response_cancel() except Exception, error: ErrorDialog(self.ui, error).run() destroy = False else: if not destroy: logger.warning('Could not cancel dialog') else: destroy = True try: if ui_environment['platform'] != 'maemo': x, y = self.get_position() self.uistate['_windowpos'] = (x, y) w, h = self.get_size() self.uistate['windowsize'] = (w, h) self.save_uistate() except: logger.exception('Exception in do_response()') if destroy: self.destroy() logger.debug('Closed dialog "%s"', self.title[:-6]) def do_response_ok(self): '''Handler called when the user clicks the "OK" button (or an equivalent button) @returns: C{True} if succesful and the dialog can close. Returns C{False} if e.g. input is not valid, this will keep the dialog open. @implementation: must be implemented by sub-classes that have an "OK" button ''' raise NotImplementedError def do_response_cancel(self): '''Handler called when the user clicks the "Cancel" button. @note: this method is B{not} called when the dialog is closed using e.g. the "[x]" button in the window decoration. It is only used when the user explicitly clicks "Cancel". @returns: C{True} if the dialog can be destroyed close. Returning C{False} will keep the dialog open. @implementation: can be implemented by sub-classes that have an "Cancel" button ''' return True def save_uistate(self): '''Method when the dialog is about to exit or hide and wants to save the uistate. Sub-classes implementing this method should use it to set additional state parameter in C{self.uistate}. @implementation: can be implemented by sub-classes that have some additional uistate to save ''' pass #} # Need to register classes defining gobject signals gobject.type_register(Dialog) class ErrorDialog(gtk.MessageDialog): '''The is the main class for error dialogs in zim. It not only presents the error to the user, but also takes care of logging it. So the error dialog can be used as a generic catch all for exceptions in the user interface. The way the error is shown depends on the class of the exception: For exceptions that inherit from L{zim.errors.Error} or C{EnvironmentError} (e.g. C{OSError} or C{IOError}) a normal error dialog will be shown. This covers errors that can can occur in normal usage. As a special case the "filename" attribute of Environment errors is used and added to the error message. On the other all exceptions that do not inherit from these classes (so all standard in exceptions like C{AssertionError}, C{KeyError} etc.) are considered the result of bugs and the dialog will say: "Looks like you found a bug" and show a stack trace. @note: in menu action handlers you typically do not need to catch exceptions with an error dialog. The standard menu wrapper takes care of that. ''' def __init__(self, ui, error, exc_info=None, do_logging=True, buttons=gtk.BUTTONS_CLOSE ): '''Constructor @param ui: either a parent window or dialog or the main C{GtkInterface} object @param error: the actual error, either an C{Exception} object (including instances of L{zim.errors.Error}), a string with the error description, or a 2-tuple of the short message and the longer description as strings. Using a tuple here will give a better looking dialog over using a simple string. @param exc_info: this is an optional argument that takes the result of C{sys.exc_info()}. This parameter is not necessary in most cases where the dialog is run while the exception is still in scope. One reason to pass it on explicitly is the handling of errors from an async operation in the main tread. @param do_logging: if C{True} also log the error, if C{False} assume someone else already did @param buttons: a constant controlling what kind of buttons the dialog will have. One of: - C{None} or C{gtk.BUTTONS_NONE}: for dialogs taking care of constructing the buttons themselves - C{gtk.BUTTONS_OK_CANCEL}: Render Ok and Cancel - C{gtk.BUTTONS_CLOSE}: Only set a Close button ''' if not isinstance(error, Exception): if isinstance(error, tuple): msg, description = error error = zim.errors.Error(msg, description) else: msg = unicode(error) error = zim.errors.Error(msg) self.error = error self.do_logging = do_logging msg, show_trace = zim.errors.get_error_msg(error) gtk.MessageDialog.__init__( self, parent=get_window(ui), type=gtk.MESSAGE_ERROR, buttons=buttons, message_format=msg ) if isinstance(error, zim.errors.Error): self.showing_trace = False # used in test self.format_secondary_text(error.description) elif show_trace: self.showing_trace = True # used in test self.format_secondary_text( _('When reporting this bug please include\n' 'the information from the text box below') ) # T: generic error dialog text # TODO add link to bug tracker # Add widget with debug info text = self.get_debug_text(exc_info) window, textview = ScrolledTextView(text, monospace=True) window.set_size_request(350, 200) self.vbox.add(window) self.vbox.show_all() # TODO use an expander here ? else: self.showing_trace = False # used in test pass def get_debug_text(self, exc_info=None): '''Get the text to show in the log of a "You found a bug" dialog. Includes zim version info and traceback info. @param exc_info: this is an optional argument that takes the result of C{sys.exc_info()} @returns: debug log as string ''' import zim import traceback if not exc_info: exc_info = sys.exc_info() if exc_info[2]: tb = exc_info[2] else: tb = None text = 'This is zim %s\n' % zim.__version__ + \ 'Platform: %s\n' % os.name + \ 'Locale: %s %s\n' % locale.getdefaultlocale() + \ 'FS encoding: %s\n' % zim.fs.ENCODING + \ 'Python: %s\n' % str(tuple(sys.version_info)) + \ 'Gtk: %s\n' % str(gtk.gtk_version) + \ 'Pygtk: %s\n' % str(gtk.pygtk_version) text += zim.get_zim_revision() + '\n' # FIXME: more info here? Like notebook path, page, environment etc. ? text += '\n======= Traceback =======\n' if tb: lines = traceback.format_tb(tb) text += ''.join(lines) else: text += '\n' text += self.error.__class__.__name__ + ': ' + unicode(self.error) del exc_info # recommended by manual return text def run(self): '''Runs the dialog and destroys it directly.''' logger.debug('Running %s', self.__class__.__name__) if self.do_logging: zim.errors.log_error(self.error) if TEST_MODE and TEST_MODE_RUN_CB: TEST_MODE_RUN_CB(self) else: self._run() def _run(self): while True: response = gtk.MessageDialog.run(self) if response == gtk.RESPONSE_OK and not self.do_response_ok(): continue else: break self.destroy() def do_response_ok(self): '''Response handler for the 'OK' button @implementation: optional to be implemented by sub-classes that want to run some action after presenting the error. ''' return True class QuestionDialog(gtk.MessageDialog): '''Convenience class to prompt the user with Yes/No answer type of questions. Note that message dialogs do not have a title. ''' def __init__(self, ui, question): '''Constructor. @param ui: either a parent window or dialog or the main C{GtkInterface} object @param question: a question that can be answered by 'yes' or 'no', either as sring or a 2-tuple of the actual question and a longer explanation as srtings. Using a tuple here will give a better looking dialog. ''' if isinstance(question, tuple): question, text = question else: text = None self.question = question self.response = None gtk.MessageDialog.__init__( self, parent=get_window(ui), type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_YES_NO, message_format=question ) if text: self.format_secondary_text(text) self.connect('response', self.__class__.do_response) def do_response(self, id): self.response = id def run(self): '''Runs the dialog and destroys it directly. @returns: C{True} if the user clicked 'Yes', C{False} otherwise. ''' logger.debug('Running QuestionDialog') logger.debug('Q: %s', self.question) if TEST_MODE: assert TEST_MODE_RUN_CB, 'Dialog run without test callback' TEST_MODE_RUN_CB(self) else: gtk.MessageDialog.run(self) self.destroy() answer = self.response == gtk.RESPONSE_YES logger.debug('A: %s', answer) return answer class MessageDialog(gtk.MessageDialog): '''Convenience wrapper for C{gtk.MessageDialog}, should be used for informational popups without an action. Note that message dialogs do not have a title. ''' def __init__(self, ui, msg): '''Constructor. @param ui: either a parent window or dialog or the main C{GtkInterface} object @param msg: the message either as sring or a 2-tuple of the actual question and a longer explanation as strings. Using a tuple here will give a better looking dialog. ''' if isinstance(msg, tuple): msg, text = msg else: text = None self.response = None gtk.MessageDialog.__init__( self, parent=get_window(ui), type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_OK, message_format=msg, flags=gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, ) if text: self.format_secondary_text(text) def add_extra_button(self, button, pack_start=True): '''Add a button to the action area at the bottom of the dialog. Packs the button in the list of primary buttons (by default these are in the lower right of the dialog) @param button: the C{gtk.Button} (or other widget) @param pack_start: if C{True} pack to the left (towards the middle of the dialog), if C{False} pack to the right. ''' self.action_area.pack_start(button, False) if pack_start: self.action_area.reorder_child(button, 0) def run(self): '''Runs the dialog and destroys it directly.''' logger.debug('Running MessageDialog') if TEST_MODE: assert TEST_MODE_RUN_CB, 'Dialog run without test callback' TEST_MODE_RUN_CB(self) else: self.show_all() gtk.MessageDialog.run(self) self.destroy() def assert_response_ok(self): return True # message dialogs are always OK class FileDialog(Dialog): '''File Chooser dialog, that allows to browser the file system and select files or folders. Similar to C{gtk.FileChooserDialog} but inherits from L{Dialog} instead. This dialog will automatically show previews for image files. When using C{dialog.run()} it will return the selected file(s) or dir(s) based on the arguments given during construction. ''' def __init__(self, ui, title, action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=gtk.BUTTONS_OK_CANCEL, button=None, help_text=None, help=None, multiple=False ): '''Constructor. @param ui: either a parent window or dialog or the main C{GtkInterface} object @param title: the dialog title @param action: the file chooser action, one of:: gtk.FILE_CHOOSER_ACTION_OPEN gtk.FILE_CHOOSER_ACTION_SAVE gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER @param buttons: see L{Dialog.__init__()} @param button: see L{Dialog.__init__()} @param help_text: see L{Dialog.__init__()} @param help: see L{Dialog.__init__()} @param multiple: if C{True} the dialog will allow selecting multiple files at once. ''' if button is None: if action == gtk.FILE_CHOOSER_ACTION_OPEN: button = (None, gtk.STOCK_OPEN) elif action == gtk.FILE_CHOOSER_ACTION_SAVE: button = (None, gtk.STOCK_SAVE) # else Ok will do if ui_environment['platform'] == 'maemo': defaultsize = (800, 480) else: defaultsize = (500, 400) Dialog.__init__(self, ui, title, defaultwindowsize=defaultsize, buttons=buttons, button=button, help_text=help_text, help=help) self.filechooser = gtk.FileChooserWidget(action=action) self.filechooser.set_do_overwrite_confirmation(True) self.filechooser.set_select_multiple(multiple) self.filechooser.connect('file-activated', lambda o: self.response_ok()) self.vbox.add(self.filechooser) # FIXME hook to expander to resize window for FILE_CHOOSER_ACTION_SAVE self.preview_widget = gtk.Image() self.filechooser.set_preview_widget(self.preview_widget) self.filechooser.connect('update-preview', self.on_update_preview) def on_update_preview(self, *a): filename = self.filechooser.get_preview_filename() try: info, w, h = gtk.gdk.pixbuf_get_file_info(filename) if w <= 128 and h <= 128: # Show icons etc. on real size pixbuf = gtk.gdk.pixbuf_new_from_file(filename) else: # Scale other images to fit the window pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(filename, 128, 128) self.preview_widget.set_from_pixbuf(pixbuf) self.filechooser.set_preview_widget_active(True) except: self.filechooser.set_preview_widget_active(False) return def set_file(self, file): '''Set the file or dir to pre select in the dialog @param file: a L{File} or L{Dir} object ''' ok = self.filechooser.set_filename(file.path) if not ok: raise Exception, 'Could not set filename: %s' % file.path def get_file(self): '''Get the current selected file @returns: a L{File} object or C{None}. ''' path = self.filechooser.get_filename() if path is None: return None else: return File(path.decode('utf-8')) def get_files(self): '''Get list of selected file. Assumes the dialog was created with C{multiple=True}. @returns: a list of L{File} objects ''' paths = [path.decode('utf-8') for path in self.filechooser.get_filenames()] return [File(path) for path in paths] def get_dir(self): '''Get the the current selected dir. Assumes the dialog was created with action C{gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER} or C{gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER}. @returns: a L{Dir} object or C{None} ''' path = self.filechooser.get_filename().decode('utf-8') if path is None: return None else: return Dir(path) def _add_filter_all(self): filter = gtk.FileFilter() filter.set_name(_('All Files')) # T: Filter in open file dialog, shows all files (*) filter.add_pattern('*') self.filechooser.add_filter(filter) def add_filter(self, name, glob): '''Add a filter for files with specific extensions in the dialog @param name: the label to display in the filter selection @param glob: a file pattern (e.g. "*.txt") @returns: the C{gtk.FileFilter} object ''' if len(self.filechooser.list_filters()) == 0: self._add_filter_all() filter = gtk.FileFilter() filter.set_name(name) filter.add_pattern(glob) self.filechooser.add_filter(filter) self.filechooser.set_filter(filter) return filter def add_filter_images(self): '''Add a standard file filter for selecting image files. @returns: the C{gtk.FileFilter} object ''' if len(self.filechooser.list_filters()) == 0: self._add_filter_all() filter = gtk.FileFilter() filter.set_name(_('Images')) # T: Filter in open file dialog, shows image files only filter.add_pixbuf_formats() filter.add_mime_type('image/*') # to allow types like .ico self.filechooser.add_filter(filter) self.filechooser.set_filter(filter) return filter def do_response_ok(self): '''Default response handler. Will check filechooser action and whether or not we select multiple files or dirs and set result of the dialog accordingly, so the method run() will return the selected file(s) or folder(s). ''' action = self.filechooser.get_action() multiple = self.filechooser.get_select_multiple() if action in ( gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER ): if multiple: self.result = self.get_dirs() else: self.result = self.get_dir() else: if multiple: self.result = self.get_files() else: self.result = self.get_file() return bool(self.result) class ProgressBarDialog(gtk.Dialog): '''This class implements a dialog with a progress bar. ProgressBarDialogs supposed to run modal, but are not called with C{run()} as they are typically driven by a callback of a async action. Typical construct would be:: dialog = ProgressBarDialog(ui, 'My progress bar') def cb_func(*arg): cancel = dialog.pulse() return cancel with dialog: self.async_foo(callback=cb_func) This example assumes that the method C{async_foo()} will cancel as soon as the callback returns C{False}. The dialog is used as context manager, so the dialog is properly destroyed in case of an error. The usage of a progress bar dialog I{must} implement a cancel action. Note that progress bars dialogs do not have a title. But the given title will be shown as a label in the dialog itself. If you know how often L{pulse()} will be called and give this total number the bar will display a percentage. Otherwise the bar will just bounce up and down without indication of remaining time. ''' def __init__(self, ui, text, total=None): '''Constructor @param ui: either a parent window or dialog or the main C{GtkInterface} object @param text: text to show above the progress bar. Typically should be the action being executed, like "Updating Links". This is not a dialog title, so phrasing is slightly different. @param total: number of times we expect L{pulse()} to be called, if known. Will result in the bar showing progress by percentage. Can later be modified by supplying a new total number directly to L{pulse()}. ''' self.ui = ui self.cancelled = False gtk.Dialog.__init__( # no title - see HIG about message dialogs self, parent=get_window(self.ui), title='', flags=gtk.DIALOG_NO_SEPARATOR | gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) ) self.set_border_width(10) self.vbox.set_spacing(5) self.set_default_size(300, 0) label = gtk.Label() label.set_markup(''+encode_markup_text(text)+'') label.set_alignment(0.0, 0.5) self.vbox.pack_start(label, False) self.progressbar = gtk.ProgressBar() self.vbox.pack_start(self.progressbar, False) self.msg_label = gtk.Label() self.msg_label.set_alignment(0.0, 0.5) self.msg_label.set_ellipsize(pango.ELLIPSIZE_START) self.vbox.pack_start(self.msg_label, False) self.set_total(total) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.destroy() return False # re-raises error def set_total(self, total): '''Set the number of times we expect L{pulse()} to be called, calling this method also resets the count @param total: number of times we expect L{pulse()} to be called ''' self.total = total self.count = 0 def pulse(self, msg=None, count=None, total=None): '''update the dialog and move the progress bar by one step. First call to C{pulse()} will also trigger a C{show_all()} if the dialog is not shown yet. By not showing the dialog before C{pulse()} is called prevents the dialog flashing over the screen when the operation was very quick after all and never needed to call the callback. This method also run other pending gtk events. So the interface keeps looking repsonsive is a long operation calls this method often enough. @param msg: optional message to show below the progress bar, e.g. the name of the item being processed @param count: count of steps already done, if C{None} the number of steps is equal to number of times C{pulse()} has been called. @param total: total number of steps expected, if C{None} a previous set total is used. If no total is known the bar will just bounce up and down without indication of remaining items. @returns: C{True} until the 'Cancel' button has been pressed, this should be used to decide if the background job should continue or not. ''' if not TEST_MODE and not self.get_property('visible'): self.show_all() if total and total != self.total: self.set_total(total) self.count = count or 0 elif count: self.count = count - 1 if self.total and self.count < self.total: self.count += 1 fraction = float(self.count) / self.total self.progressbar.set_fraction(fraction) self.progressbar.set_text('%i%%' % int(fraction * 100)) else: self.progressbar.pulse() if msg: self.msg_label.set_markup(''+encode_markup_text(msg)+'') while gtk.events_pending(): gtk.main_iteration(block=False) return not self.cancelled def show_all(self): logger.debug('Opening ProgressBarDialog') if not TEST_MODE: gtk.Dialog.show_all(self) def do_response(self, id): logger.debug('ProgressBarDialog get response %s', id) self.cancelled = True #def do_destroy(self): # logger.debug('Closed ProgressBarDialog') # Need to register classes defining gobject signals gobject.type_register(ProgressBarDialog) class LogFileDialog(Dialog): '''Simple dialog to show a log file''' def __init__(self, ui, file): Dialog.__init__(self, ui, _('Log file'), buttons=gtk.BUTTONS_CLOSE) # T: dialog title for log view dialog - e.g. for Equation Editor self.set_default_size(600, 300) window, textview = ScrolledTextView(file.read(), monospace=True) self.vbox.add(window) class Assistant(Dialog): '''Dialog with multi-page input, sometimes also revert to as a "wizard". Similar to C{gtk.Assistent} separate implementation to allow more flexibility in the dialog layout. Each "page" in the assistant is a step in the work flow. Pages should inherit from L{AssistantPage}. Pages share the 'uistate' dict with assistant object, and can also use this to communicate state to another page. So each step can change its look based on state set in the previous step. (This is sometimes called a "Whiteboard" design pattern: each page can access the same "whiteboard" that is the uistate dict.) Sub-classes of this dialog can freely manipulate the flow of pages e.g. by overloading the L{previous_page()} and L{next_page()} methods. ''' def __init__(self, ui, title, **options): '''Constructor @param ui: either a parent window or dialog or the main C{GtkInterface} object @param title: dialog title @param options: other dialog options, see L{Dialog.__init__()} ''' Dialog.__init__(self, ui, title, **options) self.set_border_width(5) self._pages = [] self._page = -1 self._uistate = self.uistate self.uistate = self._uistate.copy() # Use temporary state, so we can cancel the wizard buttons = [b for b in self.action_area.get_children() if not self.action_area.child_get_property(b, 'secondary')] #~ print [b.get_label() for b in buttons] self.ok_button = buttons[0] # HACK: not sure this order fixed self.ok_button.set_no_show_all(True) self.back_button = gtk.Button(stock=gtk.STOCK_GO_BACK) self.back_button.connect_object('clicked', self.__class__.previous_page, self) self.action_area.add(self.back_button) self.forw_button = gtk.Button(stock=gtk.STOCK_GO_FORWARD) self.forw_button.set_no_show_all(True) self.forw_button.connect_object('clicked', self.__class__.next_page, self) self.action_area.add(self.forw_button) self.action_area.reorder_child(self.ok_button, -1) def append_page(self, page): '''Append a page @param page: an L{AssistantPage} object ''' assert isinstance(page, AssistantPage) page.connect('input-valid-changed', self._update_valid) self._pages.append(page) def run(self): assert self._pages self.set_page(0) Dialog.run(self) def get_pages(self): '''Get all pages @returns: a list of L{AssistantPage} objects ''' return self._pages def get_page(self): '''Get the current page @returns: a L{AssistantPage} object ''' if self._page > -1: return self._pages[self._page] else: return None def set_page(self, i): '''Set the current page, based on sequence number @param i: the index of the page to be shown ''' if i < 0 or i >= len(self._pages): return False # Wrap up previous page if self._page > -1: self._pages[self._page].save_uistate() # Remove previous page for child in self.vbox.get_children(): if not isinstance(child, gtk.ButtonBox): self.vbox.remove(child) self._page = i page = self._pages[self._page] # Add page title - use same color as used by gtkassistent.c # This is handled on expose event, because style does not # yet reflect theming on construction # However also need to disconnect the signal after first use, # because otherwise this keeps firing, which hangs the loop # for handling events in ProgressBarDialog.pulse() - LP #929247 ebox = gtk.EventBox() def _set_heading_color(*a): ebox.modify_fg(gtk.STATE_NORMAL, self.style.fg[gtk.STATE_SELECTED]) ebox.modify_bg(gtk.STATE_NORMAL, self.style.bg[gtk.STATE_SELECTED]) self.disconnect(self._expose_event_id) return False # propagate self._expose_event_id = \ self.connect_after('expose-event', _set_heading_color) hbox = gtk.HBox() hbox.set_border_width(5) ebox.add(hbox) self.vbox.pack_start(ebox, False) label = gtk.Label() label.set_markup('' + page.title + '') hbox.pack_start(label, False) label = gtk.Label() label.set_markup('(%i/%i)' % (self._page+1, len(self._pages))) hbox.pack_end(label, False) # Add actual page self.vbox.add(page) self.vbox.show_all() page.init_uistate() self.back_button.set_sensitive(self._page > 0) if self._page < len(self._pages) - 1: self.forw_button.show() self.ok_button.hide() else: self.forw_button.hide() self.ok_button.show() self._update_valid() return True def _update_valid(self, *a): page = self._pages[self._page] ok = page.get_input_valid() self.forw_button.set_sensitive(ok) self.ok_button.set_sensitive(ok) def next_page(self): '''Go forward to the next page''' return self.set_page(self._page + 1) def previous_page(self): '''Go back to the previous page''' return self.set_page(self._page - 1) def do_response(self, id): if id == gtk.RESPONSE_OK: # Wrap up previous page if self._page > -1: self._pages[self._page].save_uistate() self._uistate.update(self.uistate) Dialog.do_response(self, id) def assert_response_ok(self): # Wrap up previous page if self._page > -1: self._pages[self._page].save_uistate() self._uistate.update(self.uistate) if not self.do_response_ok() is True: raise AssertionError, '%s.do_response_ok() did not return True' % self.__class__.__name__ self.save_uistate() self.destroy() return self.result class AssistantPage(gtk.VBox): '''Base class for pages in an L{Assistant} dialog. Typically each page will contain a number of input widgets that are logically grouped. After filling them in the user presses "Forward" to go to the next page. In order for the "Forward" button to becomes sensitive all widgets must have valid input. @cvar title: title to show above this page @ivar uistate: dict shared between all pages in the same dialog, use this to set values giving the interface state. @ivar assistant: the dialog this page belongs to @ivar form: an L{InputForm} when L{add_form()} was used @signal: C{input-valid-changed ()}: emitted when the valid state of the page changed ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'input-valid-changed': (gobject.SIGNAL_RUN_LAST, None, ()), } title = '' def __init__(self, assistant): '''Constructor @param assistant: the L{Assistant} dialog ''' gtk.VBox.__init__(self) self.set_border_width(5) self.uistate = assistant.uistate self.assistant = assistant self._input_valid = True self.form = None def init_uistate(self): '''This method is called when this page is shown in the dialog. Should be used to update uistate according to input of other pages. Keep in mind that uistate can have changed since the constructor was called - even when this is the first page, the dialog has a "Back" button. @implementation: must be implementated by all subclasseses ''' pass def save_uistate(self): '''This method is called before leaving the page. It should be used to update uitstate based on in put widgets. @implementation: must be implementated by all subclasseses that do not update uistate in real time ''' pass def add_form(self, inputs, values=None, depends=None): '''Convenience method to construct a form with input widgets and add them to the dialog. See L{InputForm.add_inputs()} for details. @param inputs: list with input definitions @param values: initial values for the inputs @param depends: dict with dependencies between inputs ''' self.form = InputForm(inputs, values, depends, notebook=self.assistant.ui.notebook) self.form.connect('input-valid-changed', lambda o: self.check_input_valid()) self.pack_start(self.form, False) self.check_input_valid() return self.form def get_input_valid(self): '''Get valid state for the page @returns: C{True} if all input is valid ''' return self._input_valid def check_input_valid(self): '''Check overall valid stat of the page. Called if the valid state if the form is changed. And should be called for any other custom widgets in the page. @implementation: should be implemented by sub-classes that add widgets outside of the form @emits: input-valid ''' if self.form: valid = self.form.get_input_valid() else: valid = True if self._input_valid != valid: self._input_valid = valid self.emit('input-valid-changed') # Need to register classes defining gobject signals gobject.type_register(AssistantPage) class ImageView(gtk.Layout): '''Widget to show an image, scales the image and sets proper background. ''' SCALE_FIT = 1 #: scale image with the window (if the image is bigger) SCALE_STATIC = 2 #: use scaling factor __gsignals__ = { 'size-allocate': 'override', } def __init__(self, bgcolor='#FFF', checkerboard=True): '''Constructor @param bgcolor: background color as color hex code, (e.g. "#FFF") @param checkerboard: if C{True} a checkerboard is drawn behind transparent images, if C{False} it is just the background color. ''' gtk.Layout.__init__(self) self.set_flags(gtk.CAN_FOCUS) self.scaling = self.SCALE_FIT self.factor = 1 self._pixbuf = None self._render_size = None # allocation w, h for which we have rendered self._render_timeout = None # timer before updating rendering self._image = gtk.Image() # pixbuf is set for the image in _render() self.add(self._image) colormap = self._image.get_colormap() self._lightgrey = colormap.alloc_color('#666') self._darkgrey = colormap.alloc_color('#999') if bgcolor: self.set_bgcolor(bgcolor) self.checkerboard = checkerboard def set_bgcolor(self, bgcolor): '''Set background color @param bgcolor: background color as color hex code, (e.g. "#FFF") ''' assert bgcolor.startswith('#'), 'BUG: Should specify colors in hex' color = gtk.gdk.color_parse(bgcolor) # gtk.gdk.Color(spec) only for gtk+ >= 2.14 self.modify_bg(gtk.STATE_NORMAL, color) def set_checkerboard(self, checkerboard): '''Set checkerboard for transparent images @param checkerboard: if C{True} a checkerboard is drawn behind transparent images, if C{False} it is just the background color. ''' self.checkerboard = checkerboard def set_scaling(self, scaling, factor=1): '''Set the scaling @param scaling: C{SCALE_FIT} to make the image scale down to the size of the view, or C{SCALE_STATIC} to set scaling to a fixed factor. @param factor: static scaling factor (in combination with C{SCALE_STATIC}) ''' assert scaling in (SCALE_FIT, SCALE_STATIC) self.scaling = scaling self.factor = factor self._render() def set_file(self, file): '''Set the image to display from a file @param file: a L{File} object ''' pixbuf = None if file: try: pixbuf = gtk.gdk.pixbuf_new_from_file(str(file)) except: logger.exception('Could not load image "%s"', file) else: pass self.set_pixbuf(pixbuf) def set_pixbuf(self, pixbuf): '''Set the image to display from a pixbuf @param pixbuf: a C{gtk.gdk.Pixbuf} or C{None} to display a broken image icon. ''' if pixbuf is None: pixbuf = self.render_icon( gtk.STOCK_MISSING_IMAGE, gtk.ICON_SIZE_DIALOG).copy() self._pixbuf = pixbuf self._render() def do_size_allocate(self, allocation): gtk.Layout.do_size_allocate(self, allocation) # remove timer if any if self._render_timeout: gobject.source_remove(self._render_timeout) if not self._pixbuf \ or (allocation.width, allocation.height) == self._render_size: pass # no update of rendering needed else: # set new timer for 100ms self._render_timeout = gobject.timeout_add(100, self._render) def _render(self): # remove timer if any if self._render_timeout: gobject.source_remove(self._render_timeout) # Determine what size we want to render the image allocation = self.allocation wwin, hwin = allocation.width, allocation.height wsrc, hsrc = self._pixbuf.get_width(), self._pixbuf.get_height() self._render_size = (wwin, hwin) #~ print 'Allocated', (wwin, hwin), #~ print 'Source', (wsrc, hsrc) if self.scaling == self.SCALE_STATIC: wimg = self.factor * wsrc himg = self.factor * hsrc elif self.scaling == self.SCALE_FIT: if hsrc <= wwin and hsrc <= hwin: # image fits in the screen - no scaling wimg, himg = wsrc, hsrc elif (float(wwin)/wsrc) < (float(hwin)/hsrc): # Fit by width wimg = wwin himg = int(hsrc * float(wwin)/wsrc) else: # Fit by height wimg = int(wsrc * float(hwin)/hsrc) himg = hwin else: assert False, 'BUG: unknown scaling type' #~ print 'Image', (wimg, himg) # Scale pixbuf to new size wimg = max(wimg, 1) himg = max(himg, 1) if not self.checkerboard or not self._pixbuf.get_has_alpha(): if (wimg, himg) == (wsrc, hsrc): pixbuf = self._pixbuf else: pixbuf = self._pixbuf.scale_simple( wimg, himg, gtk.gdk.INTERP_NEAREST) else: # Generate checkerboard background while scaling pixbuf = self._pixbuf.composite_color_simple( wimg, himg, gtk.gdk.INTERP_NEAREST, 255, 16, self._lightgrey.pixel, self._darkgrey.pixel ) # And align the image in the layout wvirt = max((wwin, wimg)) hvirt = max((hwin, himg)) #~ print 'Virtual', (wvirt, hvirt) self._image.set_from_pixbuf(pixbuf) self.set_size(wvirt, hvirt) self.move(self._image, (wvirt-wimg)/2, (hvirt-himg)/2) return False # We could be called by a timeout event # Need to register classes defining gobject signals gobject.type_register(ImageView) class PromptExistingFileDialog(Dialog): '''Dialog that is used e.g. when a file should be attached to zim, but a file with the same name already exists in the attachment directory. This Dialog allows to suggest a new name or overwrite the existing one. For this dialog C{run()} will return either the original file (for overwrite), a new file, or None when the dialog was canceled. ''' def __init__(self, ui, file): '''Constructor @param ui: either a parent window or dialog or the main C{GtkInterface} object @param file: a L{File} object for an existing file ''' Dialog.__init__(self, ui, _('File Exists'), buttons=None) # T: Dialog title self.add_help_text( _('''\ A file with the name "%s" already exists. You can use another name or overwrite the existing file.''' % file.basename), ) # T: Dialog text in 'new filename' dialog self.old_file = file self.dir = file.dir suggested_filename = file.dir.new_file(file.basename).basename self.add_form(( ('name', 'string', _('Filename')), # T: Input label ), { 'name': suggested_filename } ) self.form.widgets['name'].set_check_func(self._check_valid) # all buttons are defined in this class, to get the ordering right # [show folder] [overwrite] [cancel] [ok] button = gtk.Button(_('_Browse')) # T: Button label button.connect('clicked', self.do_show_folder) self.action_area.add(button) self.action_area.set_child_secondary(button, True) button = gtk.Button(_('Overwrite')) # T: Button label button.connect('clicked', self.do_response_overwrite) self.add_action_widget(button, gtk.RESPONSE_NONE) self.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) self._no_ok_action = False self.form.widgets['name'].connect('focus-in-event', self._on_focus) def _on_focus(self, widget, event): # filename length without suffix length = len(os.path.splitext(widget.get_text())[0]) widget.select_region(0, length) def _check_valid(self, filename): # Only valid when same dir and does not yet exist file = self.dir.file(filename) return file.dir == self.dir and not file.exists() def do_show_folder(self, *a): self.ui.open_file(self.dir) def do_response_overwrite(self, *a): logger.info('Overwriting %s', self.old_file.path) self.result = self.old_file def do_response_ok(self): if not self.form.widgets['name'].get_input_valid(): return False newfile = self.dir.file(self.form['name']) logger.info('Selected %s', newfile.path) assert newfile.dir == self.dir # just to be real sure assert not newfile.exists() # just to be real sure self.result = newfile return True class TableBoxMixin(object): # Tried to implement somthing like this from scratch, # but found that I need to inherit from a concrete gtk.Container # implementation because I couldn't figure out how to override # / implement the forall() method from python BORDER = 0 LINE = 1 def __init__(self): self.set_border_width(self.BORDER + self.LINE) self.set_spacing(2 * self.BORDER + self.LINE) self.set_redraw_on_allocate(True) def do_expose_event(self, event): self.foreach(self._expose_child, event) return True def _expose_child(self, child, event): # Draw box around child, then draw child # Widget must ensure there is space arount the child line = self.LINE border = self.BORDER if child.is_drawable(): self.style.paint_flat_box( event.window, gtk.STATE_ACTIVE, gtk.SHADOW_NONE, None, self, None, child.allocation.x - border - line, child.allocation.y - border - line, child.allocation.width + 2*border + 2*line, child.allocation.height + 2*border + 2*line, ) self.style.paint_flat_box( event.window, gtk.STATE_NORMAL, gtk.SHADOW_NONE, None, self, None, child.allocation.x - border, child.allocation.y - border, child.allocation.width + 2*border, child.allocation.height + 2*border, ) gtk.Container.propagate_expose(self, child, event) class TableVBox(TableBoxMixin, gtk.VBox): '''This is a C{gtk.VBox} except that it draws a fine line between the items in the box. This makes it look like a table. Used to render widgets in the pageview. ''' def __init__(self): gtk.VBox.__init__(self) TableBoxMixin.__init__(self) # Need to register classes defining gobject signals gobject.type_register(TableVBox) class TableHBox(TableBoxMixin, gtk.HBox): '''This is a C{gtk.HBox} except that it draws a fine line between the items in the box. This makes it look like a table. Used to render widgets in the pageview. ''' def __init__(self): gtk.HBox.__init__(self) TableBoxMixin.__init__(self) # Need to register classes defining gobject signals gobject.type_register(TableHBox) zim-0.65/zim/gui/server.py0000664000175000017500000001477512430471557015406 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008,2013 Jaap Karssenberg '''This module stands apart from the rest of the gui modules as it is not part from the main Gtk interface. It defines a Gtk interface that can be used to start/stop the WWW server. ''' # TODO: allow setting a password for public access to private server.. # TODO: expander or button to open the server log # TODO: have url button show public hostname # commented out because while testing I got stuff like # "localhost6.localdomain6" which could not be resolved # by the browser :( import gtk import glib import sys import logging from zim.www import make_server from zim.notebook import build_notebook, NotebookInfo from zim.config import data_file from zim.gui.widgets import IconButton, gtk_window_set_default_icon, ErrorDialog, input_table_factory from zim.gui.notebookdialog import NotebookComboBox, NotebookDialog logger = logging.getLogger('zim.gui.server') class ServerWindow(gtk.Window): def __init__(self, notebookinfo=None, port=8080, public=True, **opts): '''Constructor @param notebookinfo: the notebook location @param port: the http port to serve on @param public: allow connections to the server from other computers - if C{False} can only connect from localhost @param opts: options for L{WWWInterface.__init__()} ''' gtk.Window.__init__(self) self.set_title('Zim - ' + _('Web Server')) # T: Window title self.set_border_width(10) self.connect('destroy', lambda a: gtk.main_quit()) self.interface_opts = opts self.httpd = None self._source_id = None # Widgets self.status_label = gtk.Label() self.status_label.set_markup(''+_('Server not started')+'') # T: Status in web server gui self.start_button = IconButton('gtk-media-play') self.start_button.connect('clicked', lambda o: self.start()) self.stop_button = IconButton('gtk-media-stop') self.stop_button.connect('clicked', lambda o: self.stop()) self.stop_button.set_sensitive(False) if gtk.gtk_version >= (2, 10) \ and gtk.pygtk_version >= (2, 10): self.link_button = gtk.LinkButton('') self.link_button.set_sensitive(False) else: self.link_button = None self.notebookcombobox = NotebookComboBox(current=notebookinfo) self.open_button = IconButton('gtk-index') self.open_button.connect('clicked', lambda *a: NotebookDialog(self).run()) self.portentry = gtk.SpinButton() self.portentry.set_numeric(True) self.portentry.set_range(80, 10000) self.portentry.set_increments(1, 80) self.portentry.set_value(port) self.public_checkbox = gtk.CheckButton(label=_('Allow public access')) # T: Checkbox in web server gui self.public_checkbox.set_active(public) # Build the interface vbox = gtk.VBox() self.add(vbox) hbox = gtk.HBox(spacing=12) hbox.pack_start(self.start_button, False) hbox.pack_start(self.stop_button, False) hbox.pack_start(self.status_label, False) vbox.add(hbox) table = input_table_factory(( (_('Notebook'), self.notebookcombobox, self.open_button), # T: Field in web server gui (_('Port'), self.portentry), # T: Field in web server gui for HTTP port (e.g. port 80) self.public_checkbox )) vbox.add(table) if self.link_button: hbox = gtk.HBox() hbox.pack_end(self.link_button, False) vbox.add(hbox) def open_notebook(self, notebook): '''Sets the notebook in the combobox This method is called by the NotebookDialog when a notebook is opened. ''' self.notebookcombobox.set_notebook(notebook) def start(self): # Start server try: uri = self.notebookcombobox.get_notebook() if uri: notebook, x = build_notebook(NotebookInfo(uri)) if not notebook: return else: return port = int(self.portentry.get_value()) public = self.public_checkbox.get_active() self.httpd = make_server(notebook, port, public, **self.interface_opts) if sys.platform == 'win32': # glib io watch conflicts with socket use on windows.. # idle handler uses a bit to much CPU for my taste, # timeout every 0.5 sec is better self.httpd.timeout = 0.1 # 100 ms self._source_id = glib.timeout_add(500, self.do_serve_on_poll) else: self.httpd.timeout = 3 # if no response after 3 sec, drop it self._source_id = glib.io_add_watch( self.httpd.fileno(), glib.IO_IN | glib.IO_OUT | glib.IO_ERR | glib.IO_HUP | glib.IO_PRI, # any event.. self.do_serve_on_io ) logger.info("Serving HTTP on %s port %i...", self.httpd.server_name, self.httpd.server_port) except Exception, error: ErrorDialog(self, error).run() return # Update UI self.notebookcombobox.set_sensitive(False) self.portentry.set_sensitive(False) self.public_checkbox.set_sensitive(False) self.open_button.set_sensitive(False) self.start_button.set_sensitive(False) self.stop_button.set_sensitive(True) self.status_label.set_markup(''+_('Server started')+'') # T: Status in web server gui #if self.public_checkbox.get_active(): # url = 'http://%s:%i' % (self.httpd.server_name, self.httpd.server_port) #else: # url = 'http://localhost:%i' % self.httpd.server_port url = 'http://localhost:%i' % self.httpd.server_port if self.link_button: self.link_button.set_uri(url) self.link_button.set_label(url) self.link_button.set_sensitive(True) def do_serve_on_io(self, fd, event): try: if event & glib.IO_HUP: self.stop() raise Exception, 'Socket disconnected' else: self.httpd.handle_request() except: logger.exception('Exception while handling IO request:') return True # keep event running def do_serve_on_poll(self): self.httpd.handle_request() return True # keep event running def stop(self): # Stop server logger.debug('Stop server') if self._source_id is not None: glib.source_remove(self._source_id) self._source_id = None if self.httpd: self.httpd.socket.close() # There is also a httpd.server_close(), but undocumented (!?) self.httpd = None # Update UI self.status_label.set_markup(''+_('Server stopped')+'') # T: Status in web server gui if self.link_button: self.link_button.set_sensitive(False) self.notebookcombobox.set_sensitive(True) self.portentry.set_sensitive(True) self.public_checkbox.set_sensitive(True) self.open_button.set_sensitive(True) self.stop_button.set_sensitive(False) self.start_button.set_sensitive(True) def main(notebookinfo=None, port=8080, public=True, **opts): gtk_window_set_default_icon() window = ServerWindow(notebookinfo, port, public, **opts) window.show_all() gtk.main() zim-0.65/zim/gui/preferencesdialog.py0000664000175000017500000003455412430471577017560 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2009-2013 Jaap Karssenberg from __future__ import with_statement import pango import gtk import logging from zim.gui.widgets import Dialog, Button, BrowserTreeView, \ ScrolledWindow, ScrolledTextView, InputForm, input_table_factory from zim.gui.applications import CustomizeOpenWithDialog logger = logging.getLogger('zim.gui.preferencesdialog') # define section labels here so xgettext can fing them _label = _('Interface') # T: Tab in preferences dialog _label = _('Editing') # T: Tab in preferences dialog class PreferencesDialog(Dialog): '''Preferences dialog consisting of tabs with various options and a tab with plugins. Options are not defined here, but need to be registered using GtkInterface.register_preferences(). ''' def __init__(self, ui, default_tab=None, select_plugin=None): Dialog.__init__(self, ui, _('Preferences')) # T: Dialog title gtknotebook = gtk.Notebook() self.vbox.add(gtknotebook) # saves a list of loaded plugins to be used later self.p_save_loaded = [p.__class__ for p in self.ui.plugins] # Dynamic tabs self.forms = {} for category, preferences in ui.preferences_register.items(): vbox = gtk.VBox() index = gtknotebook.append_page(vbox, gtk.Label(_(category))) # From GTK Doc: Note that due to historical reasons, GtkNotebook refuses # to switch to a page unless the child widget is visible. vbox.show() if category == default_tab: gtknotebook.set_current_page(index) fields = [] values = {} sections = {} for p in preferences: if len(p) == 4: section, key, type, label = p fields.append((key, type, label)) else: section, key, type, label, check = p fields.append((key, type, label, check)) values[key] = ui.preferences[section][key] sections[key] = section form = InputForm(fields, values) form.preferences_sections = sections vbox.pack_start(form, False) self.forms[category] = form if category == 'Interface': self._add_font_selection(form) # Styles tab #~ gtknotebook.append_page(StylesTab(self), gtk.Label(_('Styles'))) # Keybindings tab #~ gtknotebook.append_page(KeyBindingsTab(self), gtk.Label(_('Key bindings'))) # Plugins tab plugins_tab = PluginsTab(self, self.ui.plugins) plugins_tab_index = gtknotebook.append_page(plugins_tab, gtk.Label(_('Plugins'))) # T: Heading in preferences dialog plugins_tab.show() #~ print default_tab, index if default_tab == "Plugins": gtknotebook.set_current_page(plugins_tab_index) if not select_plugin is None: plugins_tab.select_plugin(select_plugin) # Applications tab gtknotebook.append_page(ApplicationsTab(self), gtk.Label(_('Applications'))) # T: Heading in preferences dialog def _add_font_selection(self, table): # need to hardcode this, cannot register it as a preference table.add_inputs( ( ('use_custom_font', 'bool', _('Use a custom font')), # T: option in preferences dialog ) ) table.preferences_sections['use_custom_font'] = 'GtkInterface' self.fontbutton = gtk.FontButton() self.fontbutton.set_use_font(True) # preview in button self.fontbutton.set_sensitive(False) text_style = self.ui.config.get_config_dict('/style.conf') try: font = text_style['TextView']['font'] if font: self.fontbutton.set_font_name(font) self.fontbutton.set_sensitive(True) table['use_custom_font'] = True except KeyError: pass table.widgets['use_custom_font'].connect('toggled', lambda o: self.fontbutton.set_sensitive(o.get_active()) ) self.fontbutton.set_size_request(100, -1) input_table_factory(((None, self.fontbutton),), table) def do_response_ok(self): # Get dynamic tabs newpreferences = {} for form in self.forms.values(): for key, value in form.items(): section = form.preferences_sections[key] if not section in newpreferences: newpreferences[section] = {} newpreferences[section][key] = value # Set font - special case, consider it a HACK customfont = newpreferences['GtkInterface'].pop('use_custom_font') if customfont: font = self.fontbutton.get_font_name() else: font = None text_style = self.ui.config.get_config_dict('/style.conf') text_style['TextView']['font'] = font # with self.ui.preferences.blocked_signals('changed'): # note we do not block signal on section dicts for section in newpreferences: self.ui.preferences[section].update(newpreferences[section]) self.ui.preferences.emit('changed') # delayed emission return True def do_response_cancel(self): # TODO FIXME # Obtain an updated list of loaded plugins now_loaded = [p.__class__ for p in self.ui.plugins] # Restore previous situation if the user changed something # in this dialog session with self.ui.preferences.blocked_signals('changed'): for name in self.ui.plugins.list_installed_plugins(): try: klass = self.ui.plugins.get_plugin_class(name) except: continue activatable = klass.check_dependencies_ok() if klass in self.p_save_loaded and activatable and klass not in now_loaded: self.ui.load_plugin(klass.plugin_key) elif klass not in self.p_save_loaded and klass in now_loaded: self.ui.unload_plugin(klass.plugin_key) self.ui.preferences.emit('changed') # delayed emission return True class PluginsTab(gtk.VBox): def __init__(self, dialog, plugins): gtk.VBox.__init__(self, spacing=5) self.dialog = dialog self.plugins = plugins self.hbox = gtk.HBox(self, spacing=12) self.hbox.set_border_width(5) self.add(self.hbox) #~ logger.debug('Plugins that are loaded: %s' % list(plugins)) self.treeview = PluginsTreeView(self.plugins) self.treeview.connect('row-activated', self.do_row_activated) swindow = ScrolledWindow(self.treeview, hpolicy=gtk.POLICY_NEVER) self.hbox.pack_start(swindow, False) vbox = gtk.VBox() self.hbox.add(vbox) # Textview with scrollbars to show plugins info. Required by small screen devices swindow, textview = ScrolledTextView() textview.set_cursor_visible(False) self.textbuffer = textview.get_buffer() self.textbuffer.create_tag('bold', weight=pango.WEIGHT_BOLD) self.textbuffer.create_tag('red', foreground='#FF0000') vbox.pack_start(swindow, True) hbox = gtk.HBox(spacing=5) vbox.pack_end(hbox, False) self.plugin_help_button = \ Button(stock=gtk.STOCK_HELP, label=_('_More')) # T: Button in plugin tab self.plugin_help_button.connect('clicked', self.on_help_button_clicked) hbox.pack_start(self.plugin_help_button, False) self.configure_button = \ Button(stock=gtk.STOCK_PREFERENCES, label=_('C_onfigure')) # T: Button in plugin tab self.configure_button.connect('clicked', self.on_configure_button_clicked) hbox.pack_start(self.configure_button, False) try: self.do_row_activated(self.treeview, (0,), 0) except: pass # maybe loading plugins failed if gtk.gtk_version >= (2, 10) \ and gtk.pygtk_version >= (2, 10): url_button = gtk.LinkButton( 'https://github.com/jaap-karssenberg/zim-wiki/wiki/Plugins', _('Get more plugins online') # T: label for button with URL ) self.pack_start(url_button, False) def do_row_activated(self, treeview, path, col): key, active, activatable, name, klass = treeview.get_model()[path] self._current_plugin = key logger.debug('Loading description for plugin: %s', key) # Insert plugin info into textview with proper formatting # TODO use our own widget with formatted text here... buffer = self.textbuffer def insert(text, style=None): if style: buffer.insert_with_tags_by_name( buffer.get_end_iter(), text, style) else: buffer.insert_at_cursor(text) buffer.delete(*buffer.get_bounds()) # clear insert(_('Name') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['name'].strip() + '\n\n') insert(_('Description') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['description'].strip() + '\n\n') insert(_('Dependencies') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog check, dependencies = klass.check_dependencies() if not(dependencies): insert(_('No dependencies') + '\n') # T: label in plugin info in preferences dialog else: # Construct dependency list, missing dependencies are marked red for dependency in dependencies: text, ok, required = dependency if ok: insert(u'\u2022 %s - %s\n' % (text, _('OK'))) # T: dependency is OK elif required: insert(u'\u2022 %s - %s\n' % (text, _('Failed')), 'red') # T: dependency failed else: insert(u'\u2022 %s - %s (%s)\n' % (text, _('Failed'), # T: dependency failed _('Optional') # T: optional dependency ) ) insert('\n') insert(_('Author') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['author'].strip()) self.configure_button.set_sensitive(active and bool(klass.plugin_preferences)) self.plugin_help_button.set_sensitive('help' in klass.plugin_info) def on_help_button_clicked(self, button): klass = self.plugins.get_plugin_class(self._current_plugin) self.dialog.ui.show_help(klass.plugin_info['help']) # XXX def on_configure_button_clicked(self, button): plugin = self.plugins[self._current_plugin] PluginConfigureDialog(self.dialog, plugin).run() def select_plugin(self, name): model = self.treeview.get_model() def find(model, path, iter): if model[iter][2] == name: self.treeview.scroll_to_cell(path) self.treeview.set_cursor(path) self.do_row_activated(self.treeview, path, 0) return True; return False # keep the foreach going model.foreach(find) class PluginsTreeModel(gtk.ListStore): def __init__(self, plugins): #columns are: key, active, activatable, name, klass gtk.ListStore.__init__(self, str, bool, bool, str, object) self.plugins = plugins allplugins = [] for key in self.plugins.list_installed_plugins(): try: klass = self.plugins.get_plugin_class(key) name = klass.plugin_info['name'] allplugins.append((name, key, klass)) except: logger.exception('Could not load plugin %s', key) allplugins.sort() # sort by translated name for name, key, klass in allplugins: active = key in self.plugins try: activatable = klass.check_dependencies_ok() except: logger.exception('Could not load plugin %s', name) else: self.append((key, active, activatable, name, klass)) def do_toggle_path(self, path): key, active, activatable, name, klass = self[path] if not activatable: return if active: self.plugins.remove_plugin(key) self[path][1] = False else: try: self.plugins.load_plugin(key) except: logger.exception('Could not load plugin %s', name) # TODO pop error dialog else: self[path][1] = True class PluginsTreeView(BrowserTreeView): def __init__(self, plugins): BrowserTreeView.__init__(self) model = PluginsTreeModel(plugins) self.set_model(model) cellrenderer = gtk.CellRendererToggle() cellrenderer.connect('toggled', lambda o, p: model.do_toggle_path(p)) self.append_column( gtk.TreeViewColumn(_('Enabled'), cellrenderer, active=1, activatable=2)) # T: Column in plugin tab self.append_column( gtk.TreeViewColumn(_('Plugin'), gtk.CellRendererText(), text=3)) # T: Column in plugin tab class PluginConfigureDialog(Dialog): def __init__(self, dialog, plugin): Dialog.__init__(self, dialog, _('Configure Plugin')) # T: Dialog title self.plugin = plugin label = gtk.Label() label.set_markup( ''+_('Options for plugin %s') % plugin.plugin_info['name']+'') # T: Heading for 'configure plugin' dialog - %s is the plugin name self.vbox.add(label) fields = [] for pref in self.plugin.plugin_preferences: if len(pref) == 4: key, type, label, default = pref self.plugin.preferences.setdefault(key, default) # just to be sure else: key, type, label, default, check = pref self.plugin.preferences.setdefault(key, default, check=check) # just to be sure if type in ('int', 'choice'): fields.append((key, type, label, check)) else: fields.append((key, type, label)) self.add_form(fields, self.plugin.preferences) def do_response_ok(self): # First let the plugin receive the changes, then save them. # The plugin could do some conversion on the fly (e.g. Path to string) self.plugin.preferences.update(self.form) return True class ApplicationsTab(gtk.VBox): def __init__(self, dialog): gtk.VBox.__init__(self) self.set_border_width(5) self.dialog = dialog button = gtk.Button(_('Set default text editor')) # T: button in preferences dialog to change default text editor button.connect('clicked', self.on_set_texteditor) self.pack_start(button, False) def on_set_texteditor(self, o): CustomizeOpenWithDialog(self.dialog, 'text/plain').run() class StylesTab(gtk.VBox): def __init__(self, dialog): gtk.VBox.__init__(self) self.add(gtk.Label('TODO add treeview with styles')) class StylesTreeModel(gtk.ListStore): def __init__(self, ui): #'weight', 'scale', 'style', 'background', 'foreground', 'strikethrough', # 'family', 'wrap-mode', 'indent', 'underline' gtk.ListStore.__init__(self, bool, str, object) class KeyBindingsTab(gtk.VBox): def __init__(self, dialog): gtk.VBox.__init__(self) self.add(gtk.Label('TODO add treeview with accelerators')) #~ Build editable treeview of menu items + accelerators #~ #~ Just getting action names does not give menu structure, #~ so walk the menu. #~ #~ Menus are containers, have a foreach #~ Menutitems are bin, can have submenu #~ #~ Get label using get_child() etc (probably gives a box with icon, #~ label, accel, etc.) #~ #~ Test get_submenu(), #~ if is None: leaf item, get accelerator #~ elif value: recurs #~ #~ To get the accelerator: #~ accel_path = menuitem.get_accel_path() (make sure this is not the mnemonic..) #~ key, mod = gtk.accel_map_lookup_entry(accel_path) #~ #~ To get / set accelerator labels in the UI use: #~ gtk.accelerator_name() to get a name to display #~ #~ To parse name set by user #~ gtk.accelerator_parse() #~ gtk.accelerator_valid() #~ #~ To change the accelerator: #~ Maybe first unlock path in accel_map and unlock the actiongroup.. #~ gtk.accel_map.change_entry(accel_path, key, mods, replace=True) #~ check return value #~ #~ To get updates for ui use: #~ gtk.accel_map_get().connect('changed', func(o, accel_path, key, mods)) #~ This way we also get any accelerators that were deleted as result of #~ replace=True zim-0.65/zim/gui/__init__.py0000664000175000017500000035562012615417175015635 0ustar jaapjaap00000000000000# -*- coding: utf-8 -*- # Copyright 2008-2013 Jaap Karssenberg '''This module contains the Gtk user interface for zim. The main widgets and dialogs are separated out in sub-modules. Included here are the main class for the zim GUI L{GtkInterface}, which contains most action handlers and the main window class L{MainWindow}, as well as a number of dialogs. If you want to extend the user interface, also see L{zim.gui.widgets} for common base classes for widgets and dialogs. ''' from __future__ import with_statement import os import signal import re import logging import gobject import gtk import threading import webbrowser from zim.main import get_zim_application from zim.fs import File, Dir, normalize_win32_share from zim.errors import Error, TrashNotSupportedError, TrashCancelledError from zim.environ import environ from zim.signals import DelayedCallback, SignalHandler from zim.notebook import Notebook, NotebookInfo, Path, Page, build_notebook from zim.stores import encode_filename from zim.index import LINK_DIR_BACKWARD from zim.config import data_file, data_dirs, ConfigDict, value_is_coord, ConfigManager from zim.plugins import PluginManager from zim.parsing import url_encode, url_decode, URL_ENCODE_DATA, is_win32_share_re, is_url_re, is_uri_re from zim.history import History, HistoryPath from zim.templates import list_templates, get_template from zim.actions import gtk_accelerator_preparse, gtk_accelerator_preparse_list from zim.gui.pathbar import NamespacePathBar, RecentPathBar, RecentChangesPathBar, HistoryPathBar from zim.gui.pageindex import PageIndex from zim.gui.pageview import PageView from zim.gui.widgets import ui_environment, gtk_window_set_default_icon, \ Button, MenuButton, \ Window, Dialog, \ ErrorDialog, QuestionDialog, FileDialog, ProgressBarDialog, MessageDialog, \ PromptExistingFileDialog, \ ScrolledTextView from zim.gui.clipboard import Clipboard from zim.gui.applications import ApplicationManager, CustomToolManager, AddApplicationDialog logger = logging.getLogger('zim.gui') if gtk.gtk_version >= (2, 10) \ and gtk.pygtk_version >= (2, 10): gtk.link_button_set_uri_hook(lambda o, url: webbrowser.open(url)) #: Menu actions ui_actions = ( ('file_menu', None, _('_File')), # T: Menu title ('edit_menu', None, _('_Edit')), # T: Menu title ('view_menu', None, _('_View')), # T: Menu title ('insert_menu', None, _('_Insert')), # T: Menu title ('search_menu', None, _('_Search')), # T: Menu title ('format_menu', None, _('For_mat')), # T: Menu title ('tools_menu', None, _('_Tools')), # T: Menu title ('go_menu', None, _('_Go')), # T: Menu title ('help_menu', None, _('_Help')), # T: Menu title ('pathbar_menu', None, _('P_athbar')), # T: Menu title ('toolbar_menu', None, _('_Toolbar')), # T: Menu title # name, stock id, label, accelerator, tooltip, readonly ('new_page', 'gtk-new', _('_New Page...'), 'N', '', False), # T: Menu item ('new_sub_page', 'gtk-new', _('New S_ub Page...'), 'N', '', False), # T: Menu item ('open_notebook', 'gtk-open', _('_Open Another Notebook...'), 'O', '', True), # T: Menu item ('open_new_window', None, _('Open in New _Window'), '', '', True), # T: Menu item ('import_page', None, _('_Import Page...'), '', '', False), # T: Menu item ('save_page', 'gtk-save', _('_Save'), 'S', '', False), # T: Menu item ('save_copy', None, _('Save A _Copy...'), '', '', True), # T: Menu item ('show_export', None, _('E_xport...'), '', '', True), # T: Menu item ('email_page', None, _('_Send To...'), '', '', True), # T: Menu item ('move_page', None, _('_Move Page...'), '', '', False), # T: Menu item ('rename_page', None, _('_Rename Page...'), 'F2', '', False), # T: Menu item ('delete_page', None, _('_Delete Page'), '', '', False), # T: Menu item ('show_properties', 'gtk-properties', _('Proper_ties'), '', '', True), # T: Menu item ('close', 'gtk-close', _('_Close'), 'W', '', True), # T: Menu item ('quit', 'gtk-quit', _('_Quit'), 'Q', '', True), # T: Menu item ('show_search', 'gtk-find', _('_Search...'), 'F', '', True), # T: Menu item ('show_search_backlinks', None, _('Search _Backlinks...'), '', '', True), # T: Menu item ('show_recent_changes', None, _('Recent Changes...'), '', '', True), # T: Menu item ('copy_location', None, _('Copy _Location'), 'L', '', True), # T: Menu item ('show_templateeditor', None, _('_Templates'), '', '', True), # T: Menu item ('show_preferences', 'gtk-preferences', _('Pr_eferences'), '', '', True), # T: Menu item ('reload_page', 'gtk-refresh', _('_Reload'), 'R', '', True), # T: Menu item ('open_attachments_folder', 'gtk-open', _('Open Attachments _Folder'), '', '', True), # T: Menu item ('open_notebook_folder', 'gtk-open', _('Open _Notebook Folder'), '', '', True), # T: Menu item ('open_document_root', 'gtk-open', _('Open _Document Root'), '', '', True), # T: Menu item ('open_document_folder', 'gtk-open', _('Open _Document Folder'), '', '', True), # T: Menu item ('attach_file', 'zim-attachment', _('Attach _File'), '', _('Attach external file'), False), # T: Menu item ('edit_page_source', 'gtk-edit', _('Edit _Source'), '', '', False), # T: Menu item ('show_server_gui', None, _('Start _Web Server'), '', '', True), # T: Menu item ('reload_index', None, _('Update Index'), '', '', False), # T: Menu item ('manage_custom_tools', 'gtk-preferences', _('Custom _Tools'), '', '', True), # T: Menu item ('open_page_back', 'gtk-go-back', _('_Back'), 'Left', _('Go page back'), True), # T: Menu item ('open_page_forward', 'gtk-go-forward', _('_Forward'), 'Right', _('Go page forward'), True), # T: Menu item ('open_page_parent', 'gtk-go-up', _('_Parent'), 'Up', _('Go to parent page'), True), # T: Menu item ('open_page_child', 'gtk-go-down', _('_Child'), 'Down', _('Go to child page'), True), # T: Menu item ('open_page_previous', None, _('_Previous in index'), 'Page_Up', _('Go to previous page'), True), # T: Menu item ('open_page_next', None, _('_Next in index'), 'Page_Down', _('Go to next page'), True), # T: Menu item ('open_page_home', 'gtk-home', _('_Home'), 'Home', _('Go home'), True), # T: Menu item ('open_page', 'gtk-jump-to', _('_Jump To...'), 'J', '', True), # T: Menu item ('show_help', 'gtk-help', _('_Contents'), 'F1', '', True), # T: Menu item ('show_help_faq', None, _('_FAQ'), '', '', True), # T: Menu item ('show_help_keys', None, _('_Keybindings'), '', '', True), # T: Menu item ('show_help_bugs', None, _('_Bugs'), '', '', True), # T: Menu item ('show_about', 'gtk-about', _('_About'), '', '', True), # T: Menu item ) if os.name == 'nt': # THe XF86 keys are mapped wrongly on windows, see bug lp:1277929 ui_actions = ui_actions + ( ('open_page_back_alt1', None, '', '', '', True), ('open_page_forward_alt1', None, '', '', '', True), ) else: ui_actions = ui_actions + ( ('open_page_back_alt1', None, '', 'XF86Back', '', True), ('open_page_forward_alt1', None, '', 'XF86Forward', '', True), ) #: More menu actions ui_actions_window = ( # name, stock id, label, accelerator, tooltip, readonly ('show_all_panes', None, _('_All Panes'), 'F9', _('Show All Panes'), True), # T: Menu item ) #: Menu actions that toggle between two states ui_toggle_actions_window = ( # name, stock id, label, accelerator, tooltip, initial state, readonly ('toggle_toolbar', None, _('_Toolbar'), '', '', True, True), # T: Menu item ('toggle_statusbar', None, _('_Statusbar'), None, '', True, True), # T: Menu item ('toggle_panes', 'gtk-index', _('_Side Panes'), 'F9', _('Show Side Panes'), True, True), # T: Menu item # FIXME review text ('toggle_fullscreen', 'gtk-fullscreen', _('_Fullscreen'), 'F11', '', False, True), # T: Menu item ('toggle_readonly', 'gtk-edit', _('Notebook _Editable'), '', _('Toggle notebook editable'), True, True), # T: menu item ) if ui_environment['platform'] == 'maemo': ui_toggle_actions_window = ( # name, stock id, label, accelerator, tooltip, initial state, readonly ('toggle_toolbar', None, _('_Toolbar'), 'M', '', True, True), # T: Menu item ('toggle_statusbar', None, _('_Statusbar'), None, '', True, True), # T: Menu item ('toggle_panes', 'gtk-index', _('_Side Panes'), 'F9', _('Show Side Panes'), True, True), # T: Menu item # FIXME review text ('toggle_fullscreen', 'gtk-fullscreen', _('_Fullscreen'), 'F11', '', False, True), # T: Menu item ('toggle_readonly', 'gtk-edit', _('Notebook _Editable'), '', _('Toggle notebook editable'), True, True), # T: menu item ) #: Menu items with a radio checkbox ui_pathbar_radio_actions = ( # name, stock id, label, accelerator, tooltip ('set_pathbar_none', None, _('_None'), None, None, 0), # T: Menu item ('set_pathbar_recent', None, _('_Recent pages'), None, None, 1), # T: Menu item ('set_pathbar_recent_changed', None, _('Recently _Changed pages'), None, None, 1), # T: Menu item ('set_pathbar_history', None, _('_History'), None, None, 2), # T: Menu item ('set_pathbar_path', None, _('_Page Hierarchy'), None, None, 3), # T: Menu item ) PATHBAR_NONE = 'none' #: Constant for no pathbar PATHBAR_RECENT = 'recent' #: Constant for the recent pages pathbar PATHBAR_RECENT_CHANGED = 'recent_changed' #: Constant for the recent pages pathbar PATHBAR_HISTORY = 'history' #: Constant for the history pathbar PATHBAR_PATH = 'path' #: Constant for the namespace pathbar PATHBAR_TYPES = (PATHBAR_NONE, PATHBAR_RECENT, PATHBAR_RECENT_CHANGED, PATHBAR_HISTORY, PATHBAR_PATH) #: Menu items for the context menu of the toolbar ui_toolbar_style_radio_actions = ( # name, stock id, label, accelerator, tooltip ('set_toolbar_icons_and_text', None, _('Icons _And Text'), None, None, 0), # T: Menu item ('set_toolbar_icons_only', None, _('_Icons Only'), None, None, 1), # T: Menu item ('set_toolbar_text_only', None, _('_Text Only'), None, None, 2), # T: Menu item ) #: Menu items for the context menu of the toolbar ui_toolbar_size_radio_actions = ( # name, stock id, label, accelerator, tooltip ('set_toolbar_icons_large', None, _('_Large Icons'), None, None, 0), # T: Menu item ('set_toolbar_icons_small', None, _('_Small Icons'), None, None, 1), # T: Menu item ('set_toolbar_icons_tiny', None, _('_Tiny Icons'), None, None, 2), # T: Menu item ) TOOLBAR_ICONS_AND_TEXT = 'icons_and_text' TOOLBAR_ICONS_ONLY = 'icons_only' TOOLBAR_TEXT_ONLY = 'text_only' TOOLBAR_ICONS_LARGE = 'large' TOOLBAR_ICONS_SMALL = 'small' TOOLBAR_ICONS_TINY = 'tiny' PRIMARY_MODIFIER = gtk_accelerator_preparse('', force=True) #: Preferences for the user interface ui_preferences = ( # key, type, category, label, default ('tearoff_menus', 'bool', 'Interface', _('Add \'tearoff\' strips to the menus'), False), # T: Option in the preferences dialog ('toggle_on_ctrlspace', 'bool', 'Interface', _('Use %s to switch to the side pane') % (PRIMARY_MODIFIER+''), False), # T: Option in the preferences dialog - %s will map to either or key binding # default value is False because this is mapped to switch between # char sets in certain international key mappings ('remove_links_on_delete', 'bool', 'Interface', _('Remove links when deleting pages'), True), # T: Option in the preferences dialog ('always_use_last_cursor_pos', 'bool', 'Interface', _('Always use last cursor position when opening a page'), True), # T: Option in the preferences dialog ) if ui_environment['platform'] == 'maemo': # Maemo specific settings ui_preferences = ( # key, type, category, label, default ('tearoff_menus', 'bool', None, None, False), # Maemo can't have tearoff_menus ('toggle_on_ctrlspace', 'bool', None, None, True), # There is no ALT key on maemo devices ) # Load custom application icons as stock def load_zim_stock_icons(): '''Function to load zim custom stock icons for Gtk. Will load all icons found in the "pixmaps" folder with a stock name prefixed with "zim-", so "data/pixmaps/link.png" becomes the "zim-link" stock icon. Called directly when this module is loaded. ''' factory = gtk.IconFactory() factory.add_default() for dir in data_dirs(('pixmaps')): for file in dir.list('*.png'): # not all installs have svg support, so only check png for now.. name = 'zim-'+file[:-4] # e.g. checked-box.png -> zim-checked-box icon_theme = gtk.icon_theme_get_default() try: pixbuf = icon_theme.load_icon(name, 24, 0) except: pixbuf = gtk.gdk.pixbuf_new_from_file(str(dir+file)) try: set = gtk.IconSet(pixbuf) factory.add(name, set) except Exception: logger.exception('Got exception while loading application icons') load_zim_stock_icons() def schedule_on_idle(function, args=()): '''Helper function to schedule stuff that can be done later, it will be triggered on the gtk "idle" signal. @param function: function to call @param args: positional arguments ''' def callback(): function(*args) return False # delete signal gobject.idle_add(callback) class NoSuchFileError(Error): '''Exception for when a file or folder is not found that should exist. ''' description = _('The file or folder you specified does not exist.\nPlease check if you the path is correct.') # T: Error description for "no such file or folder" def __init__(self, path): '''Constructor @param path: the L{File} or L{Dir} object ''' self.msg = _('No such file or folder: %s') % path.path # T: Error message, %s will be the file path class ApplicationLookupError(Error): '''Exception raised when an application was not found''' pass class PageHasUnSavedChangesError(Error): '''Exception raised when page could not be saved''' msg = _('Page has un-saved changes') # T: Error description class WindowManager(object): def __iter__(self): for window in gtk.window_list_toplevels(): if isinstance(window, Window): # implies a zim object yield Window def present(self): assert False, 'TODO pick window to present' class GtkInterface(gobject.GObject): '''Main class for the zim Gtk interface. This object wraps a single notebook and provides actions to manipulate and access this notebook. This class has quite some methods that are described as "menu actions". This means these methods directly implement the action that is triggered by a specific menu action. However they are also available for other classes to call them directly and are part of the public API. The GUI uses a few mechanisms for other classes to dynamically add elements. One is the use of the C{gtk.UIManager} class to populate the menubar and toolbar. This allows other parts of the application to define additional actions. See the methods L{add_actions()} and L{add_ui()} for wrappers around this functionality. A second mechanism is that for simple options other classes can register a preference to be shown in the PreferencesDialog. See the L{register_preferences()} method. B{NOTE:} the L{plugin} base class has it's own wrappers for these things. Plugin writers should look there first. @ivar preferences: L{ConfigSectionsDict} for global preferences, maps to the X{preferences.conf} config file. @ivar uistate: L{ConfigSectionsDict} for current state of the user interface, maps to the X{state.conf} config file per notebook. @ivar notebook: The L{Notebook} object @ivar page: The L{Page} object for the current page in the main window @ivar readonly: When C{True} the whole interface is read-only @ivar hideonclose: When C{True} the application will hide itself instead of closing when the main window is closed, typically used in combination with the background server process and the L{tray icon plugin} @ivar mainwindow: the L{MainWindow} object @ivar history: the L{History} object @ivar uimanager: the C{gtk.UIManager} (see the methods L{add_actions()} and L{add_ui()} for wrappers) @ivar preferences_register: a L{ConfigDict} with preferences to show in the preferences dialog, see L{register_preferences()} to add to more preferences @signal: C{open-page (L{Page}, L{Path})}: Emitted when opening a page, the Path is given as the 2nd argument so the source of the path can be checked - in particular when a path is opened through a history function this will be a L{HistoryPath} @signal: C{close-page (L{Page}, final)}: Emitted before closing a page, typically just before a new page is opened and before closing the application. If 'C{final}' is C{True} we expect this to be the final page closure before quiting the application. This it is only a hint, so do not destroy any ui components when 'C{final}' is set, but it can be used to decide to do some actions async or not. @signal: C{read-only-changed ()}: Emitted when the ui changed from read-write to read-only or back @signal: C{quit ()}: Emitted when the application is about to quit @signal: C{start-index-update ()}: Emitted before running a index update @signal: C{end-index-update ()}: Emitted when an index update is finished ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'open-page': (gobject.SIGNAL_RUN_LAST, None, (object, object)), 'close-page': (gobject.SIGNAL_RUN_LAST, None, (object, bool)), 'readonly-changed': (gobject.SIGNAL_RUN_LAST, None, ()), 'quit': (gobject.SIGNAL_RUN_LAST, None, ()), 'start-index-update': (gobject.SIGNAL_RUN_LAST, None, ()), 'end-index-update': (gobject.SIGNAL_RUN_LAST, None, ()), } def __init__(self, notebook, page=None, config=None, fullscreen=False, geometry=None): '''Constructor @param config: a C{ConfigManager} object @param notebook: a L{Notebook} object @param page: a L{Path} object @param fullscreen: if C{True} open fullscreen @param geometry: window geometry as string in format "C{WxH+X+Y}" ''' gobject.GObject.__init__(self) if isinstance(notebook, basestring): # deal with IPC call info = NotebookInfo(notebook) notebook, x = build_notebook(info) elif not isinstance(notebook, Notebook): notebook, x = build_notebook(notebook) logger.debug('Opening notebook: %s', notebook) self.notebook = notebook self.config = config or ConfigManager(profile=notebook.profile) self.preferences = self.config.get_config_dict('/preferences.conf') ### preferences attrib should just be one section self.preferences['General'].setdefault('plugins', ['calendar', 'insertsymbol', 'printtobrowser', 'versioncontrol']) self.plugins = PluginManager(self.config) self.plugins.extend(notebook.index) self.plugins.extend(notebook) self.preferences_register = ConfigDict() self.page = None self._path_context = None self.history = None self.readonly = False self.hideonclose = False self.url_handlers = {} self._autosave_thread = None logger.debug('Gtk version is %s' % str(gtk.gtk_version)) logger.debug('Pygtk version is %s' % str(gtk.pygtk_version)) gtk_window_set_default_icon() self.uimanager = gtk.UIManager() self.uimanager.add_ui_from_string(''' ''') self.register_preferences('GtkInterface', ui_preferences) # Hidden setting to force the gtk bell off. Otherwise it # can bell every time you reach the begin or end of the text # buffer. Especially specific gtk version on windows. # See bug lp:546920 self.preferences['GtkInterface'].setdefault('gtk_bell', False) if not self.preferences['GtkInterface']['gtk_bell']: gtk.rc_parse_string('gtk-error-bell = 0') # Init UI self.mainwindow = MainWindow(self, self.preferences, fullscreen, geometry) self.add_actions(ui_actions, self) self.add_actions(ui_actions_window, self.mainwindow) self.add_toggle_actions(ui_toggle_actions_window, self.mainwindow) self.add_radio_actions(ui_pathbar_radio_actions, self.mainwindow, 'do_set_pathbar') self.add_radio_actions(ui_toolbar_style_radio_actions, self.mainwindow, 'do_set_toolbar_style') self.add_radio_actions(ui_toolbar_size_radio_actions, self.mainwindow, 'do_set_toolbar_size') if ui_environment['platform'] == 'maemo': # Customized menubar for maemo, specific for maemo version fname = 'menubar-' + ui_environment['maemo_version'] + '.xml' else: fname = 'menubar.xml' self.add_ui(data_file(fname).read(), self) if ui_environment['platform'] == 'maemo': # Hardware fullscreen key is F6 in N8xx devices self.mainwindow.connect('key-press-event', lambda o, event: event.keyval == gtk.keysyms.F6 and self.mainwindow.toggle_fullscreen()) self._custom_tool_ui_id = None self._custom_tool_actiongroup = None self._custom_tool_iconfactory = None self.load_custom_tools() self.preferences.connect('changed', self.do_preferences_changed) self.do_preferences_changed() self._init_notebook(self.notebook) if page and isinstance(page, basestring): # IPC call page = self.notebook.resolve_path(page) self._first_page = page # XXX HACK - if we call open_page here, plugins are not yet initialized def _init_notebook(self, notebook): if notebook.cache_dir: # may not exist during tests from zim.config import INIConfigFile self.uistate = INIConfigFile( notebook.cache_dir.file('state.conf') ) else: from zim.config import SectionedConfigDict self.uistate = SectionedConfigDict() def move_away(o, path): if path == self.page or self.page.ischild(path): self.open_page_back() \ or self.open_page_parent \ or self.open_page_home def follow(o, path, newpath, update_links): if self.page == path: self.open_page(newpath) elif self.page.ischild(path): newpath = newpath + self.page.relname(path) newpath = Path(newpath.name) # IndexPath -> Path self.open_page(newpath) def save_page(o, p, *a): page = self.mainwindow.pageview.get_page() if p == page and page.modified: self.save_page(page) self.history = History(notebook, self.uistate) self.on_notebook_properties_changed(notebook) notebook.connect('properties-changed', self.on_notebook_properties_changed) notebook.connect('delete-page', save_page) # before action notebook.connect('deleted-page', move_away) # after action notebook.connect('move-page', save_page) # before action notebook.connect('moved-page', follow) # after action def new_child(index, indexpath): if self.page and indexpath.ischild(self.page): child = self.actiongroup.get_action('open_page_child') child.set_sensitive(True) def child_deleted(index, indexpath): if self.page and indexpath.ischild(self.page): ourpath = index.lookup_path(self.page) child = self.actiongroup.get_action('open_page_child') child.set_sensitive(ourpath.haschildren) notebook.index.connect('page-inserted', new_child) notebook.index.connect('page-deleted', child_deleted) # Start a lightweight background check of the index self.notebook.index.update_async() self.set_readonly(notebook.readonly) def on_notebook_properties_changed(self, notebook): self.config.set_profile(notebook.profile) has_doc_root = not notebook.document_root is None for action in ('open_document_root', 'open_document_folder'): action = self.actiongroup.get_action(action) action.set_sensitive(has_doc_root) def main(self): '''Wrapper for C{gtk.main()}, runs main loop of the application. Does not return until program has ended. Also takes care of a number of initialization actions, like prompting the L{NotebookDialog} if needed and will show the main window. ''' assert self.notebook is not None if self.notebook.dir: os.chdir(self.notebook.dir.path) environ['PWD'] = self.notebook.dir.path if self._first_page is None: self._first_page = self.history.get_current() # We schedule the autosave on idle to try to make it impact # the performance of the application less. Of course using the # async interface also helps, but we need to account for cases # where asynchronous actions are not supported. def schedule_autosave(): schedule_on_idle(self.do_autosave) return True # keep ticking # older gobject version doesn't know about seconds self.preferences['GtkInterface'].setdefault('autosave_timeout', 10) timeout = self.preferences['GtkInterface']['autosave_timeout'] * 1000 # s -> ms self._autosave_timer = gobject.timeout_add(timeout, schedule_autosave) # Check notebook self.check_notebook_needs_upgrade() # Setup signal handler def handle_sigterm(signal, frame): logger.info('Got SIGTERM, quit') self.close_page() self._quit() signal.signal(signal.SIGTERM, handle_sigterm) # And here we go! self.mainwindow.show_all() # Adapt the GUI to OS X conventions try: import gtkosx_application macapp = gtkosx_application.Application() # move the menus to the OS X menu bar menu_bar = gtk.MenuBar() for i, child in enumerate(self.mainwindow.menubar.get_children()): child.reparent(menu_bar) macapp.set_menu_bar(menu_bar) self.mainwindow.menubar.hide() macapp.set_help_menu(self.uimanager.get_widget('/menubar/help_menu')) # move some menu items to the application menu quit = self.uimanager.get_widget('/menubar/file_menu/quit') macapp.connect('NSApplicationBlockTermination', lambda d: not self.quit()) quit.hide() about = self.uimanager.get_widget('/menubar/help_menu/show_about') macapp.insert_app_menu_item(about, 0) prefs = self.uimanager.get_widget('/menubar/edit_menu/show_preferences') macapp.insert_app_menu_item(prefs, 1) macapp.ready() except ImportError: pass # HACK: Delay opening first page till after show_all() -- else plugins are not initialized # FIXME need to do extension & initialization of uistate earlier if self._first_page: self.open_page(self._first_page) del self._first_page else: self.open_page_home() self.mainwindow.pageview.grab_focus() gtk.main() def check_notebook_needs_upgrade(self): '''Check whether the notebook needs to be upgraded and prompt the user to do so if this is the case. Interactive wrapper for L{Notebook.upgrade_notebook()}. ''' if not self.notebook.needs_upgrade: return ok = QuestionDialog(None, ( _('Upgrade Notebook?'), # T: Short question for question prompt _('This notebook was created by an older of version of zim.\n' 'Do you want to upgrade it to the latest version now?\n\n' 'Upgrading will take some time and may make various changes\n' 'to the notebook. In general it is a good idea to make a\n' 'backup before doing this.\n\n' 'If you choose not to upgrade now, some features\n' 'may not work as expected') # T: Explanation for question to upgrade notebook ) ).run() if not ok: return with ProgressBarDialog(self, _('Upgrading notebook')) as dialog: # T: Title of progressbar dialog self.notebook.index.ensure_update(callback=lambda p: dialog.pulse(p.name)) dialog.set_total(self.notebook.index.n_list_all_pages()) self.notebook.upgrade_notebook(callback=lambda p: dialog.pulse(p.name)) def get_toplevel(self): return self.mainwindow def present(self, page=None, fullscreen=None, geometry=None): '''Present the mainwindow. Typically used to bring back a the application after it was hidden. Also used for remote calls. @param page: a L{Path} object or page path as string @param fullscreen: if C{True} the window is shown fullscreen, if C{None} the previous state is restored @param geometry: the window geometry as string in format "C{WxH+X+Y}", if C{None} the previous state is restored ''' self.mainwindow.present() if page: if isinstance(page, basestring): page = Path(page) self.open_page(page) if geometry: self.mainwindow.parse_geometry(geometry) elif fullscreen: self.mainwindow.toggle_fullscreen(show=True) def toggle_present(self): '''Present main window if it is not on top, but hide if it is. Used by the L{trayicon plugin} to toggle visibility of the window. ''' if self.mainwindow.is_active(): self.mainwindow.hide() else: self.mainwindow.present() def hide(self): '''Hide the main window. Note that this is not the same as minimize, when minimized there is still an icon in the task bar, if hidden there is no visible trace of the application and it can not be accessed by the user anymore until L{present()} has been called. ''' self.mainwindow.hide() def close(self): '''Menu action for close. Will hide when L{hideonclose} is set, calls L{quit()} otherwise. ''' if self.hideonclose: self.hide() else: self.quit() def quit(self): '''Menu action for quit. @emits: quit ''' if not self.close_page(self.page, final=True): # Do not quit if page not saved return False self.notebook.index.stop_updating() # XXX - avoid long wait self.mainwindow.hide() # look more responsive while gtk.events_pending(): gtk.main_iteration(block=False) self._quit() def _quit(self): self.emit('quit') if gtk.main_level() > 0: gtk.main_quit() return True def add_actions(self, actions, handler, methodname=None): '''Add extra menu actions to the interface which can be used in the menubar and toolbar. Wrapper for C{gtk.ActionGroup.add_actions()}. Adding actions will not show them in the interface immediately. To achieve that you first need to load some layout definition using L{add_ui()}. This method assumes the actions are implemented by a "handler" object. The actions are store in the C{gtk.ActionGroup} in the "actiongroup" attribute of this object. This attribute is created and attached to the uimanager if it does not yet exist. @param actions: a list of action definitions. Actions are defined as a 6-tuple of : - the name of the action - a gtk stock id for the icon, or C{None} - the label - the accelerator key binding - a tooltip message - a boolean, if C{True} this action is can be used in a read-only interface Actions that define (sub-)menus are a special case, they are defined as a 3-tuple of the name, stock id and a lable. In this case the name must end with "_menu" See C{gtk.ActionGroup} documentation for more details. @param handler: object that implements these actions. Each action is mapped to an object method of the same name. @param methodname: name for a method on the handler object which will handle all actions. This overrules the default mapping of actions by action name. Used to implement groups of actions with a single handler method. ''' assert isinstance(actions[0], tuple), 'BUG: actions should be list of tupels' group = self.init_actiongroup(handler) group.add_actions( gtk_accelerator_preparse_list(a[0:5] for a in actions)) self._connect_actions(actions, group, handler) def add_toggle_actions(self, actions, handler): '''Add extra menu actions to the interface which can be used in the menubar and toolbar. Wrapper for C{gtk.ActionGroup.add_toggle_actions()}. Differs from L{add_actions()} in the way actions are mapped to object methods, the name is prefixed with "do_". The reason for this is that we need some code to keep the state of toolbar and menubar widgets in sync with the internal state, while at the same time we want to be able to call the standard method name from other interface. So e.g. an action "foo" will trigger a method "C{do_foo()}" which should implement the logic. This allows also to have a public method "C{foo()}" which calls "C{action.activate()}" whic in turn triggers "C{do_foo()}" again. See L{zim.plugins.PluginClass.toggle_action()} for a convenience method to help implementing this. @param actions: list of action definitions. Actions are defined defined as a 7-tuple of : - the name of the action - a gtk stock id for the icon, or C{None} - the label - the accelerator key binding - a tooltip message - initial state C{True} or C{False} - a boolean, if C{True} this action is can be used in a read-only interface See C{gtk.ActionGroup} documentation for more details. @param handler: object that implements these actions. ''' assert isinstance(actions[0], tuple), 'BUG: actions should be list of tupels' group = self.init_actiongroup(handler) group.add_toggle_actions( gtk_accelerator_preparse_list(a[0:5]+(None, a[5]) for a in actions)) # insert 'None' for callback self._connect_actions(actions, group, handler, is_toggle=True) def add_radio_actions(self, actions, handler, methodname): '''Add extra menu actions to the interface which can be used in the menubar and toolbar. Wrapper for C{gtk.ActionGroup.add_radio_actions()}, defining a single group of radio actions. Of this group only one item can be active at the time. @param actions: a list of action definitions. Actions are defined as a 6-tuple of : - the name of the action - a gtk stock id for the icon, or C{None} - the label - the accelerator key binding - a tooltip message - the value to set on the radio See C{gtk.ActionGroup} documentation for more details. @param handler: object that implements these actions @param methodname: name for a method on the handler object which will handle all actions, this is mandatory for radio actions, they always have a single handler for the whole group. The handler gets the name of the selected radio as the first argument. ''' # A bit different from the other two methods since radioactions # come in mutual exclusive groups. Only need to connect to one # action to get signals from whole group. But need to pass on # the name of the active action assert isinstance(actions[0], tuple), 'BUG: actions should be list of tuples' assert hasattr(handler, methodname), 'No such method %s' % methodname group = self.init_actiongroup(handler) group.add_radio_actions( gtk_accelerator_preparse_list(actions)) method = getattr(handler, methodname) action = group.get_action(actions[0][0]) action.connect('changed', self._radio_action_handler, method) def init_actiongroup(self, handler): '''Initializes the actiongroup for a handler object if it does not already exist. The actiongroup is set in the "actiongroup" attribute of the object and inserted in the ui manager. @param handler: the handler object @returns: the actiongroup object ''' if not hasattr(handler, 'actiongroup') or handler.actiongroup is None: name = handler.__class__.__name__ handler.actiongroup = gtk.ActionGroup(name) self.uimanager.insert_action_group(handler.actiongroup, 0) return handler.actiongroup def remove_actiongroup(self, handler): '''Remove the actiongroup for a handler object and remove all actions from the ui manager. @param handler: the handler object ''' if hasattr(handler, 'actiongroup') and handler.actiongroup: self.uimanager.remove_action_group(handler.actiongroup) handler.actiongroup = None def _action_handler(self, action, method, *arg): name = action.get_name() logger.debug('Action: %s', name) try: method(*arg) except Exception, error: ErrorDialog(self.mainwindow, error).run() # error dialog also does logging automatically def _radio_action_handler(self, object, action, method): # radio action object is not active radio action self._action_handler(action, method, action.get_name()) def _connect_actions(self, actions, group, handler, is_toggle=False): for name, readonly in [(a[0], a[-1]) for a in actions if not a[0].endswith('_menu')]: action = group.get_action(name) action.zim_readonly = readonly if re.search('_alt\d$', name): # alternative key bindings name, _ = name.rsplit('_', 1) if is_toggle: name = 'do_' + name assert hasattr(handler, name), 'No method defined for action %s' % name method = getattr(handler, name) action.connect('activate', self._action_handler, method) if self.readonly and not action.zim_readonly: action.set_sensitive(False) def add_ui(self, xml, handler): '''Add a definition of the layout of the menubar and/or toolbar adding new menu items. Wrapper for C{gtk.UIManager.add_ui_from_string()}, see documentation there for more details on XML spec. @param xml: layout definition as string in XML format @param handler: handler object, this object is used to keep track of ui ID's so L{remove_ui()} can remove all ui elements of this handler at once @returns: the ui ID ''' id = self.uimanager.add_ui_from_string(xml) if hasattr(handler, '_ui_merge_ids') and handler._ui_merge_ids: handler._ui_merge_ids += (id,) else: handler._ui_merge_ids = (id,) return id def remove_ui(self, handler, id=None): '''Remove the ui definition(s) for a specific handler. @param handler: handler object @param id: if a ui ID is given, only that part is removed, else all ui definitions for this handler object are removed ''' if id: self.uimanager.remove_ui(id) if hasattr(handler, '_ui_merge_ids'): handler._ui_merge_ids = \ filter(lambda i: i != id, handler._ui_merge_ids) else: if hasattr(handler, '_ui_merge_ids'): for id in handler._ui_merge_ids: self.uimanager.remove_ui(id) handler._ui_merge_ids = None def populate_popup(self, name, menu, path_context=None): '''Populate a popup menu from a popup defined in the uimanager This effectively duplicated the menu items from a given popup as defined in the uimanager to a given menu. The reason to do this is to include a menu that is extendable for plugins etc. into an existing popup menu. (Note that changes to the menu as returned by uimanager.get_widget() are global.) @param name: the uimanager popup name, e.g. "toolbar_popup" or "page_popup" @param menu: a gtk.Menu to be populated with the menu items @param path_context: a L{Path} object in case this menu is about a page, will be used as the context for the various actions @raises ValueError: when 'name' does not exist ''' # ... so we have to do our own XML parsing here :( # but take advantage of nicely formatted line-based output ... xml = self.uimanager.get_ui() xml = [l.strip() for l in xml.splitlines()] # Get slice of XML start, end = None, None for i, line in enumerate(xml): if start is None: if line.startswith('' % name): start = i else: if line.startswith(''): end = i break if start is None or end is None: raise ValueError, 'No such popup in uimanager: %s' % name # Wrapper to set path context def wrapper(menuitem, action): self._path_context = path_context try: action.activate() except: self._path_context = None raise else: self._path_context = None # Parse items and add to menu seen_item = False # use to track empty parts for line in xml[start+1:end]: if line.startswith(' 0) indexpath = self.notebook.index.lookup_path(page) child.set_sensitive(indexpath.haschildren) # FIXME: Need index path here, page.haschildren is also True # when the page just has a attachment folder def close_page(self, page=None, final=False): '''Close the page and try to save any changes in the page. @param page: the page to close, defaults to current page in main window @param final: hint if we believe this to be the last page before quitting the page @returns: C{True} if succesful, C{False} if page still has un-saved changes. @emits: close-page ''' if page is None: page = self.page self.emit('close-page', page, final) page._parsetree = None # XXX HACK to avoid caching parsetree - can be removed # once the pageview takes care of saving the page return not page.modified def do_close_page(self, page, final): self.assert_save_page_if_modified() current = self.history.get_current() if current == page: current.cursor = self.mainwindow.pageview.get_cursor_pos() current.scroll = self.mainwindow.pageview.get_scroll_pos() def save_uistate_cb(): if self.uistate.modified: self.uistate.write_async() # else ignore silently if self.uistate.modified and hasattr(self.uistate, 'write'): # during tests we may have a config dict without config file if final: self.uistate.write() else: # Delayed signal avoid queueing many of these in a # short time when going back and forward in the history if not hasattr(self.uistate, '_delayed_async_write'): self.uistate._delayed_async_write = \ DelayedCallback(2000, save_uistate_cb) # 2 sec self.uistate._delayed_async_write() def open_page_back(self): '''Menu action to open the previous page from the history @returns: C{True} if succesful ''' record = self.history.get_previous() if not record is None: self.open_page(record) return True else: return False def open_page_forward(self): '''Menu action to open the next page from the history @returns: C{True} if succesful ''' record = self.history.get_next() if not record is None: self.open_page(record) return True else: return False def open_page_parent(self): '''Menu action to open the parent page @returns: C{True} if succesful ''' namespace = self.page.namespace if namespace: self.open_page(Path(namespace)) return True else: return False def open_page_child(self): '''Menu action to open a child page. Either takes the last child from the history, or the first child. @returns: C{True} if succesful ''' path = self.notebook.index.lookup_path(self.page) # Force refresh "haschildren" ... if not path.haschildren: print 'HASCHILDREN still False' return False record = self.history.get_child(path) if not record is None: self.open_page(record) else: pages = list(self.notebook.index.list_pages(path)) if pages: self.open_page(pages[0]) return True def open_page_previous(self): '''Menu action to open the previous page from the index @returns: C{True} if succesful ''' path = self.notebook.index.get_previous(self.page) if not path is None: self.open_page(path) return True else: return False def open_page_next(self): '''Menu action to open the next page from the index @returns: C{True} if succesful ''' path = self.notebook.index.get_next(self.page) if not path is None: self.open_page(path) return True else: return False def open_page_home(self): '''Menu action to open the home page''' self.open_page(self.notebook.get_home_page()) def new_page(self): '''Menu action to create a new page, shows the L{NewPageDialog}, Difference with L{open_page()} is that the page is saved directly, so it exists and is stays visible if the user navigates away without first adding content. Though subtle this is expected behavior for users. ''' NewPageDialog(self, path=self._get_path_context()).run() def new_sub_page(self): '''Menu action to create a new page, shows the L{NewPageDialog}. Like L{new_page()} but forces a child page of the current page. ''' NewPageDialog(self, path=self._get_path_context(), subpage=True).run() def new_page_from_text(self, text, name=None, use_template=False, attachments=None, open_page=False): '''Create a new page with content. This method is intended mainly for remote calls. It is used for example by the L{quicknote plugin}. @param text: the content of the page (wiki format) @param name: the page name as string, if C{None} the first line of the text is used as the basename. If the page already exists a number is added to force a unique page name. @param open_page: if C{True} navigate to this page directly @param use_template: if C{True} the "new page" template is used @param attachments: a folder as C{Dir} object or C{string} (for remote calls). All files in this folder are imported as attachments for the new page. In the text these can be referred relatively. @returns: a L{Path} object for the new page ''' # The 'open_page' and 'attachments' arguments are a bit of a # hack for remote calls. They are needed because the remote # function doesn't know the exact page name we creates... # TODO: with new zim.ipc we can now return the page name and # get rid of this hack if not name: name = text.strip()[:30] if '\n' in name: name, _ = name.split('\n', 1) name = self.notebook.cleanup_pathname(name.replace(':', ''), purge=True) elif isinstance(name, Path): name = name.name name = self.notebook.cleanup_pathname(name, purge=True) else: name = self.notebook.cleanup_pathname(name, purge=True) path = self.notebook.resolve_path(name) page = self.notebook.get_new_page(path) if use_template: parsetree = self.notebook.get_template(page) page.set_parsetree(parsetree) page.parse('wiki', text, append=True) # FIXME format hard coded else: page.parse('wiki', text) # FIXME format hard coded self.notebook.store_page(page) if attachments: if isinstance(attachments, basestring): attachments = Dir(attachments) self.import_attachments(page, attachments) if open_page: self.present(page) return Path(page.name) def import_attachments(self, path, dir): '''Import a set of files as attachments. All files in C{folder} will be imported in the attachment dir. Any existing files will be overwritten. @param path: a L{Path} object (or C{string} for remote call) @param dir: a L{Dir} object (or C{string} for remote call) ''' if isinstance(path, basestring): path = Path(path) if isinstance(dir, basestring): dir = Dir(dir) attachments = self.notebook.get_attachments_dir(path) for name in dir.list(): # FIXME could use list objects, or list_files() file = dir.file(name) if not file.isdir(): file.copyto(attachments) def append_text_to_page(self, name, text): '''Append text to an (existing) page. This method is intended mainly for remote calls. It is used for example by the L{quicknote plugin}. @param name: the page name @param text: the content of the page (wiki format) ''' if isinstance(name, Path): name = name.name path = self.notebook.resolve_path(name) page = self.notebook.get_page(path) page.parse('wiki', text, append=True) # FIXME format hard coded self.notebook.store_page(page) def open_new_window(self, page=None): '''Menu action to open a page in a secondary L{PageWindow} @param page: the page L{Path}, deafults to current selected ''' if page is None: page = self._get_path_context() PageWindow(self, page).show_all() @SignalHandler def do_autosave(self): if self._check_autosave_done(): page = self.mainwindow.pageview.get_page() if page.modified \ and self._save_page_check_page(page): try: self._autosave_thread = self.notebook.store_page_async(page) except: # probably means backend does not support async store # AND failed storing - re-try immediatly logger.exception('Error during autosave - re-try') self.save_page() else: self._autosave_thread = None else: pass # still busy def _check_autosave_done(self): ## Returning True here does not mean previous save was OK, just that it finished! if not self._autosave_thread: return True elif not self._autosave_thread.done: return False elif self._autosave_thread.error: # FIXME - should we force page.modified = True here ? logger.error('Error during autosave - re-try', exc_info=self._autosave_thread.exc_info) self._save_page(self.mainwindow.pageview.get_page()) # force normal save return True else: return True # Done and no error .. def assert_save_page_if_modified(self): '''Like C{save_page()} but only saves when needed. @raises PageHasUnSavedChangesError: when page was not saved ''' page = self.mainwindow.pageview.get_page() if page is None: return if self._autosave_thread \ and not self._autosave_thread.done: self._autosave_thread.join() # wait to finish self._check_autosave_done() # handle errors if any if page.modified: return self._save_page(page) else: return True def save_page(self): '''Menu action to save the current page. Can result in a L{SavePageErrorDialog} when there is an error while saving a page. @returns: C{True} when successful, C{False} when the page still has unsaved changes ''' page = self.mainwindow.pageview.get_page() assert page is not None if self._autosave_thread \ and not self._autosave_thread.done: self._autosave_thread.join() # wait to finish # No error handling here for autosave, we save anyway return self._save_page(page) def _save_page(self, page): if not self._save_page_check_page(page): return ## HACK - otherwise we get a bug when saving a new page immediatly # hasattr assertions used to detect when the hack breaks assert hasattr(page, '_ui_object') if page._ui_object: assert hasattr(page._ui_object, '_showing_template') page._ui_object._showing_template = False ## logger.debug('Saving page: %s', page) try: self.notebook.store_page(page) except Exception, error: logger.exception('Failed to save page: %s', page.name) with self.do_autosave.blocked(): # Avoid new autosave (on idle) while dialog is seen SavePageErrorDialog(self, error, page).run() return not page.modified def _save_page_check_page(self, page): # Ensure that the page can be saved in the first place try: if self.readonly: raise AssertionError, 'BUG: can not save page when read-only' elif page.readonly: raise AssertionError, 'BUG: can not save read-only page' except Exception, error: with self.do_autosave.blocked(): # Avoid new autosave (on idle) while dialog is seen SavePageErrorDialog(self, error, page).run() return False else: return True def save_copy(self): '''Menu action to show a L{SaveCopyDialog}''' SaveCopyDialog(self).run() def show_export(self): '''Menu action to show an L{ExportDialog}''' from zim.gui.exportdialog import ExportDialog ExportDialog(self).run() def email_page(self): '''Menu action to open an email containing the current page. Encodes the current page as "mailto:" URI and calls L{open_url()} to start the preferred email client. ''' text = ''.join(self.page.dump(format='plain')) url = 'mailto:?subject=%s&body=%s' % ( url_encode(self.page.name, mode=URL_ENCODE_DATA), url_encode(text, mode=URL_ENCODE_DATA), ) self.open_url(url) def import_page(self): '''Menu action to show an L{ImportPageDialog}''' ImportPageDialog(self).run() def move_page(self, path=None): '''Menu action to show the L{MovePageDialog} @param path: a L{Path} object, or C{None} to move to current selected page ''' if path is None: path = self._get_path_context() MovePageDialog(self, path).run() def do_move_page(self, path, newpath, update_links): '''Callback for MovePageDialog and PageIndex for executing notebook.move_page but wrapping with all the proper exception dialogs. Returns boolean for success. ''' self.assert_save_page_if_modified() return self._wrap_move_page( lambda update_links, callback: self.notebook.move_page( path, newpath, update_links, callback), update_links ) def rename_page(self, path=None): '''Menu action to show the L{RenamePageDialog} @param path: a L{Path} object, or C{None} for the current selected page ''' if path is None: path = self._get_path_context() RenamePageDialog(self, path).run() def do_rename_page(self, path, newbasename, update_heading=True, update_links=True): '''Callback for RenamePageDialog for executing notebook.rename_page but wrapping with all the proper exception dialogs. Returns boolean for success. ''' self.assert_save_page_if_modified() return self._wrap_move_page( lambda update_links, callback: self.notebook.rename_page( path, newbasename, update_heading, update_links, callback), update_links ) def _wrap_move_page(self, func, update_links): if self.notebook.index.updating: # Ask regardless of update_links because it might very # well be that the dialog thinks there are no links # but they are simply not indexed yet cont = QuestionDialog(self, _('The index is still busy updating. Until this ' 'is finished links can not be updated correctly. ' 'Performing this action now could break links, ' 'do you want to continue anyway?' ) # T: question dialog text ).run() if cont: update_links = False else: return False dialog = ProgressBarDialog(self, _('Updating Links')) # T: Title of progressbar dialog callback = lambda p, **kwarg: dialog.pulse(p.name, **kwarg) try: with dialog: func(update_links, callback) except Exception, error: ErrorDialog(self, error).run() return False else: return True def delete_page(self, path=None): '''Delete a page by either trashing it, or permanent deletion after confirmation of a L{DeletePageDialog}. When trashing the update behavior depends on the "remove_links_on_delete" preference. @param path: a L{Path} object, or C{None} for the current selected page ''' if path is None: path = self._get_path_context() if not path: return update_links = self.preferences['GtkInterface']['remove_links_on_delete'] dialog = ProgressBarDialog(self, _('Removing Links')) # T: Title of progressbar dialog callback = lambda p, **kwarg: dialog.pulse(p.name, **kwarg) try: with dialog: self.notebook.trash_page(path, update_links, callback) except TrashNotSupportedError, error: logger.info('Trash not supported: %s', error.msg) DeletePageDialog(self, path).run() except TrashCancelledError, error: pass def show_properties(self): '''Menu action to show the L{PropertiesDialog}''' from zim.gui.propertiesdialog import PropertiesDialog PropertiesDialog(self).run() def show_search(self, query=None): '''Menu action to show the L{SearchDialog} @param query: the search query to show ''' from zim.gui.searchdialog import SearchDialog if query is None: query = self.mainwindow.pageview.get_selection() dialog = SearchDialog(self) dialog.show_all() if query is not None: dialog.search(query) def show_search_backlinks(self): '''Menu action to show the L{SearchDialog} with a query for backlinks ''' query = 'LinksTo: "%s"' % self.page.name self.show_search(query) def show_recent_changes(self): '''Menu action to show the L{RecentChangesDialog}''' from .recentchangesdialog import RecentChangesDialog dialog = RecentChangesDialog.unique(self, self) dialog.present() def copy_location(self): '''Menu action to copy the current page name to the clipboard''' Clipboard.set_pagelink(self.notebook, self.page) def show_templateeditor(self): '''Menu action to show the L{TemplateEditorDialog}''' from zim.gui.templateeditordialog import TemplateEditorDialog TemplateEditorDialog(self).run() def show_preferences(self): '''Menu action to show the L{PreferencesDialog}''' from zim.gui.preferencesdialog import PreferencesDialog PreferencesDialog(self).run() def do_preferences_changed(self, *a): self.uimanager.set_add_tearoffs( self.preferences['GtkInterface']['tearoff_menus'] ) def reload_page(self): '''Menu action to reload the current page. Will first try to save any unsaved changes, then reload the page from disk. ''' self.assert_save_page_if_modified() self.notebook.flush_page_cache(self.page) self.open_page(self.notebook.get_page(self.page)) def attach_file(self, path=None): '''Menu action to show the L{AttachFileDialog} @param path: a L{Path} object, or C{None} for the current selected page ''' if path is None: path = self._get_path_context() AttachFileDialog(self, path).run() def do_attach_file(self, path, file, force_overwrite=False): '''Callback for AttachFileDialog and InsertImageDialog When 'force_overwrite' is False the user will be prompted in case the new file has the same name as an existing attachment. Returns the (new) filename or None when the action was canceled. ''' dir = self.notebook.get_attachments_dir(path) if dir is None: raise Error, '%s does not have an attachments dir' % path dest = dir.file(file.basename) if dest.exists() and not force_overwrite: dialog = PromptExistingFileDialog(self, dest) dest = dialog.run() if dest is None: return None # dialog was cancelled file.copyto(dest) return dest def open_dir(self, dir): '''Open a L{Dir} object and prompt to create it if it doesn't exist yet. @param dir: a L{Dir} object ''' if dir.exists(): self.open_file(dir) else: question = ( _('Create folder?'), # T: Heading in a question dialog for creating a folder _('The folder "%s" does not yet exist.\nDo you want to create it now?') % dir.basename) # T: Text in a question dialog for creating a folder, %s will be the folder base name create = QuestionDialog(self, question).run() if create: dir.touch() self.open_file(dir) def open_file(self, file, mimetype=None, callback=None): '''Open a L{File} or L{Dir} in the system file browser. @param file: a L{File} or L{Dir} object @param mimetype: optionally specify the mimetype to force a specific application to open this file @param callback: callback function to be passed on to L{Application.spawn()} (if the application supports a callback, otherwise it is ignored silently) @raises NoSuchFileError: if C{file} does not exist @raises ApplicationLookupError: if a specific mimetype was given, but no default application is known for this mimetype (will not use fallback in this case - fallback would ignore the specified mimetype) ''' logger.debug('open_file(%s, %s)', file, mimetype) assert isinstance(file, (File, Dir)) if isinstance(file, (File)) and file.isdir(): file = Dir(file.path) if not file.exists(): raise NoSuchFileError, file if isinstance(file, File): # File manager = ApplicationManager() if mimetype is None: entry = manager.get_default_application(file.get_mimetype()) else: entry = manager.get_default_application(mimetype) if entry is None: raise ApplicationLookupError, 'No Application found for: %s' % mimetype # Do not go to fallback, we can not force # mimetype for fallback if entry: self._open_with(entry, file, callback) else: self._open_with_filebrowser(file, callback) else: # Dir self._open_with_filebrowser(file, callback) def open_url(self, url): '''Open an URL (or URI) in the web browser or other relevant program. The application is determined based on the URL / URI scheme. Unkown schemes and "file://" URIs are opened with the webbrowser. @param url: the URL to open, e.g. "http://zim-wiki.org" or "mailto:someone@somewhere.org" ''' logger.debug('open_url(%s)', url) assert isinstance(url, basestring) if is_url_re.match(url): # Try custom handlers if is_url_re[1] in self.url_handlers: handled = self.url_handlers[is_url_re[1]](url) if handled: return else: pass # handled below elif is_win32_share_re.match(url): url = normalize_win32_share(url) if os.name == 'nt': return self._open_with_filebrowser(url) # else consider as a x-scheme-handler/smb type URI elif not is_uri_re.match(url): raise AssertionError, 'Not an URL: %s' % url # Default handlers if url.startswith('zim+'): # Notebook URL, these we handle ourselves self.open_notebook(url) elif url.startswith('file:/'): # Special case, force to browser (and not to open_file ... # even though the result may be the same if the browser is # dispatched through xdg-open, gnome-open, ...) self._open_with_webbrowser(url) elif url.startswith('outlook:') and hasattr(os, 'startfile'): # Special case for outlook folder paths on windows os.startfile(url) else: from zim.gui.applications import get_mimetype manager = ApplicationManager() type = get_mimetype(url) logger.debug('Got type "%s" for "%s"', type, url) entry = manager.get_default_application(type) if entry: self._open_with(entry, url) elif url.startswith('mailto:'): self._open_with_emailclient(url) else: self._open_with_webbrowser(url) def _open_with_filebrowser(self, file, callback=None): # Fallback for files and folders, used by open_file() entry = ApplicationManager.get_fallback_filebrowser() self._open_with(entry, file, callback) def _open_with_emailclient(self, uri): # Fallback for "mailto:" URIs, used by open_url() entry = ApplicationManager.get_fallback_emailclient() self._open_with(entry, uri) def _open_with_webbrowser(self, url): # Fallback for other URLs and URIs, used by open_url() entry = ApplicationManager.get_fallback_webbrowser() self._open_with(entry, url) def _open_with(self, entry, uri, callback=None): def check_error(status): if status != 0: ErrorDialog(self, _('Could not open: %s') % uri).run() # T: error when external application fails if callback is None: callback = check_error try: entry.spawn((uri,), callback=callback) except NotImplementedError: entry.spawn((uri,)) # E.g. webbrowser module def open_attachments_folder(self): '''Menu action to open the attachment folder for the current page''' dir = self.notebook.get_attachments_dir(self.page) if dir is None: error = _('This page does not have an attachments folder') # T: Error message ErrorDialog(self, error).run() else: self.open_dir(dir) def open_notebook_folder(self): '''Menu action to open the notebook folder''' if self.notebook.dir: self.open_file(self.notebook.dir) elif self.notebook.file: self.open_file(self.notebook.file.dir) else: assert False, 'BUG: notebook has neither dir or file' def open_document_root(self): '''Menu action to open the document root folder''' dir = self.notebook.document_root if dir: self.open_dir(dir) def open_document_folder(self): '''Menu action to open a sub-foldel of the document root folder for the current page ''' dir = self.notebook.document_root if dir is None: return dirpath = encode_filename(self.page.name) dir = Dir([dir, dirpath]) self.open_dir(dir) def edit_page_source(self, page=None): '''Menu action to edit the page source in an external editor. See L{edit_file} for details. @param page: the L{Page} object, or C{None} for te current page ''' # This could also be defined as a custom tool, but defined here # because we want to determine the editor dynamically # We assume that the default app for a text file is a editor # and not e.g. a viewer or a browser. Of course users can still # define a custom tool for other editors. if not page: page = self.page if not hasattr(self.page, 'source'): ErrorDialog(self, 'This page does not have a source file').run() return self.assert_save_page_if_modified() self.edit_file(self.page.source, istextfile=True) if page == self.page: self.reload_page() def edit_config_file(self, configfile): '''Edit a config file in an external editor. See L{edit_file()} for details. @param configfile: a L{ConfigFile} object ''' configfile.touch() self.edit_file(configfile.file, istextfile=True) def edit_file(self, file, istextfile=None, dialog=None): '''Edit a file with and external application. This method will show a dialog to block the interface while the external application is running. The dialog is closed automatically when the application exits _after_ modifying the file. If the file is unmodified the user needs to click the "Done" button in the dialog because we can not know if the application was really done or just forked to another process. @param file: a L{File} object @param istextfile: if C{True} the text editor is used, otherwise we ask the file browser for the correct application. When C{None} we check the mimetype of the file to determine if it is text or not. @param dialog: the dialog that is spawning this action ''' ## FIXME force using real text editor, even when file has not ## text mimetype. This now goes wrong when editing e.g. a html ## template when the editor is "xdg-open" on linux or default ## os.startfile() on windows... if not file.exists(): raise NoSuchFileError, file oldmtime = file.mtime() window = dialog or self dialog = MessageDialog(window, ( _('Editing file: %s') % file.basename, # T: main text for dialog for editing external files _('You are editing a file in an external application. You can close this dialog when you are done') # T: description for dialog for editing external files ) ) def check_close_dialog(status): if status != 0: dialog.destroy() ErrorDialog(window, _('Could not open: %s') % file.basename).run() # T: error when external application fails else: newmtime = file.mtime() if newmtime != oldmtime: dialog.destroy() if istextfile: try: self.open_file(file, mimetype='text/plain', callback=check_close_dialog) except ApplicationLookupError: app = AddApplicationDialog(window, 'text/plain').run() if app: # Try again self.open_file(file, mimetype='text/plain', callback=check_close_dialog) else: return # Dialog was cancelled, no default set, ... else: self.open_file(file, callback=check_close_dialog) dialog.run() def show_server_gui(self): '''Menu action to show the server interface from L{zim.gui.server}. Spawns a new zim instance for the server. ''' # TODO instead of spawn, include in this process get_zim_application('--server', '--gui', self.notebook.uri).spawn() def reload_index(self, flush=False): '''Check the notebook for changes and update the index. Shows an progressbar while updateing. @param flush: if C{True} the index is flushed and rebuild from scratch @returns: C{True} unless the user cancelled the update ''' self.emit('start-index-update') index = self.notebook.index index.stop_updating() if flush: index.flush() dialog = ProgressBarDialog(self, _('Updating index')) # T: Title of progressbar dialog with dialog: index.update(callback=lambda p: dialog.pulse(p.name)) self.emit('end-index-update') return not dialog.cancelled def manage_custom_tools(self): '''Menu action to show the L{CustomToolManagerDialog}''' from zim.gui.customtools import CustomToolManagerDialog CustomToolManagerDialog(self).run() self.load_custom_tools() def load_custom_tools(self): '''Load the custom tools of the L{CustomToolManager} in the menu bar. ''' manager = CustomToolManager() # Remove old actions if self._custom_tool_ui_id: self.uimanager.remove_ui(self._custom_tool_ui_id) if self._custom_tool_actiongroup: self.uimanager.remove_action_group(self._custom_tool_actiongroup) if self._custom_tool_iconfactory: self._custom_tool_iconfactory.remove_default() # Load new actions actions = [] factory = gtk.IconFactory() factory.add_default() for tool in manager: icon = tool.icon if '/' in icon or '\\' in icon: # Assume icon is a file path - add it to IconFactory icon = 'zim-custom-tool' + tool.key try: pixbuf = tool.get_pixbuf(gtk.ICON_SIZE_LARGE_TOOLBAR) set = gtk.IconSet(pixbuf=pixbuf) factory.add(icon, set) except Exception: logger.exception('Got exception while loading application icons') icon = None action = (tool.key, icon, tool.name, '', tool.comment, self._exec_custom_tool) actions.append(action) self._custom_tool_iconfactory = factory self._custom_tool_actiongroup = gtk.ActionGroup('custom_tools') self._custom_tool_actiongroup.add_actions(actions) menulines = ["\n" % tool.key for tool in manager] toollines = ["\n" % tool.key for tool in manager if tool.showintoolbar] textlines = ["\n" % tool.key for tool in manager if tool.showincontextmenu == 'Text'] pagelines = ["\n" % tool.key for tool in manager if tool.showincontextmenu == 'Page'] ui = """\ %s %s %s %s """ % ( ''.join(menulines), ''.join(toollines), ''.join(textlines), ''.join(pagelines) ) self.uimanager.insert_action_group(self._custom_tool_actiongroup, 0) self._custom_tool_ui_id = self.uimanager.add_ui_from_string(ui) def _exec_custom_tool(self, action): manager = CustomToolManager() tool = manager.get_tool(action.get_name()) logger.info('Execute custom tool %s', tool.name) args = (self.notebook, self.page, self.mainwindow.pageview) try: if tool.isreadonly: tool.spawn(args) elif tool.replaceselection: output = tool.pipe(args) logger.debug('Replace output with %s', output) pageview = self.mainwindow.pageview # XXX buffer = pageview.view.get_buffer() # XXX if buffer.get_has_selection(): start, end = buffer.get_selection_bounds() with buffer.user_action: buffer.delete(start, end) buffer.insert_at_cursor(''.join(output)) else: pass # error here ?? else: tool.run(args) self.reload_page() self.notebook.index.update_async() # TODO instead of using run, use spawn and show dialog # with cancel button. Dialog blocks ui. except Exception, error: ErrorDialog(self, error).run() def show_help(self, page=None): '''Menu action to show the user manual. Will start a new zim instance showing the notebook with the manual. @param page: manual page to show (string) ''' if page: get_zim_application('--manual', page).spawn() else: get_zim_application('--manual').spawn() def show_help_faq(self): '''Menu action to show the 'FAQ' page in the user manual''' self.show_help('FAQ') def show_help_keys(self): '''Menu action to show the 'Key Bindings' page in the user manual''' self.show_help('Help:Key Bindings') def show_help_bugs(self): '''Menu action to show the 'Bugs' page in the user manual''' self.show_help('Bugs') def show_about(self): '''Menu action to show the "about" dialog''' gtk.about_dialog_set_url_hook(lambda d, l: self.open_url(l)) gtk.about_dialog_set_email_hook(lambda d, l: self.open_url(l)) dialog = gtk.AboutDialog() try: # since gtk 2.12 dialog.set_program_name('Zim') except AttributeError: pass import zim dialog.set_version(zim.__version__) dialog.set_comments(_('A desktop wiki')) # T: General description of zim itself file = data_file('zim.png') pixbuf = gtk.gdk.pixbuf_new_from_file(file.path) dialog.set_logo(pixbuf) dialog.set_copyright(zim.__copyright__) dialog.set_license(zim.__license__) dialog.set_authors([zim.__author__]) dialog.set_translator_credits(_('translator-credits')) # T: This string needs to be translated with names of the translators for this language dialog.set_website(zim.__url__) dialog.run() dialog.destroy() # Need to register classes defining gobject signals gobject.type_register(GtkInterface) class ResourceOpener(object): def __init__(self, window): self.window = window def open_page(self, path, new_window=False): if new_window: self.window.ui.open_new_window(path) # XXX else: self.window.ui.open_page(path) # XXX return self.window.pageview # XXX def open_dir(self, dir): self.window.ui.open_dir(dir) def open_file(self, url): self.window.ui.open_file(url) def open_url(self, url): self.window.ui.open_url(url) class MainWindow(Window): '''This class implements the main window of the application. It contains the main L{PageView} and the side pane with a L{PageIndex}. Also includes the menubar, toolbar, L{PathBar}, statusbar etc. @ivar pageview: the L{PageView} object @ivar pageindex: the L{PageIndex} object @ivar pathbar: the L{PathBar} object @signal: C{fullscreen-changed ()}: emitted when switching to or from fullscreen state ''' # define signals we want to use - (closure type, return type and arg types) __gsignals__ = { 'fullscreen-changed': (gobject.SIGNAL_RUN_LAST, None, ()), 'init-uistate': (gobject.SIGNAL_RUN_LAST, None, ()), } def __init__(self, ui, preferences=None, fullscreen=False, geometry=None): '''Constructor @param ui: the L{GtkInterFace} @param preferences: a C{ConfigDict} with preferences @param fullscreen: if C{True} the window is shown fullscreen, if C{None} the previous state is restored @param geometry: the window geometry as string in format "C{WxH+X+Y}", if C{None} the previous state is restored ''' Window.__init__(self) self.isfullscreen = False self.ui = ui self.preferences = preferences # XXX should be just prefernces dict - use "config" otherwise self.preferences.connect('changed', self.do_preferences_changed) ui.connect('open-page', self.on_open_page) ui.connect('close-page', self.on_close_page) self._block_toggle_panes = False self._sidepane_autoclose = False self._switch_focus_accelgroup = None self.maximized = False # Catching this signal prevents the window to actually be destroyed # when the user tries to close it. The action for close should either # hide or destroy the window. def do_delete_event(*a): logger.debug('Action: close (delete-event)') self.hide() # look more responsive ui.close() return True # Do not destroy - let close() handle it self.connect('delete-event', do_delete_event) # setup the window layout from zim.gui.widgets import TOP, BOTTOM, TOP_PANE, LEFT_PANE # setup menubar and toolbar self.add_accel_group(ui.uimanager.get_accel_group()) self.menubar = ui.uimanager.get_widget('/menubar') self.toolbar = ui.uimanager.get_widget('/toolbar') self.toolbar.connect('popup-context-menu', self.do_toolbar_popup) self.add_bar(self.menubar, TOP) self.add_bar(self.toolbar, TOP) self.pageindex = PageIndex(ui) self.add_tab(_('Index'), self.pageindex, LEFT_PANE) # T: Label for pageindex tab self.pathbar = None self.pathbar_box = gtk.HBox() self.add_widget(self.pathbar_box, (TOP_PANE, TOP)) self.pageview = PageView(ui) self.pageview.view.connect_after( 'toggle-overwrite', self.do_textview_toggle_overwrite) self.add(self.pageview) # create statusbar hbox = gtk.HBox(spacing=0) self.add_bar(hbox, BOTTOM) self.statusbar = gtk.Statusbar() if ui_environment['platform'] == 'maemo': # Maemo windows aren't resizeable so it makes no sense to show the resize grip self.statusbar.set_has_resize_grip(False) self.statusbar.push(0, '') hbox.add(self.statusbar) def statusbar_element(string, size): frame = gtk.Frame() frame.set_shadow_type(gtk.SHADOW_IN) self.statusbar.pack_end(frame, False) label = gtk.Label(string) label.set_size_request(size, 10) label.set_alignment(0.1, 0.5) frame.add(label) return label # specify statusbar elements right-to-left self.statusbar_style_label = statusbar_element('

    Test Coverage Index

    ''') total_stat = reduce(int.__add__, [r[2] for r in index]) total_exec = reduce(int.__add__, [r[3] for r in index]) total_perc = int( float(total_exec) / total_stat * 100 ) if total_perc >= 90: type = 'good' elif total_perc >= 80: type = 'close' elif total_perc >= 60: type = 'ontrack' elif total_perc >= 40: type = 'lacking' else: type = 'bad' html.write('' '' '\n' % (total_stat, total_exec, type, total_perc) ) for report in index: pyfile, htmlfile, statements, executed = report if statements: percentage = int( float(executed) / statements * 100 ) else: percentage = 100 if percentage >= 90: type = 'good' elif percentage >= 80: type = 'close' elif percentage >= 60: type = 'ontrack' elif percentage >= 40: type = 'lacking' else: type = 'bad' html.write('' '' '\n' % (htmlfile, pyfile, statements, executed, type, percentage) ) html.write('''\
    FileStmtsExecCover
    Total%i%i%.0f%%
    %s%i%i%.0f%%
    ''') html.close() def write_coverage_txt(sourcefile, txtfile, missing, excluded, statements): txt = open(txtfile, 'w') file = open(sourcefile) i = 0 for line in file: i += 1 if i in missing: prefix = '!' elif i in excluded: prefix = '.' elif i in statements: prefix = ' ' else: prefix = ' ' txt.write(prefix + line) txt.close() def write_coverage_html(sourcefile, htmlfile, missing, excluded, statements): html = open(htmlfile, 'w') html.write('''\ Coverage report for %s

    Coverage report for %s

    ''' % (sourcefile, sourcefile)) file = open(sourcefile) i = 0 for line in file: i += 1 if i in missing: type = 'missing' elif i in excluded: type = 'excluded' elif i in statements: type = 'executed' else: type = 'comment' line = line.rstrip().replace('&', '&').replace('<', '<').replace('>', '>') html.write('\n' % (type, i, line) ) html.write('''\
     Executed statement
     Untested statement
     Ignored statement
      
    %i%s
    ''') html.close() if __name__ == '__main__': main() zim-0.65/LICENSE.txt0000664000175000017500000004310312374655231013751 0ustar jaapjaap00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. zim-0.65/zim.py0000775000175000017500000000333312426233341013273 0ustar jaapjaap00000000000000#!/usr/bin/python # This script is a wrapper around zim.main.main() for running zim as # an application. import sys import logging import os # Check if we run the correct python version try: version_info = sys.version_info assert version_info >= (2, 6) assert version_info < (3, 0) except: print >> sys.stderr, 'ERROR: zim needs python >= 2.6 (but < 3.0)' sys.exit(1) # Win32: must setup log file or it tries to write to $PROGRAMFILES # See http://www.py2exe.org/index.cgi/StderrLog if os.name == "nt" and sys.argv[0].endswith('.exe'): import tempfile dir = tempfile.gettempdir() if not os.path.isdir(dir): os.makedirs(dir) err_stream = open(dir + "\\zim.log", "w") sys.stdout = err_stream sys.stderr = err_stream # Preliminary initialization of logging because modules can throw warnings at import logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') # Try importing our modules try: import zim import zim.main import zim.ipc except ImportError: sys.excepthook(*sys.exc_info()) print >>sys.stderr, 'ERROR: Could not find python module files in path:' print >>sys.stderr, ' '.join(map(str, sys.path)) print >>sys.stderr, '\nTry setting PYTHONPATH' sys.exit(1) # Run the application and handle some exceptions try: zim.ipc.handle_argv() encoding = sys.getfilesystemencoding() # not 100% sure this is correct argv = [arg.decode(encoding) for arg in sys.argv] exitcode = zim.main.main(*argv) sys.exit(exitcode) except zim.main.GetoptError, err: print >>sys.stderr, sys.argv[0]+':', err sys.exit(1) except zim.main.UsageError, err: print >>sys.stderr, err.msg sys.exit(1) except KeyboardInterrupt: # e.g. C while --server print >>sys.stderr, 'Interrupt' sys.exit(1) else: sys.exit(0) zim-0.65/Makefile0000664000175000017500000000221612374655231013566 0ustar jaapjaap00000000000000PYTHON=`which python` DESTDIR=/ BUILDIR=$(CURDIR)/debian/zim PROJECT=zim all: $(PYTHON) setup.py build help: @echo "make - Build sources" @echo "make test - Run test suite" @echo "make install - Install on local system" @echo "make source - Create source package" @echo "make buildrpm - Generate a rpm package" @echo "make builddeb - Generate a deb package" @echo "make epydoc - Generate API docs using 'epydoc'" @echo "make clean - Get rid of scratch and byte files" source: $(PYTHON) setup.py sdist $(COMPILE) test: $(PYTHON) test.py install: $(PYTHON) setup.py install --root $(DESTDIR) $(COMPILE) buildrpm: $(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall builddeb: dpkg-buildpackage -i -I -rfakeroot $(MAKE) -f $(CURDIR)/debian/rules clean epydoc: epydoc --config ./epydoc.conf -v @echo -e '\nAPI docs are available in ./apidocs' clean: $(PYTHON) setup.py clean rm -rf build/ MANIFEST tests/tmp/ locale/ man/ xdg/hicolor test_report.html find . -name '*.pyc' -delete find . -name '*.pyo' -delete find . -name '*~' -delete rm -fr debian/zim* debian/files debian/python-module-stampdir/ zim-0.65/icons/0000775000175000017500000000000012615422672013237 5ustar jaapjaap00000000000000zim-0.65/icons/zim16.png0000664000175000017500000000153112374655231014714 0ustar jaapjaap00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8eMlTe}w)L F~E@B0%t BqɂDR 1jB?@@KNi8C3Ν}.؞9y{~sZbJF ^k9ik-:K k,p:1HhYĚ^5KvQ({*Z[V-FG(B|W=L(kJ\=sW»_a .v4cӓFF{EB埝}H4 ~=.:>ȗrx$q05K?F/oo:o%B@IF]Dk^x@ '`s _n޳2z^x8)Rk9;]_l:Q7ulE\|0 LȊTP4pV :zfGri^},W 6WL'-4 =5yAҌ\@כ ʌƒW|?b~SL= (+w image/svg+xml zim-0.65/icons/ubuntu-mono-light/0000775000175000017500000000000012615422672016634 5ustar jaapjaap00000000000000zim-0.65/icons/ubuntu-mono-light/zim-panel.svg0000664000175000017500000003757512374655231021273 0ustar jaapjaap00000000000000 image/svg+xml zim-0.65/icons/zim32.svg0000664000175000017500000006020312374655231014726 0ustar jaapjaap00000000000000 image/svg+xml zim-0.65/icons/zim48.svg0000664000175000017500000006306612374655231014747 0ustar jaapjaap00000000000000 image/svg+xml zim-0.65/icons/zim22.svg0000664000175000017500000005060612374655231014733 0ustar jaapjaap00000000000000 image/svg+xml zim-0.65/icons/zim22.png0000664000175000017500000000235112374655231014712 0ustar jaapjaap00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<fIDAT8[lTU}ΙۙLhKQD,$SDDPHIxUC b /xIL( `1\ )Υ3sf朽}jz_J))u][|YcJj)7@upB2\EOҤOѻmI3lCj"4,U.hT8{7P%!U Ju|!DK9 Jui[b FD{,S w20|(4Pc*;FӪ|yćMwzG`xY׃ϭ]i`|vZݧy '.UO\6:ԸdePm'/ͭwYTCWC1}+.ty bE][pqUv7j^HrD2A&;ĵZ:==B gyBnMh$SIҙ4(bHGצ΃'v gYu~c"iK<9+K6%VF! ڊ<T)Pi>sn{ЩU4O׿?Oaq7B*aRha 8 /TW*ꎶ}B1.- B \*^fTļNeO/X +ymv@I7NoT ﮄwg'}r!- ͮC}@;.T9_TZJ R5іg\ÍSC3|Wr'@`(@x!lnkm?'+Gl2(RCʊ]*ʫJXk{Eȸ_fφ{qׇr a(Ko94uα0RHOdS sHɫm  `^k]OVڞUnUQI$2)24e s~W z}ؙۭa|P[6߫A*$MdyK-m-?m]o`#ɢrC2v,$70Mh8Bat:DoUc\R@uﷰؘc;abҷߤ%iG|-l< NTvcI9Bl vy_Y.8;K+,iaonBuy?1gQ5=\dI_Z9|@JfBtB(% !gA D&hx4kk(.t|(tybMICl"A/wox\ 3n !9ݱ{.ybo#ѽw&[-Y:#aAG%a<|"g?r 5y܉ D@^6Ӭv`UVtx'~{o4dhqq]+( )>aP$ !AQlB;72R]>U( #*@I -۶lrNQS,e;>{9˿$h]CÐ0 0È( ,J).^Qm^)~͛e1 ֭; LU9n6ƪC`c0.K, KKhlVI+Ծ(a֭;Q0|N +K-|Ab!"($ K;Qt>:ϯE*]oB^DDW"S?'[[m?^{i 4`peGfR|_]#)U|HqݼR6-/?>۟ܪtr@)IߔJEDqLFDQLē"\U%ާ籠SHNaẺ~%(>0DzUWyAa<A%kMb2%| #&VQ՜8񉪮+Vzh֭pDz G+>ޕ)%HRTxky**3d]d[5N.cZc3ַDvGTpP֎eWUK3 \k2^Z *s$M-2^q]/S5N|6:1쇂|Sg ͟$^J' F?trU7T uO(wǦcJ ΫMaF~SPB^^+7l.'C>(p"yLw_Zᥫ{>pkrw`({~̿IN[.LˊdRiDd{܎BUnEob> t97 i?+Y'Tn/Q1OovWq6]wRc<*'Z"Q$̨Rzcn*;Mw'fUL'W+U@V${^,Cm JK:-7oצ;֒2C| &Dq^e-]j]H-4E'{̱ ;z0i&3:x9;`H ^l1$DGO7o<~ғ@ZSvr* LdY"S7Ϗ?OuCWuuk1y5ѐ|fCUA kR0cD1dǎq2_ŗ' L)i ߽NjO=XQ4+Tcv0$5Z24oբ8F+.;E1QX|o%˳P; GTr@A:ʽ‘eF1ˆ/PJ&sU1 W)uwf @ɿͪՊT )Qdё)Z}a~V nXk*%;1M39"T.m9T83J k=q<6l_puMj_IENDB`zim-0.65/icons/zim.ico0000664000175000017500000012636612374655231014551 0ustar jaapjaap00000000000000 qF00 %>r   hPNG  IHDR\rfqIDATx}$WuܓsܼZiw%* I($D6A |71&a,D!! Wiqr\[_U鞮+VOŮu KFf\ pنPt6Խ0Q/BVH~ظ_ZUT1lÏ_qi]*!u'jEXL}H7K,G@/qum2___oϊH|TSg*;k=YnR'F]Sk&Ymx?߾ջ(]dYn*uY~Vlvn'MG х־|UY1DHlW]%uY  B28-UI 2R'ŋ0d1 e2v@eN>$r`?" jR'ŋRH hk S`_Q,p qBߕB ؎!@դN>g @v@X1WAb 0Y'I|/ (!4`Z D&uY  A$x.W\3!G90V'I|/B!ؗ=[@1@B.H&uY@FP9Y`v! `NU:,N^@ڿA9$u g)DD$ &8CP5EV048 2R'ŋD$V8숋d jR'ŋزL[6!! `&uY !ƿ`hFhuEDP5Ea$e'PW0 9ڄ\}u g"@C &V$vGd jR'ŋH!.ph3V `O&uY fV0#tp:TMx@$$ &$NG/:TMx@#@A9$ 'nN :TMx@@ZЉ!)oe4V\6ZO܃n\ f^|/hF:+zّi$`}ނ;p pw!$v|/hA9+ `ݢ:{AY@).N˧ X'ŋ "H+z8 %*O˅M-G$_yP'ŋ `_4 &^$~G/O0@_˛|+HQ'ŋ:Η `v@-" @s !%†i۴*>Fbt"48` [< ߃Kw'bq{$S 4&@ *3¾uPO" E]HƬK<&ocːA%R9bSiP m9yj~ ȢFyLO$4UW_F'3AmI"f@@1=˩Ŝ#UOA`p !a\u 0˅@| PS\cl(5q/𶭴cUz2bh jqPCYVgȓ@2g$ߠ.>M @T7׏!plשԾRIдZ,xZ.=)\;BUiz6g)*(H ʴ( xmvp`->8 I:,aW|}k=XYf!fԖYjElZX!B]? BDb }6 .Bxf/#|N"Oz ~ltc-3Sxπk*p`c5o؆) z?]g3Y |bYi<s$ `N\N/:O2C3VC[p)(&GbM{VV-T2lIB M.D T߄J i,7vPdj؍zrfu)\`_-ZBd(:O©$OHUJ͸.4l6^X!B h8eNX_a#6dw BX?+ky_ ,c}.\,Zl(5wR'O423K"=x44nM}o'%(WO%ӐE@PfeJ*< BC&z3+| )s5O-(˜e„ʷ^zݥ [ Qp<QѲ!g΁؜F)ZW KIK^y|Q! ZDP/{ G:~u# o$;O[6-y_T,  |WbH_B*R5>)@ͽAϙ`{J g4o*D!}_ d]9OM*%?rCτB5;7%ÔΪ lOKVCC|@;ءQ7' )p3\uu^"=)Ԗby_Oœ|&P_|g}kA:̍΍ `2QǮZZ }w&3; o6 QY i?=gб& а&2?ʛ׀?We FOlխr'(xh4,DW }2ΡV@(Fd}_pC;%vyih>%]xЫzrs $ۢ p$%ش4v= ` T]Jڽ$;#| |bð_U8*}vHm@6~ i|̜|+VC o~Jɽ 8(ݠ܀UAt.DUow3u ׂWXFt1zv,>nD" S," e @HeSa r/s Ak?^0͸ ߜB>r5HC(e4@b7q6 ^πi쐯 驲5>zZO_^PdFe.Ne`zr2٬7kDXDsPvcͼSB,H@s&*%9,EiD@ĶaI`~M '6 C5tdڦLGࢧб}!փ؀ `ioHO%S)_TB a#Nc}n 7R<P pMHL m2/\*.A >NE3мFѻbv rNK\ eͩW% s'~3 ] s +:XZ X#ːާ^UAznJ4- $$YC}fJ Qԗhg dr{9oA𿧘k$$'HPL `JAZР \K w1yh

    n;+ 3^&#HKz%>בW%77 " ]^Ψc (YV' Lzhk7mػ ;&XAh,l%XjxӑrKXV8 ..HSuX ƥ!TiȳW] Wв󀳁^Dn~k뇳d M}gPi]炐yTU)HJ$bdA$ &U-'\:@s|#(P\tlQqZfR L̬Vgn&?kji`| ,:&33xv$+r\cHK/2)d~]+f!H,m7H$$fDppyvl7U'?Vkzd#/ן{$#pXrQ$CAE}$r0+~*E=ki[S@~Qi@t*SȾwnS<΄??&PPUVs(/Cg6@f[ws߂L 0ۄu>M(0Z/~DTQ pdNlNWS|UsiȊѧ [o1A4>ck EmEcsrƱ^_ 2 h2/Bz+4s@R81"Xܿ z.:qKO@Hx%_{a6\@ʻGeH@2!Uo<Bfyl' Ph{#0/Hz B77Nj81 'HaGp!U56vx6v`;أt ('f0ks z5׬ڛ4@p /e! HQLg8!/n!ޠzKOU1XwQTf mey.1S+LgvV{vVTDH<iwr5#< @4Hpq"_A zB[p{ |MT%~015eѬ=;Sb69cit_Gg>#U9r?$vst3}I[ݰvٳPGw14;7<-|M9/Y(Z>|Egn=㘾yP]Q|oO-^J dhUrV}K7 $̧KQv#[0/X{$Q߿QYF?{ְׂ{_Rx@Fchb[J紈5!]ggSuDžF6zbP3qS]$s0~*;;7j*m쳃ck =­s.W.f_Rz8A&0ss ]s^F8 `n{) E9i};$vP `M|ϪJABWKW/rpՂ_J%d47_ <&`;пU/\◤,LL@:U{v8"Ovȇ-0H/p.M/]ٷ` ]^6TneajA* AN:xyMM xIϖl+"@s0;?e{ZXm=k5RDݦ=ƶJ[G W~=Ap"?W 4 @odXsg7㨙R y>n+Rhߎ󶕲=*5_a\  s>nQ8gNMžm omP$hjQ[Z$ןM0vLn=a!`4\Xos*A>[ $ng =ؚ~I:uS.^VMJ!t8w <;Ol_Eˁp&den fe&ˏ YQ|y\ ڿwcA>ݽZ]|.=ӏvKQ+W}puy5o%\#yOxw~}&G~x7O?e['w9{.MD@Zh>ՂH]{}誛X*{6sHF'wi==zHhOܹ7ȇdZ/BX/@3%\N><-DJC*E;C{ϕ`5>{>L>srg Tš 擁+@"~:zD"L57=1e 4̝14Nᡩvx䏐[6 WoI=bP-U#դtGMem皠w;zI.]W 8s`oW6ܨe7rL? #\ ~tiw_1N9><8Uh~>Gޤ=SU>{ҍQcV`{oX7|fYo=xw[ahvLg@B{z0:_bO>KAlz1j2S~Q>w*lz{h[>-/Y~n-0`6p}S?V{+JQwe=ywqz&pz~ɲ'zY_~ K(G@)[LPAaaAox5fg0DZ_DubmmZty-nJ~BX|? yKC2,~ufQFW7P\n4cЊ $r$mC#)I }OqnH,Msl: lQ+E%I=f7e)4w f0:oU45Y_a19Q>K=}|߹TG!khf0v{?)N_A/CS̚2v+SkZv!iIϵ/v2TͼqX#DDIChۇ [oc]awu2tnD-%2_/a*x2Q;ή~C*vs_VPm0] /s 彘cXLЏƸ-G ~fEO#<_{!)K'H׊"z̏LwC%/>މއ܃˛AA1};lY' A,v*_?S˙gjEve< +6 =?h21Mr|4z6{ }.ׂ.$l+Hv .XK(G( Hsއ kD k܀;Yu/jΈ)o5eC7oZ$nDM\#dQ!yݐ\hy'|{3=y^01SP׀/V 6*;hx )aS<4Ł~>ߟ ؝܊$}ǿ t3|rAn@ѣ W,+i dtEPȟ⫆tQAT5p+jB>gO> ?xI y [8=O\@"Fz!&{0OdFnJ >K@Ǟ_7?8!$x g@]B?1rE/"x^\D8}Ї7s0[}Ѩޣ0|y`}0d:lڮػYQXS p$lKѬ;w3-eDO>RO#1ʇ5ܲa{B~d%e{NJYlA7`mۏ E` >*JQsm7d&XA T춯 ,$u( HWQlt,V;k-<~Ev[Ǽ _ |ؼ~d ^g"N2+C mF܀eQE _P,T#o,_r/I:G:YJ.:_."ˌ׺PA=31ug WM%!i޾nW?_jj0|@PB .ϔeE$ ١-xRZצmN>4 p;eEFZ1S>3m]|Nͯ5S|r{v=gKhD,*9#ryr D):"G4KPShfn'@iN[<T5vBz74{b- ):H@ 0U}l/PUÌnk=)b՚iKq8v9]HԁSMЛ91fIJ$ꧣ:\۝2lFio_}d9u[Kp[& g1~{𛗼l lz4%{#ZU_F(md9=ewWΡ4qPg%8L~gsk^+^˟f%m$_>.oڛc&^uYlNLz;؝9^ (~>׳{?ѻ;!5NT1̴AӍwU g(FNlcD[xshf~0[Rw!z D[ioMV2gHR|{`[s'`/{OB~;R -* z6J1,P"I*CR`,~pQy[aϪN1FӮKBըѯue2N{,6]t0q,s_%8 ` P\,|_!74Awo6 wvܼ/"(!*P-ЛB9> I$J ^ܙIߏ2$46mn?]l>s*k[n] xzr{?`@\ެCC{a~E~4D9bFz3YXRNep/q̹iwwVkS~ݔ7?fЏvZLXr fMqotks>[/hV}N_:ǎrP9гؿ)+ A1ߔ6|mj^ Ww9pYzΒ}63ydK{c@ͣky}pw>#7É{ ǩފZ?EWe:$;R4퉶FxrwKn䲒66_̻& X?\~jK/-j^cI1+ǩAO}~6=mq_)zI>gZZm|$@9v u kސ Q#GZz#3~-ο%F g ̫Flm$PWmty8@W`d Fk$2LK4q5@ϮoBl|~29 8ؤWuoI@8.Lnh~?[Gz+`߂ z8t{Oг筀rybNA=\τaN;IQL B:gW \}Ĺ= mU>sD9'Y#HDpZR5>~Pr<[k~nm3 L? {}R0WIoLV 'AS;cޜx i )"`'߿o7j쿪{ƽ+hu\j0ˣ_Pby!uAkp,yPw_ h,Nښ& #\ϊeہ|̬8}Kn>꽬дo5 .]0Tk]E9Bi"cXbNe ^lҾ%}'!pLI>)IӪʾ/`@oj}.M kitsx~=v24$FsR@ ?"/i@Ne q)h 2 ƀݗYRL> L;l?+0ZH3`+c7)>}> 1\g.7OB'Q!S6 +2$[)[OЛ_=ŷf?+uX )O& D8 M=|:Rde X9?jU2f?|DіG m_` YV=z:& f0~o$G}"6 -9M>C1@9Ϳ!9Cj+uX }n#L3 d@.=\SO"[> z+釽 Xfr>\.;؀]1+#)z{~g7/Ԋzpw4FɡxiUrP8V^R'8B0M8b]y3Z=Jqhoɿ5|6b4wg75ۀO"`n2B0-m,k9h\E"?KT@P  ZB]C^ef裟cEh|k{f n 0,{>H4ukQ[Ys0"tO4< ʜk-(‾)<zߒ?IJ# D:$v(r-ܻOܒW' f`X'Qp4B5oE]0lK6S O`TGPA2N0.e^O :PP2ï趭8 ZЫ[qh"1zfl~\QXwj{N شr7ow *mkci00Fk(wwQݲ}FIE?7k-f^t AA凵/}kN&AWbT}17Y|9I9||7w_u1UeVh?Oۀom_+~Z{ ؁o#&s:/[kUAX$6W)a\n>Yq"~r0mӧI >@s}. c@/@ &>6cj+0D#ɖYivE=ݿasBD@Ia?>s"Hw6 u84Ҽ`L*IL>qy@.svM~"r>> T6x Ƥ #gINW3=])(AP%@%\}jT-GOzpV3{1k|@@_L~V > qGS* K i}I Di+/ _gqk'u(R(of"5|I` 'm1@;h}pכP&?!i?Qa ~w`얂%!2 `T6R'"WY:<d#G濬h=uR7H ,sr[CjA|PV @wX"G`2g~nj:jBUg%NE1D͇ $2{h:/I+wfYRP"6 > tR`Eɓ-g}?گ h'Ϲw B1 q lIR~$tj6_+?S 3`7|h~[oA2#̐^UST!_%g`an@S2ڲ1hd?4ĩ q2Ɋ%<j[ J`R\il5Ynd(?TA@͇@`jZQ`d_i3Ý|6~˪R?LJk@"N"X3hUؒWb`mr8xXޚ+gwif= 4Ogh8I6]*R6Eڴd}'gmdIo-迬(@.^ᣃp}ZW e."o~|gqT^l`,ag`;L?Y8o~%)22zE 'eLF;0-ka蜙}iOHxc(+hkʽ΍6ퟏ@Ϯ jsSz %|!hh&Hq4G`'L?Z3wv,ZN\:V)ȣji^ZEYCdžҲˊ!u{4mXkV?z\unxtm6ug59p d}j7ۉݩ۴k @*2j%p.\B!h/Lw'.*|.*1, 9i =W .IBu8΀:lu۱%5*(~軐ML ᖎV[4@ k_Eo ȏ("d_?@&(vk ;& M oL$:H@o  z7.#oǸHcj9b|D|h jf?X# Elzeۜǜ6ǺT܁*457@Cc,\܁dUL0$*N~&~)A/9,6$(0=T'j+KݨC(룈 jD G lVI;h;W  s40c h]/J7R>@vquP#?S=(GD}3ѹ a$!{Dl pgpyx~.Y  ԍKڴPeQ[hK)Kq}6P=}9б0݁Tǟyv"0$p3~/$+Z`x;ڊ|\Z:P視F-ɇ+#0l.CD)3kjK޹;|`z뽵6ǤdjzB8QߦX) ݩo]o9ZW 72?<}{0x!޾6|-6@3 H 8p?iŠ`n6]N49 h,2j߶ԀOCo{@R`~owT;#O":2ۆnFiÓއ!}JP@7n3h=~Lr|w_0k/z?f0 >hL!AjjzkuUZ.;Q2Lamjxo)L~6璹FH̄16Ҥ&`tC}=o -}zOs~p"67@Y$;`lH܈}*G\&gX(n߿VB>J!*|/t-ʪ*J-w JȬ[)Л(rKih7i#iB?9eRӭťec?g<baow=P+(mU?csFt7wPoP2poAr\  p }ADܠ^[& `(}P6 ٗ y$IRm20+)^h -LBkژ#wU'?%fP45"YcO'^pm!X@i"KpKΞߡv|D(;U 22rk{WBߝ|p㵙n&جY--&[[@e@oM= a +?只J .8U >M鏸vE{>d$Zϝx?c(-(B2Q 4T` wv9]ZK8BGَ<RDuCrWg_@86f!>mRL$?s?z+܊৛}.u{.Qj\_pnF`e@O/ga}ZܝqеMF +HJF^5:C SAm{K4dW;f8^&̸w4@,o+TW'V/)ৢaZF~ Ņr{N-~Kp;\1)Z`R=λ;}AnD+@q22Z,/ kD~$*|!^Hh$dxg oYO34}=Jsl{2eg@УN[C(/`!<H!M +3%szN~~֖* $&xp ~ۜtD`3xlDS_9F0v,&S(_gn=ʐ)3=7'JirFG?ЋR\FBhp {r]ZQQ2Ne{vqoM6u RN<d%#7#K!d`fA> p8 dͤ'.qfu^c  APTSビnO 3 6l"eDa@LqAAnES?LOCSAw@#_ |rI{p<1 BDBD?UFP@ke>Z܃B2 Şie|3vػ؉7I뷨TH3οGqfAo]kꆡ.r~CP / UOlT}ݫkF%~QM"h~|w6*B^Vm<MHLF;R_GW +r7X[m2?!y fm*P>MҢ})-PUV6o9ZkMYNoWA:qڦ/(Y jށ/{FH̱4s,#U&npE[M>_ .co'界w @WՄ2Znz~6Og213;L\H+Ʊx⻽ \I&Oc=ʹ۫31ʸߞw")[#^ 7.rb(Q$vLS% OhݩWN㛤2&k[w:oHvZz`PJ%a1t | }犊*΋rxoL}U4H|Ib92ߣ>XmGiW1# [ ~eD1$VY @ caA\rٟ s_ﶋ ep۲8?n,׈`dJ8j1ssL fqtg4S܆5 >͜?q'sU~?,w-#31=7>*w: Z]TYIH̥J.W}!t.0M0dS0+uGpыîr ÂH"r,71ʴ󀧦67NLB8m4!7Dp,#hglwY{LTkkuUйZ%hKɩϑxĉa$! ٭CK˒F9zlM3 {A rxDCcn䡷G]NN[ 6((zbbs7~<!2#NEmCz' UP*Rb?4\N<#Q$ |̌S{M4J؅c`Q0AiL)dQ'P! LYV፦- SW<*n="<2􎟀@2?{!2"F|.\E 襁Ac}:{'~3tb6l{5vU}ڇFP:éTkIt=4'i<~̟!ZG# 2"&|nTE~WyW!8ʝx/'/=z'Mr7Q)1uCPUeߓ;s/=gb@ k@/]ތH#LrH}_-t޹wޏ#pm*~_ LJ)PG<~Lʗ*84r43p*/N{ :?%'n&1zƅA(;ĒGq>} Z2~tϻ :Gox'DuЛCiiq5'陚գc`ʞ"ɶ3j"<r!(ˈZ{ 3>_E8n F~Qx!=?[9}g\%~yPB(}wF_}^8 # PiZZN85:pDW0aI'umiQctG#)C;Hsv[uֽO}=;ᙻ~\6B _+MHzTFCе`J682 @Aww>Bm|=jd}n @Pգ Nv)|/r `CTnۚƒ4=hn#DN;o~6%@&&v[ϟҺkTUZ yZB fL!iF瀵5yصez^w](>!71 }EgHcvwGX`Vx6e QN-#hg\!'HpGPwa~N|vxs~(@JIw[fw}^܈;^c7R#G/ny9hKs9(\?.|Ce "b,ɜf @ٌ~n/> Dr3})v ;jΌ] Tiq}h41'[L4eg-۶A$P\(D ۈI. x@#`K *I){EhbB.BC)e][ :}vO7k8~j$Fu`f(Gc X=l}}Q ]zDe}5V!`Ľy/E )Q28Ob *ٸzʹ}eE_O(qY T]} H<Dzտ^DRgϿ'JҜoۡ4!~;huP 9d]ҹ}>S<Oq{^:7[zUU2Gvzkx/J/_8ɚ3uSPJgK.6 9߉r۞ KO$Q@V}m$8閭189@Nsf.ۿEW?g mnM헢̕Pb|ig/xpLiM}y -B@\WRbP[/׆$#@(QQ`"ѧ 1hrPNU\Ӏ:`kNKo:. \- /-&C ==4E)\pV#{ЮwHf#;~w `,Ut +(Hh{Sv7_⵨ n$' K^& _n+;/)jFO1~i[Ter(8vQH˧>U;? 8rB?XvC_On:4VwWq&4~ IsmJL(KQR [u46[@8*'d4?K;)^dت×G]]ġ?N߀pV3 /a=߀GC 5a5DI9E_,Ux;M_ҩ܍;oi^%#Oq~`M=ߟ14 K1cC"?MIPs[ŊW߿Sz0w-Rh [yR5IkG^im$gM%4dś]< TV}swS(_/{OǟNqx4-k;i 'tW9y#Tj~?S{u|?ȿT wo߇tsJN$ LɨRRϼoP:fC4\y=9+4 !`QQ@x;\Ҁ >Ul߽t|44?=fM*޼ݡ5dؼrhoaMS>h&ԀQ-td&rT,(gFLeԔN9EӬ5(讌s!d;h6r)`EIepޱ.~3 cU^  \E,i=}g-ZjOөw}ȈǫD/Yxf6@c`qZ"W@U=sQMڏ}IN y7oEGrWASGo״}u48_#f0b޶1)f_;V6 B+I᩺;믜lM ~Pnŝ@-GM9?M?@If|X&?*H?GiUN L߹7ی} xLVv0j8U <{i¶mLtOsȢ#vZ5Z m>(|[)ADʄ2&=’J)deIIs}n oo V QNNNNNO T^,Y<^T@H_SWURWVSWUSWU+.{^|!.!V^ZX U RONNNNP^%]>dQMZSRWVSWUTWVJN[MN^g9)ea`^\Y U QNNNNN[!b=hSK[SSWUKPZ25k.0}E@ת ū7t\jgfdc`]Y UPNNNNZ!e=iSGVV8;g47x2502=@`P=bP$n!l m kjhd`[ W RNNNN[$g=gTdS?H_NRXTVURWVSWUSVVk@@@=cP3g30}3~3~1|.y)t#nic^X RNNNb(h?bQPXTSWUSWUTVUSXTSWUoUUU M6XX2t7Ѓ7ς:҅:҅7ς3~-x&qke^X SNNNf+e@bPRXUSWUSWUSWUSWUSVVkN ;cY6ˀ<Ն>ՈA׋A֋<ӆ6̀/z(s me`Y TNNO i0aA`QRXUSWUTVUSWUTVUSVVeX=jY:ʁAڌEَJݒGܐA֋9Ђ0|)u!mf_Y TNN P!l4\D_QSWURXUSWUTVUSWUTWTXc~>gR<ȁEݑKޔQMߕC،:у1|)u!me`Y RNN T$m9uVA`QRVTyRVURXUSWUSWUUUU'n@`P)?dP;{JMTLߔA׋9Ђ0{(t ld^X RNNY$j=hR@`P>IIITWTISWUSWURVTz@`P;_R:lIMߕLޔGې>Ո6̀.y&r kc] V QNN_$d>cQ@`PUUUZZZCHHHHHHH ,1qbP`*%;k@y]K֏N9Ѓ.y)s"nhb\ W QNN Sc;kS@`PI`*%7jU=cPBrKޔ=ԇ*u#nid^Y TNNNW]>cQ@`P`+,@`P?aPf?nWA€Cٍ.z je`[ V QNNN['W=cP`+,@`P=cP@c<Ɂ8у#oa\ W RNNNO\8mR@`Pd`,+@`P;=cPdP7c,ui WPNNNN T%S=cPz+-*@`P?aPv=fR/a!j_ QNNNO T=dQ@`P 9````}z```_@`P=cP>eQ,[`YQNN P'{P>bP@`P>bP>dQ,VY V QP$P=cP @`P>bP>bP8lR+{R&~Q>bP@`P! @`P@`P0@`Pe>bP@`P        < <         @   ?     ?       03 x x x x x x x x x          ( @ -y]KC ,; C.umfvUVSRVVY]T25i %%n)6Iz  >g\KZQNURV\S47i.0H',f&V YPT UAdQ:Ce01.1tQUUrUVV#Ѥk lMNNPX,W:V_79mUYSSXV24tJ 7KdH W V QNNMT]aP!n jiga[ TNNNc\Nw,k'u)s'r"mg_ XPNNem@DaVZTRVVaSVVޏF؎Fۏ<҆0{%qf\ TM S*hD^QTWURWUTVUSWTWTVTk?fDPN>Շ1|%qe\ RM Y/bEVNRXVxRXUSWUSUT2r>9B4;`HݎOGې;҄/z#odZ QL_3[BDD%VWTSWU}}y]'>sJ}K>҈4~*v kaXPMb8sU9aM Z? d AgL<Ԇ+v#nf] UNOa@aQBiU azl>lQG~<؉'seaYPMR$[@[Nx>bP bd89<bP=dQEZPcD@`P>bP?*???? @@/ @ <@@@@(  }@z HRa.8   O^[#?o*~cQHJSLW4z)ߗ&(q3wQDL^)'MY;  SVVIOS5f_\UP"&{ M."`dXNS9~Y;6rVX,/2j,z%pa PS7rcTOQT\VV&'!'=~A׎/zf R WBqZTTTRWUgw,5_UgHͅL/zfPZDgVTWUvRVT` image/svg+xml zim-0.65/icons/zim32.png0000664000175000017500000000433412374655231014716 0ustar jaapjaap00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<YIDATXkl\s_]wuIHH B "@A"!R*UTR[!mRI!Ȕgh P(%Xy8ul;~ص1!đjι:#1,v w@֢R,Q2N{W(/xΏLa[b7+j1 eB-jQ$R_iDSC {C&'"[sKuԜWHJ$ qSnԊb~\SSjIבW_pE)M{[ ױs_4۲M5~0gc{_{ml_ޫA>IJv@7 w},'K/|hH:ۻ԰q\!M}3U:-1rͮ7n\>8L68,ssR?d}Mެ<¢g=ӧ`be3FYV%:Xyee4q֚Rv캤,4V:3]sM#Iy1:O7, +c16:%>?^EvyoM^gWZx9zdҚm3'`- aNm;fmy-ܥ(w Ewڼ7o - a84&;W1Һr=>aPʨ;;t9ppkzv]0RZk1$P3 S XNz;]|ѩ⥆9= 2c~z5){Ӌ/v~%pbmj 덕z=BFc , 3uJȁឿӳ;w&u< |o'fA^kI\)ɹ<Z%gO_sב5/7_6hc5>oj19K_'.%Z߿زf?6m6^ԃY?$獱~`>!D'0 F5Lu8*#WIENDB`zim-0.65/NOTES.txt0000664000175000017500000000010112375721741013547 0ustar jaapjaap00000000000000 Check what to do with the S5 template - single page export only zim-0.65/setup.py0000775000175000017500000002425412601443252013640 0ustar jaapjaap00000000000000#!/usr/bin/env python import os import sys import shutil import subprocess try: import py2exe except ImportError: py2exe = None from distutils.core import setup from distutils.command.sdist import sdist as sdist_class from distutils.command.build import build as build_class from distutils.command.build_scripts import build_scripts as build_scripts_class from distutils.command.install import install as install_class from distutils import cmd from distutils import dep_util from zim import __version__, __url__ import msgfmt # also distributed with zim import makeman # helper script try: version_info = sys.version_info assert version_info >= (2, 6) assert version_info < (3, 0) except: print >> sys.stderr, 'zim needs python >= 2.6 (but < 3.0)' sys.exit(1) # Get environment parameter for building for maemo # We don't use auto-detection here because we want to be able to # cross-compile a maemo package on another platform build_target = os.environ.get('ZIM_BUILD_TARGET') assert build_target in (None, 'maemo'), 'Unknown value for ZIM_BUILD_TARGET: %s' % build_target if build_target == 'maemo': print 'Building for Maemo...' # Some constants PO_FOLDER = 'translations' LOCALE_FOLDER = 'locale' # Helper routines def collect_packages(): # Search for python packages below zim/ packages = [] for dir, dirs, files in os.walk('zim'): if '__init__.py' in files: package = '.'.join(dir.split(os.sep)) packages.append(package) #~ print 'Pakages: ', packages return packages def get_mopath(pofile): # Function to determine right locale path for a .po file lang = os.path.basename(pofile)[:-3] # len('.po') == 3 modir = os.path.join(LOCALE_FOLDER, lang, 'LC_MESSAGES') mofile = os.path.join(modir, 'zim.mo') return modir, mofile def include_file(file): # Check to exclude hidden and temp files if file.startswith('.'): return False else: for ext in ('~', '.bak', '.swp', '.pyc'): if file.endswith(ext): return False return True def collect_data_files(): # Search for data files to be installed in share/ data_files = [ ('share/man/man1', ['man/zim.1']), ('share/applications', ['xdg/zim.desktop']), ('share/mime/packages', ['xdg/zim.xml']), ('share/pixmaps', ['xdg/hicolor/48x48/apps/zim.png']), ('share/appdata', ['xdg/zim.appdata.xml']), ] # xdg/hicolor -> PREFIX/share/icons/hicolor for dir, dirs, files in os.walk('xdg/hicolor'): if files: target = os.path.join('share', 'icons', dir[4:]) files = [os.path.join(dir, f) for f in files] data_files.append((target, files)) # mono icons -> PREFIX/share/icons/ubuntu-mono-light | -dark for theme in ('ubuntu-mono-light', 'ubuntu-mono-dark'): file = os.path.join('icons', theme, 'zim-panel.svg') target = os.path.join('share', 'icons', theme, 'apps', '22') data_files.append((target, [file])) # data -> PREFIX/share/zim for dir, dirs, files in os.walk('data'): if '.zim' in dirs: dirs.remove('.zim') target = os.path.join('share', 'zim', dir[5:]) if files: files = filter(include_file, files) files = [os.path.join(dir, f) for f in files] data_files.append((target, files)) if build_target == 'maemo': # Remove default .desktop files and replace with our set prefix = os.path.join('share', 'zim', 'applications') for i in reversed(range(len(data_files))): if data_files[i][0].startswith(prefix): data_files.pop(i) files = ['maemo/applications/%s' % f for f in os.listdir('maemo/applications') if f.endswith('.desktop')] data_files.append((prefix, files)) # .po files -> PREFIX/share/locale/.. for pofile in [f for f in os.listdir(PO_FOLDER) if f.endswith('.po')]: pofile = os.path.join(PO_FOLDER, pofile) modir, mofile = get_mopath(pofile) target = os.path.join('share', modir) data_files.append((target, [mofile])) #~ import pprint #~ print 'Data files: ' #~ pprint.pprint(data_files) return data_files def fix_dist(): # Try to update version info if os.path.exists('.bzr/'): print 'updating bzr version-info...' os.system('bzr version-info --format python > zim/_version.py') # Generate man page makeman.make() # Add the changelog to the manual # print 'copying CHANGELOG.txt -> data/manual/Changelog.txt' # shutil.copy('CHANGELOG.txt', 'data/manual/Changelog.txt') # Copy the zim icons a couple of times # Paths for mimeicons taken from xdg-icon-resource # xdg-icon-resource installs: # /usr/local/share/icons/hicolor/.../mimetypes/gnome-mime-application-x-zim-notebook.png # /usr/local/share/icons/hicolor/.../mimetypes/application-x-zim-notebook.png # /usr/local/share/icons/hicolor/.../apps/zim.png if os.path.exists('xdg/hicolor'): shutil.rmtree('xdg/hicolor') os.makedirs('xdg/hicolor/scalable/apps') os.makedirs('xdg/hicolor/scalable/mimetypes') for name in ( 'apps/zim.svg', 'mimetypes/gnome-mime-application-x-zim-notebook.svg', 'mimetypes/application-x-zim-notebook.svg' ): shutil.copy('icons/zim48.svg', 'xdg/hicolor/scalable/' + name) for size in ('16', '22', '24', '32', '48'): dir = size + 'x' + size os.makedirs('xdg/hicolor/%s/apps' % dir) os.makedirs('xdg/hicolor/%s/mimetypes' % dir) for name in ( 'apps/zim.png', 'mimetypes/gnome-mime-application-x-zim-notebook.png', 'mimetypes/application-x-zim-notebook.png' ): shutil.copy('icons/zim%s.png' % size, 'xdg/hicolor/' + dir + '/' + name) # Overloaded commands class zim_sdist_class(sdist_class): # Command to build source distribution # make sure _version.py gets build and included def initialize_options(self): sdist_class.initialize_options(self) self.force_manifest = 1 # always re-generate MANIFEST def run(self): fix_dist() sdist_class.run(self) class zim_build_trans_class(cmd.Command): # Compile mo files description = 'Build translation files' user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): for pofile in [f for f in os.listdir(PO_FOLDER) if f.endswith('.po')]: pofile = os.path.join(PO_FOLDER, pofile) modir, mofile = get_mopath(pofile) if not os.path.isdir(modir): os.makedirs(modir) if not os.path.isfile(mofile) or dep_util.newer(pofile, mofile): print 'compiling %s' % mofile msgfmt.make(pofile, mofile) else: #~ print 'skipping %s - up to date' % mofile pass class zim_build_scripts_class(build_scripts_class): # Adjust bin/zim.py -> bin/zim def run(self): build_scripts_class.run(self) if os.name == 'posix' and not self.dry_run: for script in self.scripts: if script.endswith('.py'): file = os.path.join(self.build_dir, script) print 'renaming %s to %s' % (file, file[:-3]) os.rename(file, file[:-3]) # len('.py') == 3 class zim_build_class(build_class): # Generate _version.py etc. and call build_trans as a subcommand # Also set PLATFORM in zim/__init__.py # And put list of default plugins in zim/plugins/__init__.py sub_commands = build_class.sub_commands + [('build_trans', None)] def run(self): fix_dist() build_class.run(self) file = os.path.join(self.build_lib, 'zim', '__init__.py') print 'Setting PLATFORM in %s' % file assert os.path.isfile(file) fh = open(file) lines = fh.readlines() fh.read() for i, line in enumerate(lines): if line.startswith('PLATFORM = '): if build_target is None: lines[i] = 'PLATFORM = None\n' else: lines[i] = 'PLATFORM = "%s"\n' % build_target break else: assert False, 'Missed line for PLATFORM' fh = open(file, 'w') fh.writelines(lines) fh.close() ## Set default plugins plugins = [] for name in os.listdir('./zim/plugins'): if name.startswith('_') or name == 'base': continue elif '.' in name: if name.endswith('.py'): name, x = name.rsplit('.', 1) plugins.append(name) else: continue else: plugins.append(name) assert len(plugins) > 20, 'Did not find plugins' file = os.path.join(self.build_lib, 'zim', 'plugins', '__init__.py') print 'Setting plugin list in %s' % file assert os.path.isfile(file) fh = open(file) lines = fh.readlines() fh.read() for i, line in enumerate(lines): if line.startswith('\t\tplugins = set('): lines[i] = '\t\tplugins = set(%r) # DEFAULT PLUGINS COMPILED IN BY SETUP.PY\n' % plugins break else: assert False, 'Missed line for plugin list' fh = open(file, 'w') fh.writelines(lines) fh.close() class zim_install_class(install_class): user_options = install_class.user_options + \ [('skip-xdg-cmd', None, "don't run XDG update commands (for packaging)")] boolean_options = install_class.boolean_options + \ ['skip-xdg-cmd'] def initialize_options(self): install_class.initialize_options(self) self.skip_xdg_cmd = 0 def run(self): install_class.run(self) if not self.skip_xdg_cmd: # Try XDG tools mimedir = os.path.join(self.install_data, 'share', 'mime') for cmd in ( ('update-desktop-database',), ('update-mime-database', mimedir), ): print 'Trying: ' + ' '.join(cmd) subprocess.call(cmd) # Distutils parameters, and main function dependencies = ['gobject', 'gtk', 'xdg'] if version_info == (2, 5): dependencies.append('simplejson') if build_target == 'maemo': scripts = ['zim.py', 'maemo/modest-mailto.sh'] else: scripts = ['zim.py'] if py2exe: py2exeoptions = { 'windows': [ { "script": "zim.py", "icon_resources": [(1, "icons/zim.ico")] # Windows 16x16, 32x32, and 48x48 icon based on PNG } ], 'zipfile': None, 'options': { "py2exe": { "compressed": 1, "optimize": 2, "ascii": 1, "bundle_files": 3, "packages": ["encodings", "cairo", "atk", "pangocairo", "zim"], "dll_excludes": { "DNSAPI.DLL" } } } } else: py2exeoptions = {} setup( # wire overload commands cmdclass = { 'sdist': zim_sdist_class, 'build': zim_build_class, 'build_trans': zim_build_trans_class, 'build_scripts': zim_build_scripts_class, 'install': zim_install_class, }, # provide package properties name = 'zim', version = __version__, description = 'Zim desktop wiki', author = 'Jaap Karssenberg', author_email = 'jaap.karssenberg@gmail.com', license = 'GPL v2+', url = __url__, scripts = scripts, packages = collect_packages(), data_files = collect_data_files(), requires = dependencies, **py2exeoptions ) zim-0.65/msgfmt.py0000664000175000017500000001411212374655231013773 0ustar jaapjaap00000000000000# -*- coding: iso-8859-1 -*- # Written by Martin v. Lwis # Plural forms support added by alexander smishlajev """ Generate binary message catalog from textual translation description. This program converts a textual Uniforum-style message catalog (.po file) into a binary GNU catalog (.mo file). This is essentially the same function as the GNU msgfmt program, however, it is a simpler implementation. Usage: msgfmt.py [OPTIONS] filename.po Options: -o file --output-file=file Specify the output file to write to. If omitted, output will go to a file named filename.mo (based off the input file name). -h --help Print this message and exit. -V --version Display version information and exit. """ import sys import os import getopt import struct import array __version__ = "1.1" MESSAGES = {} def usage (ecode, msg=''): """ Print usage and msg and exit with given code. """ print >> sys.stderr, __doc__ if msg: print >> sys.stderr, msg sys.exit(ecode) def add (msgid, transtr, fuzzy): """ Add a non-fuzzy translation to the dictionary. """ global MESSAGES if not fuzzy and transtr and not transtr.startswith('\0'): MESSAGES[msgid] = transtr def generate (): """ Return the generated output. """ global MESSAGES keys = MESSAGES.keys() # the keys are sorted in the .mo file keys.sort() offsets = [] ids = strs = '' for _id in keys: # For each string, we need size and file offset. Each string is NUL # terminated; the NUL does not count into the size. offsets.append((len(ids), len(_id), len(strs), len(MESSAGES[_id]))) ids += _id + '\0' strs += MESSAGES[_id] + '\0' # The header is 7 32-bit unsigned integers. We don't use hash tables, so # the keys start right after the index tables. # translated string. keystart = 7*4+16*len(keys) # and the values start after the keys valuestart = keystart + len(ids) koffsets = [] voffsets = [] # The string table first has the list of keys, then the list of values. # Each entry has first the size of the string, then the file offset. for o1, l1, o2, l2 in offsets: koffsets += [l1, o1+keystart] voffsets += [l2, o2+valuestart] offsets = koffsets + voffsets output = struct.pack("Iiiiiii", 0x950412deL, # Magic 0, # Version len(keys), # # of entries 7*4, # start of key index 7*4+len(keys)*8, # start of value index 0, 0) # size and offset of hash table output += array.array("i", offsets).tostring() output += ids output += strs return output def make (filename, outfile): ID = 1 STR = 2 global MESSAGES MESSAGES = {} # Compute .mo name from .po name and arguments if filename.endswith('.po'): infile = filename else: infile = filename + '.po' if outfile is None: outfile = os.path.splitext(infile)[0] + '.mo' try: lines = open(infile).readlines() except IOError, msg: print >> sys.stderr, msg sys.exit(1) section = None fuzzy = 0 # Parse the catalog msgid = msgstr = '' lno = 0 for l in lines: lno += 1 # If we get a comment line after a msgstr, this is a new entry if l[0] == '#' and section == STR: add(msgid, msgstr, fuzzy) section = None fuzzy = 0 # Record a fuzzy mark if l[:2] == '#,' and (l.find('fuzzy') >= 0): fuzzy = 1 # Skip comments if l[0] == '#': continue # Start of msgid_plural section, separate from singular form with \0 if l.startswith('msgid_plural'): msgid += '\0' l = l[12:] # Now we are in a msgid section, output previous section elif l.startswith('msgid'): if section == STR: add(msgid, msgstr, fuzzy) section = ID l = l[5:] msgid = msgstr = '' # Now we are in a msgstr section elif l.startswith('msgstr'): section = STR l = l[6:] # Check for plural forms if l.startswith('['): # Separate plural forms with \0 if not l.startswith('[0]'): msgstr += '\0' # Ignore the index - must come in sequence l = l[l.index(']') + 1:] # Skip empty lines l = l.strip() if not l: continue # XXX: Does this always follow Python escape semantics? l = eval(l) if section == ID: msgid += l elif section == STR: msgstr += l else: print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \ 'before:' print >> sys.stderr, l sys.exit(1) # Add last entry if section == STR: add(msgid, msgstr, fuzzy) # Compute output output = generate() try: open(outfile,"wb").write(output) except IOError,msg: print >> sys.stderr, msg def main (): try: opts, args = getopt.getopt(sys.argv[1:], 'hVo:', ['help', 'version', 'output-file=']) except getopt.error, msg: usage(1, msg) outfile = None # parse options for opt, arg in opts: if opt in ('-h', '--help'): usage(0) elif opt in ('-V', '--version'): print >> sys.stderr, "msgfmt.py", __version__ sys.exit(0) elif opt in ('-o', '--output-file'): outfile = arg # do it if not args: print >> sys.stderr, 'No input file given' print >> sys.stderr, "Try `msgfmt --help' for more information." return for filename in args: make(filename, outfile) if __name__ == '__main__': main() zim-0.65/data/0000775000175000017500000000000012615422672013035 5ustar jaapjaap00000000000000zim-0.65/data/menubar.xml0000664000175000017500000001701212374655231015212 0ustar jaapjaap00000000000000

    zim-0.65/data/urls.list0000664000175000017500000001267212374655231014730 0ustar jaapjaap00000000000000# This file is adapted from 'interwiki.conf' from the dokuwiki package # Each URL may contain one of the placeholders {URL} or {NAME} # {URL} is replaced by the URL encoded representation of the wikiname # this is the right thing to do in most cases # {NAME} this is replaced by the wikiname as given in the document # no further encoding is done # If no placeholder is defined the urlencoded name is appended to the URL # You can add more InterWiki shortcuts here. wp http://en.wikipedia.org/wiki/ wpde http://de.wikipedia.org/wiki/ wpmeta http://meta.wikipedia.org/wiki/ doku http://wiki.splitbrain.org/ freecache http://freecache.org/{NAME} rfc http://www.ietf.org/rfc/rfc{NAME}.txt amazon http://www.amazon.com/exec/obidos/ASIN/ amazon.de http://www.amazon.de/exec/obidos/ASIN/{URL}/ballermannsyndic/ amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/ google http://www.google.com/search?q= google.de http://www.google.de/search?q= phpfn http://www.php.net/{NAME} go http://www.google.com/search?q={URL}&btnI=lucky cpan http://search.cpan.org/search?query={URL}&mode=all perldoc http://perldoc.perl.org/search.html?q= # Standards from http://usemod.com/intermap.txt follow AbbeNormal http://www.ourpla.net/cgi-bin/pikie.cgi? AcadWiki http://xarch.tu-graz.ac.at/autocad/wiki/ Acronym http://www.acronymfinder.com/af-query.asp?String=exact&Acronym= Advogato http://www.advogato.org/ AIWiki http://www.ifi.unizh.ch/ailab/aiwiki/aiw.cgi? ALife http://news.alife.org/wiki/index.php? AndStuff http://andstuff.org/wiki.php? Annotation http://bayle.stanford.edu/crit/nph-med.cgi/ AnnotationWiki http://www.seedwiki.com/page.cfm?wikiid=368&doc= AwarenessWiki http://taoriver.net/aware/ BenefitsWiki http://www.benefitslink.com/cgi-bin/wiki.cgi? BridgesWiki http://c2.com/w2/bridges/ C2find http://c2.com/cgi/wiki?FindPage&value= Cache http://www.google.com/search?q=cache: CLiki http://ww.telent.net/cliki/ CmWiki http://www.ourpla.net/cgi-bin/wiki.pl? CreationMatters http://www.ourpla.net/cgi-bin/wiki.pl? DejaNews http://www.deja.com/=dnc/getdoc.xp?AN= DeWikiPedia http://www.wikipedia.de/wiki.cgi? Dictionary http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query= DiveIntoOsx http://diveintoosx.org/ DocBook http://docbook.org/wiki/moin.cgi/ DolphinWiki http://www.object-arts.com/wiki/html/Dolphin/ EfnetCeeWiki http://purl.net/wiki/c/ EfnetCppWiki http://purl.net/wiki/cpp/ EfnetPythonWiki http://purl.net/wiki/python/ EfnetXmlWiki http://purl.net/wiki/xml/ EljWiki http://elj.sourceforge.net/phpwiki/index.php/ EmacsWiki http://www.emacswiki.org/cgi-bin/wiki.pl? FinalEmpire http://final-empire.sourceforge.net/cgi-bin/wiki.pl? Foldoc http://www.foldoc.org/foldoc/foldoc.cgi? FoxWiki http://fox.wikis.com/wc.dll?Wiki~ FreeBSDman http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query= Google http://www.google.com/search?q= GoogleGroups http://groups.google.com/groups?q= GreenCheese http://www.greencheese.org/ HammondWiki http://www.dairiki.org/HammondWiki/index.php3? Haribeau http://wiki.haribeau.de/cgi-bin/wiki.pl? IAWiki http://www.IAwiki.net/ IMDB http://us.imdb.com/Title? JargonFile http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect= JiniWiki http://www.cdegroot.com/cgi-bin/jini? JspWiki http://www.ecyrd.com/JSPWiki/Wiki.jsp?page= KmWiki http://www.voght.com/cgi-bin/pywiki? KnowHow http://www2.iro.umontreal.ca/~paquetse/cgi-bin/wiki.cgi? LanifexWiki http://opt.lanifex.com/cgi-bin/wiki.pl? LegoWiki http://www.object-arts.com/wiki/html/Lego-Robotics/ LinuxWiki http://www.linuxwiki.de/ LugKR http://lug-kr.sourceforge.net/cgi-bin/lugwiki.pl? MathSongsWiki http://SeedWiki.com/page.cfm?wikiid=237&doc= MbTest http://www.usemod.com/cgi-bin/mbtest.pl? MeatBall http://www.usemod.com/cgi-bin/mb.pl? MetaWiki http://sunir.org/apps/meta.pl? MetaWikiPedia http://meta.wikipedia.com/wiki/ MoinMoin http://purl.net/wiki/moin/ MuWeb http://www.dunstable.com/scripts/MuWebWeb? NetVillage http://www.netbros.com/? OpenWiki http://openwiki.com/? OrgPatterns http://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns? PangalacticOrg http://www.pangalactic.org/Wiki/ PersonalTelco http://www.personaltelco.net/index.cgi/ PhpWiki http://phpwiki.sourceforge.net/phpwiki/ Pikie http://pikie.darktech.org/cgi/pikie? PPR http://c2.com/cgi/wiki? PurlNet http://purl.oclc.org/NET/ PythonInfo http://www.python.org/cgi-bin/moinmoin/ PythonWiki http://www.pythonwiki.de/ PyWiki http://www.voght.com/cgi-bin/pywiki? SeaPig http://www.seapig.org/ SeattleWireless http://seattlewireless.net/? SenseisLibrary http://senseis.xmp.net/? Shakti http://cgi.algonet.se/htbin/cgiwrap/pgd/ShaktiWiki/ SourceForge http://sourceforge.net/ Squeak http://minnow.cc.gatech.edu/squeak/ StrikiWiki http://ch.twi.tudelft.nl/~mostert/striki/teststriki.pl? SVGWiki http://www.protocol7.com/svg-wiki/default.asp? Tavi http://tavi.sourceforge.net/index.php? TmNet http://www.technomanifestos.net/? TMwiki http://www.EasyTopicMaps.com/?page= TWiki http://twiki.org/cgi-bin/view/ TwistedWiki http://purl.net/wiki/twisted/ Unreal http://wiki.beyondunreal.com/wiki/ UseMod http://www.usemod.com/cgi-bin/wiki.pl? VisualWorks http://wiki.cs.uiuc.edu/VisualWorks/ WebDevWikiNL http://www.promo-it.nl/WebDevWiki/index.php?page= WebSeitzWiki http://webseitz.fluxent.com/wiki/ Why http://clublet.com/c/c/why? Wiki http://c2.com/cgi/wiki? WikiPedia http://www.wikipedia.com/wiki/ WikiWorld http://WikiWorld.com/wiki/index.php/ YpsiEyeball http://sknkwrks.dyndns.org:1957/writewiki/wiki.pl? ZWiki http://www.zwiki.org/ zim-0.65/data/symbols.list0000664000175000017500000001341312417006061015412 0ustar jaapjaap00000000000000## Entity table copied from the HTML::Entities perl module by Gisle Aas ## # Some normal chars that have special meaning in SGML context #amp 38 # ampersand #gt 62 # greater than #lt 60 # less than #quot 34 # double quote #apos 39 # single quote # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML \AElig 198 # capital AE diphthong (ligature) \Aacute 193 # capital A, acute accent \Acirc 194 # capital A, circumflex accent \Agrave 192 # capital A, grave accent \Aring 197 # capital A, ring \Atilde 195 # capital A, tilde \Auml 196 # capital A, dieresis or umlaut mark \Ccedil 199 # capital C, cedilla \ETH 208 # capital Eth, Icelandic \Eacute 201 # capital E, acute accent \Ecirc 202 # capital E, circumflex accent \Egrave 200 # capital E, grave accent \Euml 203 # capital E, dieresis or umlaut mark \Iacute 205 # capital I, acute accent \Icirc 206 # capital I, circumflex accent \Igrave 204 # capital I, grave accent \Iuml 207 # capital I, dieresis or umlaut mark \Ntilde 209 # capital N, tilde \Oacute 211 # capital O, acute accent \Ocirc 212 # capital O, circumflex accent \Ograve 210 # capital O, grave accent \Oslash 216 # capital O, slash \Otilde 213 # capital O, tilde \Ouml 214 # capital O, dieresis or umlaut mark \THORN 222 # capital THORN, Icelandic \Uacute 218 # capital U, acute accent \Ucirc 219 # capital U, circumflex accent \Ugrave 217 # capital U, grave accent \Uuml 220 # capital U, dieresis or umlaut mark \Yacute 221 # capital Y, acute accent \aacute 225 # small a, acute accent \acirc 226 # small a, circumflex accent \aelig 230 # small ae diphthong (ligature) \agrave 224 # small a, grave accent \aring 229 # small a, ring \atilde 227 # small a, tilde \auml 228 # small a, dieresis or umlaut mark \ccedil 231 # small c, cedilla \eacute 233 # small e, acute accent \ecirc 234 # small e, circumflex accent \egrave 232 # small e, grave accent \eth 240 # small eth, Icelandic \euml 235 # small e, dieresis or umlaut mark \iacute 237 # small i, acute accent \icirc 238 # small i, circumflex accent \igrave 236 # small i, grave accent \iuml 239 # small i, dieresis or umlaut mark \ntilde 241 # small n, tilde \oacute 243 # small o, acute accent \ocirc 244 # small o, circumflex accent \ograve 242 # small o, grave accent \oslash 248 # small o, slash \otilde 245 # small o, tilde \ouml 246 # small o, dieresis or umlaut mark \szlig 223 # small sharp s, German (sz ligature) \thorn 254 # small thorn, Icelandic \uacute 250 # small u, acute accent \ucirc 251 # small u, circumflex accent \ugrave 249 # small u, grave accent \uuml 252 # small u, dieresis or umlaut mark \yacute 253 # small y, acute accent \yuml 255 # small y, dieresis or umlaut mark # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96) \copy 169 # copyright sign \reg 174 # registered sign \nbsp 160 # non breaking space # Additional ISO-8859/1 entities listed in rfc1866 (section 14) \iexcl 161 \cent 162 \pound 163 \curren 164 \yen 165 \brvbar 166 \sect 167 \uml 168 \ordf 170 \laquo 171 \not 172 \shy 173 \macr 175 \deg 176 \plusmn 177 \sup1 185 \sup2 178 \sup3 179 \acute 180 \micro 181 \para 182 \middot 183 \cedil 184 \ordm 186 \raquo 187 \frac14 188 \frac12 189 \frac34 190 \iquest 191 \times 215 \divide 247 \OElig 338 \oelig 339 \Scaron 352 \scaron 353 \Yuml 376 \fnof 402 \circ 710 \tilde 732 \Alpha 913 \Beta 914 \Gamma 915 \Delta 916 \Epsilon 917 \Zeta 918 \Eta 919 \Theta 920 \Iota 921 \Kappa 922 \Lambda 923 \Mu 924 \Nu 925 \Xi 926 \Omicron 927 \Pi 928 \Rho 929 \Sigma 931 \Tau 932 \Upsilon 933 \Phi 934 \Chi 935 \Psi 936 \Omega 937 \alpha 945 \beta 946 \gamma 947 \delta 948 \epsilon 949 \zeta 950 \eta 951 \theta 952 \iota 953 \kappa 954 \lambda 955 \mu 956 \nu 957 \xi 958 \omicron 959 \pi 960 \rho 961 \sigmaf 962 \sigma 963 \tau 964 \upsilon 965 \phi 966 \chi 967 \psi 968 \omega 969 \thetasym 977 \upsih 978 \piv 982 \ensp 8194 \emsp 8195 \thinsp 8201 \zwnj 8204 \zwj 8205 \lrm 8206 \rlm 8207 \ndash 8211 \mdash 8212 \lsquo 8216 \rsquo 8217 \sbquo 8218 \ldquo 8220 \rdquo 8221 \bdquo 8222 \dagger 8224 \Dagger 8225 \bull 8226 \hellip 8230 \permil 8240 \prime 8242 \Prime 8243 \lsaquo 8249 \rsaquo 8250 \oline 8254 \frasl 8260 \euro 8364 \image 8465 \weierp 8472 \real 8476 \trade 8482 \alefsym 8501 \larr 8592 \uarr 8593 \rarr 8594 \darr 8595 \harr 8596 \crarr 8629 \lArr 8656 \uArr 8657 \rArr 8658 \dArr 8659 \hArr 8660 \forall 8704 \part 8706 \exist 8707 \empty 8709 \nabla 8711 \isin 8712 \notin 8713 \ni 8715 \prod 8719 \sum 8721 \minus 8722 \lowast 8727 \radic 8730 \prop 8733 \infin 8734 \ang 8736 \and 8743 \or 8744 \cap 8745 \cup 8746 \int 8747 \there4 8756 \sim 8764 \cong 8773 \asymp 8776 \ne 8800 \equiv 8801 \le 8804 \ge 8805 \sub 8834 \sup 8835 \nsub 8836 \sube 8838 \supe 8839 \oplus 8853 \otimes 8855 \perp 8869 \sdot 8901 \lceil 8968 \rceil 8969 \lfloor 8970 \rfloor 8971 \lang 9001 \rang 9002 \loz 9674 \spades 9824 \clubs 9827 \hearts 9829 \diams 9830 ## Additional shortcuts ## \pm 177 # +- sign \neq 8800 # not equal to sign (may also use =/= ) ## Some arrows ## \left 8592 \up 8593 \right 8594 \down 8595 ## units ## \ohm 937 # same as \omega ## Additional typography ## # See http://en.wikipedia.org/wiki/Arrow_%28symbol%29 for more codes # convert hex -> decimal before using here --> 8594 # same as \right <-- 8592 # same as \left <-> 8596 <--> 8596 ==> 8658 <=> 8660 <==> 8660 <== 8656 -- 8212 # em dash aka — in HTML =/= 8800 # not equal to sign (may also use \neq) +- 177 # +- sign +_ 177 # +- sign <3 9825 # Heart empty \music 9835 # Beamed Eighth Notes \warn 9888 # Warning :) 9786 # Smiley - have a nice day! \smile 9786 # Smiley - have a nice day! \mail 9993 # Envelope - Mail \tel 9990 # Telephone Sign \phone 9990 # Telephone Sign \flag 9873 # Black Flag ## Suggestions for more shortcuts are welcome - please file in bug tracker ## zim-0.65/data/pixmaps/0000775000175000017500000000000012615422672014516 5ustar jaapjaap00000000000000zim-0.65/data/pixmaps/insert-table.png0000664000175000017500000000345712521361062017615 0ustar jaapjaap00000000000000PNG  IHDRw= cHRMz&u0`:pQ<bKGDtIME22?zTXtRaw profile type exifxu 0 {MQ8! 㧰5$+s_EDD+Q[ϑ #@A ]nMW{uq{o0TϞWֲ晧tslB;`|_?+,қ%IDATHk\[?יɜ43;m$$M4MۛAzP-Q|ЧVP(*Wz/U$iMҖ44$̙̙}7E_]؛k}w{ߘwBZ{&w80DI1tO% B1ιCOq@мy&`/Hd ݓ~:VKDlʋMzzzBh4d2!RA >Z77Z+<+<{Ȥ$%4uN*%3DQ\.R(( (t: jN#L}l~mOǓpKE4 t: @>j)%V )%ι#HuЫb3^҈$o){LL3442xǣG8w<߿OTB)u` vjMYןs\B<})%;;;<~!;;; Va9`;. yFp 3Hǭ[fLNN.\<0իWhTKH5.7=P(P*MRAJ)j/^@)E@k}A88!0ƣӉd2(}|>5ZkRXk1 cgOy{*TŷcM(l6REa{hf rJArcZyw ;ѱя>b%N344DZejj 5KKK?XXXwX}+1<,-aϞ[9lсKvQRakkggتmJ{dNӎ%۵m$ gcg7)vi"'N`ff/嘝ennBxj B' ;A۵4[-6+z*@ιfI$qVsJYk]ZuJu]D^=ʍ- &5ŷ/~'{s?l!DF^klll8vRJqΡbmmB ]N:=?x򧅔0gwC 7nh?OWgB4 Tu_{}-6?>ɕK^RK/Xꨬo+|@YvC5lݜv#%tEXtdate:create2015-02-02T22:50:13+01:00w+_%tEXtdate:modify2015-02-02T22:50:13+01:00"tEXtexif:ExifImageLength48fputEXtexif:ExifImageWidth48tEXtexif:ExifOffset667wgatEXtexif:SoftwareShotwell 0.20.1PIENDB`zim-0.65/data/pixmaps/linkmap.png0000664000175000017500000000246212374655231016664 0ustar jaapjaap00000000000000PNG  IHDR@@iqsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxkW?'fw6F EZ?PObH[JBO}Z'EZgSjmTPY#&槻0;͏ٹ;)s~sι\QU>z\77DM jԖ2fFGY?5iβ8vmDiߧ޽N66o} 5{J?֬!gY$V%j3)o^#.'}[9qcI߆ ; +^TꛕZq6[,^`FVdw1[-4>zxT"T 0"|`SHE=F7؞uہ)R@(@|=Ȯ0D(txojP!5L!> _mSYXk@E@TUD~{aEwR,uu{Zw?"WlغY5pSd0 6M‡֪G+yU8tnHq ruNLw0"1})zq ZX"zO}AN8זۘY:2lтp &_$=b*7N\voLWu_| زUFyVR^O ,1(p(sPF8go|<|]n΀Hoѷ܏]*`8`>׮Qn鬁 -n 8 RzzzR1o'ykH_쫔Qi":t֭ar5"@ggD"zӢ0}4@ݻly Tmm!2*q}lɆ,j +VاQx)M2L @Q)D иE"  E0)Pb\M(HDW[a"#!qֳXi[m{O] S^\le1ZlJ,5hU  4. "CA[AXA1/-HEy0%R6sיCq[6x&hnLMhƄ}M KFK""2<>7xm?݌ZOa4_T[Re SLLL)RcbݳK?c !B%sdz_1;;Ν;<4Mm$՛QJ)QuCq`f l<42!8L[Ȝ-[HE,D-?#M@Kbm!˴3JfۅlU+H2=i#PJjCexԯ"ٮwn h4VLNlAySC#Gw76r"X=# B˻s%+vٵ%{CT0K./e ؜!#BO(x..MTѻ]])Sc eYlsƲQ$NѣGocV'B7ϖ X.XUfeQPli4r?A(ģ׮`xxQZfs? !jexK'oIENDB`zim-0.65/data/pixmaps/task-list.png0000664000175000017500000000152512374655231017143 0ustar jaapjaap00000000000000PNG  IHDRw=bKGD pHYs  ~tIME >tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDATxŖ?LQ3 .^c@W j#7C4P4jcgbbPO JOl J+(LѨ;o9۷o7 ll@j^, ^j&dk rgL&9n<{ր߻/+BX,J>P6s?b5jo?IFr\zzz}]렽oUlv$ZXi3 ayyAEHQT#THR QAL@TP@EAD0u%"D9: RI6'()Z?= e#0s>Bft D|Y[!r834ROZ\`c|||UTZd\kqwzD;=Q:c灥8TFc /i?NvZhg9:OV. ισFB/LoxWWl{Qą  AB aθ|DU˰Ne5#$h^EP6Cj6K 9 H+2GL2M C Hj zp# z= 8R?|$V[oi?^SaIENDB`zim-0.65/data/pixmaps/xchecked-box.png0000664000175000017500000000232012374655231017566 0ustar jaapjaap00000000000000PNG  IHDRw=sRGBbKGD pHYs : ߸tIME  LtEXtCommentCreated with GIMPW+IDATHՕKhSY&5Lf"eꣵ݉LW7Ju\ƥ .*.lt!R\ZpჂH}Z3Z4m̢ cktFp3[=̀x'}Cp7I(:V]P p  t+@HUgϖth?Z[+R.ӜL>>N _J;M{2&]0BQj[^&ew0 Í*A$aKBai{w7z,a۬%r:"+d3>t /MM$΢9J=5e$ aد^?wl&@Zc#mmpjlȱ@/>9Ia`c ǡ H==$#>6E|JklcONxݻ|,@(՞=dQ5&n)BvEEqXxϳp>F$"D/\DjA%m8AHЀ4012I6% e q ծY˅4\"6)@c1NBmmE>jH9B]g'nhBx~ԭ[d]@ O(W:ْmu ktgq!8AU!ҥ/ˬ ( 6B?}Kd&v>f## a^nt FH4J--_&󴍍7 EP7m" dY͛lŘܽiH"u33d@BcDVBԟvϷì;~f!P,7lxza';?vi ( ?hIJIV9n2R"Y 45w,~b<FEƎ ˅8H ?K\8l}ۮ TjM,*KIENDB`zim-0.65/data/pixmaps/attachment.png0000664000175000017500000000172212374655231017357 0ustar jaapjaap00000000000000PNG  IHDRw=bKGD pHYs oyDIDATHǽMh\U,$1N>&nԈ4Ә;) .j .l@ ,VIiJ֊ bU,vQkP2I @&SySS\t&{1-z?{?Fxx ;.ǩou8r>o55kp\y#\ѲWzӀ}>t|~R ) #iYARU}Im՞Hk&.$rּalK&{b"¶m[=򚝎-@E $qJ%ykU]OY}=#*xm*M~;>rt(wW,V*e9ZT5@>5]8Yd_r DߏJ"坭JL/.#`930Mksg0C?ڻgϜ9,Z;FWS 5u*/C .k_4WF&`< `khq FvDiJ=,7}vף߷hąv?{6yK}}JiOmm"B}f1wkx $oӗ.ΌweJ!] x2[jn(ro߮I̓"zTXtSoftwarex+//.NN,H/J6XS\IENDB`zim-0.65/data/pixmaps/linkmap.svg0000664000175000017500000001207212374655231016675 0ustar jaapjaap00000000000000 image/svg+xml zim-0.65/data/pixmaps/add-bookmark.png0000664000175000017500000000301112600722173017543 0ustar jaapjaap00000000000000PNG  IHDR szzbKGD pHYs  tIME%MIDATXõKl\W9;oNcڎ[w J]E$;P` u BSEu夎];3;qLeGypѽswq J=gZA9}[#s.yiR;7}4}bllJ򽵾8oG& nT2U->Wy/>y??q׿:Ѻ~_]Nj8֒Ll}2mR ƄDQvlW.~ YJZʕ+Yaww~n bņ |/^dvv+#nqKJs }(\>F1,",//S8'WCk6^c$}M=rLtT0o>ƨ%<N($\?~AD)?A Nja^E]D?ri]f?.D%v3(#D,,u Q -Fʮ0Y{ǚvπ.:T?w(@ZhqEcdd}!fQ/4D}pa \D^)FK evɤ((" g/a<VeiMm[i||gS5gar=r!NPƢͽ}l<5Jl Vh+411s^SCEKhiZWirr:!뉥6B>Ȥ I&|rx9o_gڇPtun`'6N(pDSSS={Yn3hYBJ6iJ3߆tK_HWDU34nNF((u(Ió'GA|"u|'$C߆9΃(Bad(IZg$b}sG9sJqH_Q~p"$}3˧RT`ee/A1̴V=w0l4ߝgyoۼraӧO399n3R x' -'Ǐ7Nk=AV_gt^ Bm~,o/..;Z37 5_8瘙i)xRd$F/R(q.GCIXXXZ5o9:*t_lR}U^Zsܹ Ah)ԃorlQ0vr"cC?Ygb@}Z/@8Z,t4(ܨ޾}q@k^cG7v(`wiqy'`){s?;zn&IENDB`zim-0.65/data/pixmaps/calendar.png0000664000175000017500000000121012374655231016770 0ustar jaapjaap00000000000000PNG  IHDRw=sRGBbKGD pHYs  tIMEIDATHjQۑ +WƆ T.}AgP|eiL>EWu_41%#bL&"]sx?lݓ.nުOpn\+1Fʅ3s pRscn2.-vڔޫ.XHt !elw= "FtN#F( b IIo߽I$΋fBkvvcVKV8r$Z%V Pd2~IGv@F@ I^^Bt38nk(Sʥ"źf1v:1&f7HBLh$j}; t(OUǵ8ETQvO m6˕o1 q}8:|+`pOi:GN6yS6|v,7}ak,ZƮ}{Xv?|h_ѿO dbP/M^ fh  RN }O:]T(=fV2ә ]NNNO<`R ?`Qe3lRYONNN;_R&u.J`-~Yi VNNO>bP@`P"2RZ7sZ1xfP TO=cP@`P (tbP4]%h[=cP @`P >bPy=dQ9rV>bP@`P8@`PD `zim-0.65/data/pixmaps/link.png0000664000175000017500000000112212374655231016156 0ustar jaapjaap00000000000000PNG  IHDRw=bKGDIDATxMhSQPzVbt*AHPFp!EBԕEE\"5TX+D &A7O_sQ 5yVt\!!XBh-Bh+h;z w,z1_΁@Z;=}ۢ} <#Bʓǽm*Bh RhOO;1Vsî:;/#v./?*3N JUj>e?>rWQ/2;=s2_*Ys&Zx< <]q=REw RU _%#`b퐮+Ul(H29LScafor27;C.ZwvɎʨ_[}چJ-+R%H zim-0.65/data/menubar-maemo5.xml0000664000175000017500000001473412374655231016403 0ustar jaapjaap00000000000000 zim-0.65/data/zim.png0000664000175000017500000000725312374655231014352 0ustar jaapjaap00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<(IDAThŚyp]}?{*=l8 (II\XIӤI҅d i:I)&i.4fBٍm0blk,ws~=ڌ-3}mGJD+)k0\ "0g\MéJ)4"86]%7JrtLF)* ?͚3| HN$}( 31s]LcDs]J[[<`%p%ڮ~UH ]ũC')Rg `}kK ~͟LU#8QR:?eaUjљ8J }Mh^v' i: ЦT-Qc.b)A1wp|B7g`ܥaAG%a<|"g?r 5y܉ D@^6Ӭv`UVtx'~{o4dhqq]+( )>aP$ !AQlB;72R]>U( #*@I -۶lrNQS,e;>{9˿$h]CÐ0 0È( ,J).^Qm^)~͛e1 ֭; LU9n6ƪC`c0.K, KKhlVI+Ծ(a֭;Q0|N +K-|Ab!"($ K;Qt>:ϯE*]oB^DDW"S?'[[m?^{i 4`peGfR|_]#)U|HqݼR6-/?>۟ܪtr@)IߔJEDqLFDQLē"\U%ާ籠SHNaẺ~%(>0DzUWyAa<A%kMb2%| #&VQ՜8񉪮+Vzh֭pDz G+>ޕ)%HRTxky**3d]d[5N.cZc3ַDvGTpP֎eWUK3 \k2^Z *s$M-2^q]/S5N|6:1쇂|Sg ͟$^J' F?trU7T uO(wǦcJ ΫMaF~SPB^^+7l.'C>(p"yLw_Zᥫ{>pkrw`({~̿IN[.LˊdRiDd{܎BUnEob> t97 i?+Y'Tn/Q1OovWq6]wRc<*'Z"Q$̨Rzcn*;Mw'fUL'W+U@V${^,Cm JK:-7oצ;֒2C| &Dq^e-]j]H-4E'{̱ ;z0i&3:x9;`H ^l1$DGO7o<~ғ@ZSvr* LdY"S7Ϗ?OuCWuuk1y5ѐ|fCUA kR0cD1dǎq2_ŗ' L)i ߽NjO=XQ4+Tcv0$5Z24oբ8F+.;E1QX|o%˳P; GTr@A:ʽ‘eF1ˆ/PJ&sU1 W)uwf @ɿͪՊT )Qdё)Z}a~V nXk*%;1M39"T.m9T83J k=q<6l_puMj_IENDB`zim-0.65/data/globe.svg0000664000175000017500000016231212374655231014654 0ustar jaapjaap00000000000000 Earth Globe Simple globe centered on North America earth globe northamerica Open Clip Art Library Dan Gerhrads Dan Gerhrads May 1, 2005 image/svg+xml en wmf2svg zim-0.65/data/helpers/0000775000175000017500000000000012615422672014477 5ustar jaapjaap00000000000000zim-0.65/data/helpers/compare_files/0000775000175000017500000000000012615422672017307 5ustar jaapjaap00000000000000zim-0.65/data/helpers/compare_files/meld.desktop0000664000175000017500000000025012374655231021621 0ustar jaapjaap00000000000000[Desktop Entry] Name=Meld Exec=meld %F Terminal=false Type=Application Icon=meld MimeType=application/x-meld-comparison; StartupNotify=true Categories=GTK;Development; zim-0.65/data/dates.list0000664000175000017500000000030412374655231015030 0ustar jaapjaap00000000000000# List with date-time formats used for the # "Insert Date eand Time" dialog. # See man strftime a description of the format. %x %c %A %d/%m/%Y %A %d/%m/%Y %H:%M %A %d %B %Y [d: %Y-%m-%d] %Y-%m-%d zim-0.65/data/templates/0000775000175000017500000000000012615422672015033 5ustar jaapjaap00000000000000zim-0.65/data/templates/plugins/0000775000175000017500000000000012615422672016514 5ustar jaapjaap00000000000000zim-0.65/data/templates/plugins/gnu_r_editor.r0000664000175000017500000000014412375666057021370 0ustar jaapjaap00000000000000png("[% png_fname %]",width=[% r_width %], height=[% r_height %]) [% gnu_r_plot_script %] dev.off() zim-0.65/data/templates/plugins/scoreeditor.ly0000664000175000017500000000031412374655231021403 0ustar jaapjaap00000000000000\header { tagline = ##f } [% version %] \paper { raggedright = ##t raggedbottom = ##t indent = 0\mm } [% include_header %] [% score %] [% include_footer %] \layout { } zim-0.65/data/templates/plugins/gnuploteditor.gnu0000664000175000017500000000020312374655231022122 0ustar jaapjaap00000000000000set term png set output '[% png_fname %]' [% IF attachment_folder %] cd '[% attachment_folder %]' [% END %] [% gnuplot_script %] zim-0.65/data/templates/plugins/quicknote.txt0000664000175000017500000000013112374655231021253 0ustar jaapjaap00000000000000[% text %] [% IF url -%] Source: [% url %] [% END -%] //[% strftime("%A %d %B %Y") %]// zim-0.65/data/templates/plugins/equationeditor.tex0000664000175000017500000000036112374655231022273 0ustar jaapjaap00000000000000\documentclass[12pt]{article} \pagestyle{empty} \usepackage{amssymb} \usepackage{amsmath} \usepackage[usenames]{color} \begin{document} % No empty lines allowed in math block ! \begin{align*} [% equation -%] \end{align*} \end{document} zim-0.65/data/templates/rst/0000775000175000017500000000000012615422672015643 5ustar jaapjaap00000000000000zim-0.65/data/templates/rst/Default.rst0000664000175000017500000000014512374655231017762 0ustar jaapjaap00000000000000[% FOR page IN pages %] ================ [% page.title %] ================ [% page.body %] [% END %] zim-0.65/data/templates/wiki/0000775000175000017500000000000012615422672015776 5ustar jaapjaap00000000000000zim-0.65/data/templates/wiki/Journal.txt0000664000175000017500000000136312374655231020155 0ustar jaapjaap00000000000000[% IF calendar_plugin.page_type == 'day' -%] ======= [% strftime("%A %d %b %Y", calendar_plugin.date) %] ======= [%- ELSIF calendar_plugin.page_type == 'week' -%] ======= [% strfcal("Week %W %Y", calendar_plugin.date) %] ======= [% strftime("%d %B", calendar_plugin.date) %] to [% strftime("%d %B", calendar_plugin.end_date) %] [% FOREACH day IN calendar_plugin.days() %] === [% strftime("%A %d %B", day) %] === [% END %] [%- ELSIF calendar_plugin.page_type == 'month' -%] ======= [% strftime("%B %Y", calendar_plugin.date) %] ======= [%- ELSIF calendar_plugin.page_type == 'year' -%] ======= Year [% strftime("%Y", calendar_plugin.date) %] ======= [%- ELSE -%] ======= [% page.basename %] ======= Created [% strftime("%A %d %B %Y") %] [%- END %] zim-0.65/data/templates/wiki/Default.txt0000664000175000017500000000011312374655231020117 0ustar jaapjaap00000000000000======= [% page.basename %] ======= Created [% strftime("%A %d %B %Y") %] zim-0.65/data/templates/latex/0000775000175000017500000000000012615422672016150 5ustar jaapjaap00000000000000zim-0.65/data/templates/latex/Article.tex0000664000175000017500000000225612374655231020263 0ustar jaapjaap00000000000000\documentclass{scrartcl} \usepackage[mathletters]{ucs} \usepackage[utf8x]{inputenc} \usepackage{amssymb} \usepackage{amsmath} \usepackage[usenames]{color} \usepackage{hyperref} \usepackage{wasysym} \usepackage{graphicx} \usepackage[normalem]{ulem} \usepackage{enumerate} \usepackage{listings} \lstset{ % basicstyle=\footnotesize, % the size of the fonts that are used for the code showspaces=false, % show spaces adding particular underscores showstringspaces=false, % underline spaces within strings showtabs=false, % show tabs within strings adding particular underscores frame=single, % adds a frame around the code tabsize=2, % sets default tabsize to 2 spaces breaklines=true, % sets automatic line breaking breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace } [% options.document_type = 'article' %] \title{[% title %]} \date{[% strftime("%A %d %B %Y") %]} \author{} \begin{document} \maketitle [% FOR page IN pages %] [% IF loop.first and loop.last %] [% page.content %] [% ELSE %] [% page.content %] [% END %] [% END %] \end{document} zim-0.65/data/templates/latex/Report.tex0000664000175000017500000000215612374655231020152 0ustar jaapjaap00000000000000\documentclass{scrreprt} \usepackage[mathletters]{ucs} \usepackage[utf8x]{inputenc} \usepackage{amssymb} \usepackage{amsmath} \usepackage[usenames]{color} \usepackage{hyperref} \usepackage{wasysym} \usepackage{graphicx} \usepackage[normalem]{ulem} \usepackage{enumerate} \usepackage{listings} \lstset{ % basicstyle=\footnotesize, % the size of the fonts that are used for the code showspaces=false, % show spaces adding particular underscores showstringspaces=false, % underline spaces within strings showtabs=false, % show tabs within strings adding particular underscores frame=single, % adds a frame around the code tabsize=2, % sets default tabsize to 2 spaces breaklines=true, % sets automatic line breaking breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace } [% options.document_type = 'report' %] \title{[% title %]} \date{[% strftime("%A %d %B %Y") %]} \author{} \begin{document} \maketitle \tableofcontents [% FOR page IN pages %] [% page.content %] [% END %] \end{document} zim-0.65/data/templates/latex/Part.tex0000664000175000017500000000016112374655231017577 0ustar jaapjaap00000000000000[% options.document_type = 'report' %] \part{[% title %]} [% FOR page IN pages %] [% page.content %] [% END %] zim-0.65/data/templates/html/0000775000175000017500000000000012615422672015777 5ustar jaapjaap00000000000000zim-0.65/data/templates/html/ZeroFiveEight.html0000664000175000017500000001652112423134745021402 0ustar jaapjaap00000000000000 [% title %] [% options.empty_lines = "default" %]

    [% page.title %]

    [% page.body %]
    [% IF loop.first %]
    Backlinks: [% END %] [% link.name %] [% IF loop.last %]

    [% END %]
    [% IF not loop.last %]
    [% END %]
    zim-0.65/data/templates/html/Default.html0000664000175000017500000001453712423134717020260 0ustar jaapjaap00000000000000 [% title %] [% options.empty_lines = "default" %]
    [% IF navigation.prev %] [ Prev ] [% ELSE %] [ Prev ] [% END %] [% IF links.get("index") %] [ Index ] [% ELSE %] [ Index ] [% END %] [% IF navigation.next %] [ Next ] [% ELSE %] [ Next ] [% END %]

    [% page.title %]

    [% page.body %]

    [% IF not loop.last %]
    [% END %]
    zim-0.65/data/templates/html/SlideShow_(S5)/0000775000175000017500000000000012615422672020370 5ustar jaapjaap00000000000000zim-0.65/data/templates/html/SlideShow_(S5)/ui/0000775000175000017500000000000012615422672021005 5ustar jaapjaap00000000000000zim-0.65/data/templates/html/SlideShow_(S5)/ui/default/0000775000175000017500000000000012615422672022431 5ustar jaapjaap00000000000000zim-0.65/data/templates/html/SlideShow_(S5)/ui/default/s5-core.css0000644000175000017500000000061212402530006024376 0ustar jaapjaap00000000000000/* Do not edit or override these styles! The system will likely break if you do. */ div#header, div#footer, div#controls, .slide {position: absolute;} html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;} .handout {display: none;} .layout {display: block;} .slide, .hideme, .incremental {visibility: hidden;} #slide0 {visibility: visible;} zim-0.65/data/templates/html/SlideShow_(S5)/ui/default/framing.css0000644000175000017500000000166612402530006024556 0ustar jaapjaap00000000000000/* The following styles size, place, and layer the slide components. Edit these if you want to change the overall slide layout. The commented lines can be uncommented (and modified, if necessary) to help you with the rearrangement process. */ /* target = 1024x768 */ div#header, div#footer, .slide {width: 100%; top: 0; left: 0;} div#header {top: 0; height: 3em; z-index: 1;} div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;} .slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;} div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;} div#controls form {position: absolute; bottom: 0; right: 0; width: 100%; margin: 0;} #currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;} html>body #currentSlide {position: fixed;} /* div#header {background: #FCC;} div#footer {background: #CCF;} div#controls {background: #BBD;} div#currentSlide {background: #FFC;} */ zim-0.65/data/templates/html/SlideShow_(S5)/ui/default/slides.js0000644000175000017500000003660612402530006024244 0ustar jaapjaap00000000000000// S5 v1.1 slides.js -- released into the Public Domain // // Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information // about all the wonderful and talented contributors to this code! var undef; var slideCSS = ''; var snum = 0; var smax = 1; var incpos = 0; var number = undef; var s5mode = true; var defaultView = 'slideshow'; var controlVis = 'visible'; var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0; var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0; var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0; function hasClass(object, className) { if (!object.className) return false; return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1); } function hasValue(object, value) { if (!object) return false; return (object.search('(^|\\s)' + value + '(\\s|$)') != -1); } function removeClass(object,className) { if (!object) return; object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2); } function addClass(object,className) { if (!object || hasClass(object, className)) return; if (object.className) { object.className += ' '+className; } else { object.className = className; } } function GetElementsWithClassName(elementName,className) { var allElements = document.getElementsByTagName(elementName); var elemColl = new Array(); for (var i = 0; i< allElements.length; i++) { if (hasClass(allElements[i], className)) { elemColl[elemColl.length] = allElements[i]; } } return elemColl; } function isParentOrSelf(element, id) { if (element == null || element.nodeName=='BODY') return false; else if (element.id == id) return true; else return isParentOrSelf(element.parentNode, id); } function nodeValue(node) { var result = ""; if (node.nodeType == 1) { var children = node.childNodes; for (var i = 0; i < children.length; ++i) { result += nodeValue(children[i]); } } else if (node.nodeType == 3) { result = node.nodeValue; } return(result); } function slideLabel() { var slideColl = GetElementsWithClassName('*','slide'); var list = document.getElementById('jumplist'); smax = slideColl.length; for (var n = 0; n < smax; n++) { var obj = slideColl[n]; var did = 'slide' + n.toString(); obj.setAttribute('id',did); if (isOp) continue; var otext = ''; var menu = obj.firstChild; if (!menu) continue; // to cope with empty slides while (menu && menu.nodeType == 3) { menu = menu.nextSibling; } if (!menu) continue; // to cope with slides with only text nodes var menunodes = menu.childNodes; for (var o = 0; o < menunodes.length; o++) { otext += nodeValue(menunodes[o]); } list.options[list.length] = new Option(n + ' : ' + otext, n); } } function currentSlide() { var cs; if (document.getElementById) { cs = document.getElementById('currentSlide'); } else { cs = document.currentSlide; } cs.innerHTML = '' + snum + '<\/span> ' + '\/<\/span> ' + '' + (smax-1) + '<\/span>'; if (snum == 0) { cs.style.visibility = 'hidden'; } else { cs.style.visibility = 'visible'; } } function go(step) { if (document.getElementById('slideProj').disabled || step == 0) return; var jl = document.getElementById('jumplist'); var cid = 'slide' + snum; var ce = document.getElementById(cid); if (incrementals[snum].length > 0) { for (var i = 0; i < incrementals[snum].length; i++) { removeClass(incrementals[snum][i], 'current'); removeClass(incrementals[snum][i], 'incremental'); } } if (step != 'j') { snum += step; lmax = smax - 1; if (snum > lmax) snum = lmax; if (snum < 0) snum = 0; } else snum = parseInt(jl.value); var nid = 'slide' + snum; var ne = document.getElementById(nid); if (!ne) { ne = document.getElementById('slide0'); snum = 0; } if (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;} if (incrementals[snum].length > 0 && incpos == 0) { for (var i = 0; i < incrementals[snum].length; i++) { if (hasClass(incrementals[snum][i], 'current')) incpos = i + 1; else addClass(incrementals[snum][i], 'incremental'); } } if (incrementals[snum].length > 0 && incpos > 0) addClass(incrementals[snum][incpos - 1], 'current'); ce.style.visibility = 'hidden'; ne.style.visibility = 'visible'; jl.selectedIndex = snum; currentSlide(); number = 0; } function goTo(target) { if (target >= smax || target == snum) return; go(target - snum); } function subgo(step) { if (step > 0) { removeClass(incrementals[snum][incpos - 1],'current'); removeClass(incrementals[snum][incpos], 'incremental'); addClass(incrementals[snum][incpos],'current'); incpos++; } else { incpos--; removeClass(incrementals[snum][incpos],'current'); addClass(incrementals[snum][incpos], 'incremental'); addClass(incrementals[snum][incpos - 1],'current'); } } function toggle() { var slideColl = GetElementsWithClassName('*','slide'); var slides = document.getElementById('slideProj'); var outline = document.getElementById('outlineStyle'); if (!slides.disabled) { slides.disabled = true; outline.disabled = false; s5mode = false; fontSize('1em'); for (var n = 0; n < smax; n++) { var slide = slideColl[n]; slide.style.visibility = 'visible'; } } else { slides.disabled = false; outline.disabled = true; s5mode = true; fontScale(); for (var n = 0; n < smax; n++) { var slide = slideColl[n]; slide.style.visibility = 'hidden'; } slideColl[snum].style.visibility = 'visible'; } } function showHide(action) { var obj = GetElementsWithClassName('*','hideme')[0]; switch (action) { case 's': obj.style.visibility = 'visible'; break; case 'h': obj.style.visibility = 'hidden'; break; case 'k': if (obj.style.visibility != 'visible') { obj.style.visibility = 'visible'; } else { obj.style.visibility = 'hidden'; } break; } } // 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/) function keys(key) { if (!key) { key = event; key.which = key.keyCode; } if (key.which == 84) { toggle(); return; } if (s5mode) { switch (key.which) { case 10: // return case 13: // enter if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return; if (key.target && isParentOrSelf(key.target, 'controls')) return; if(number != undef) { goTo(number); break; } case 32: // spacebar case 34: // page down case 39: // rightkey case 40: // downkey if(number != undef) { go(number); } else if (!incrementals[snum] || incpos >= incrementals[snum].length) { go(1); } else { subgo(1); } break; case 33: // page up case 37: // leftkey case 38: // upkey if(number != undef) { go(-1 * number); } else if (!incrementals[snum] || incpos <= 0) { go(-1); } else { subgo(-1); } break; case 36: // home goTo(0); break; case 35: // end goTo(smax-1); break; case 67: // c showHide('k'); break; } if (key.which < 48 || key.which > 57) { number = undef; } else { if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return; if (key.target && isParentOrSelf(key.target, 'controls')) return; number = (((number != undef) ? number : 0) * 10) + (key.which - 48); } } return false; } function clicker(e) { number = undef; var target; if (window.event) { target = window.event.srcElement; e = window.event; } else target = e.target; if (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true; if (!e.which || e.which == 1) { if (!incrementals[snum] || incpos >= incrementals[snum].length) { go(1); } else { subgo(1); } } } function findSlide(hash) { var target = null; var slides = GetElementsWithClassName('*','slide'); for (var i = 0; i < slides.length; i++) { var targetSlide = slides[i]; if ( (targetSlide.name && targetSlide.name == hash) || (targetSlide.id && targetSlide.id == hash) ) { target = targetSlide; break; } } while(target != null && target.nodeName != 'BODY') { if (hasClass(target, 'slide')) { return parseInt(target.id.slice(5)); } target = target.parentNode; } return null; } function slideJump() { if (window.location.hash == null) return; var sregex = /^#slide(\d+)$/; var matches = sregex.exec(window.location.hash); var dest = null; if (matches != null) { dest = parseInt(matches[1]); } else { dest = findSlide(window.location.hash.slice(1)); } if (dest != null) go(dest - snum); } function fixLinks() { var thisUri = window.location.href; thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length); var aelements = document.getElementsByTagName('A'); for (var i = 0; i < aelements.length; i++) { var a = aelements[i].href; var slideID = a.match('\#slide[0-9]{1,2}'); if ((slideID) && (slideID[0].slice(0,1) == '#')) { var dest = findSlide(slideID[0].slice(1)); if (dest != null) { if (aelements[i].addEventListener) { aelements[i].addEventListener("click", new Function("e", "if (document.getElementById('slideProj').disabled) return;" + "go("+dest+" - snum); " + "if (e.preventDefault) e.preventDefault();"), true); } else if (aelements[i].attachEvent) { aelements[i].attachEvent("onclick", new Function("", "if (document.getElementById('slideProj').disabled) return;" + "go("+dest+" - snum); " + "event.returnValue = false;")); } } } } } function externalLinks() { if (!document.getElementsByTagName) return; var anchors = document.getElementsByTagName('a'); for (var i=0; i' + '