From 2052f23bb131ff29b7fc1d3d2dee4ea89d7d715b Mon Sep 17 00:00:00 2001 From: s_bergmann Date: Sat, 16 Apr 2005 06:39:31 +0000 Subject: [PATCH] Import Serendipity 0.8 into trunk. --- bundled-libs/Cache/Lite.php | 615 ++ bundled-libs/Cache/Lite/Function.php | 111 + bundled-libs/Cache/Lite/Output.php | 72 + bundled-libs/HTTP/Request.php | 1132 +++ bundled-libs/HTTP/Request/Listener.php | 96 + bundled-libs/Net/CheckIP.php | 75 + bundled-libs/Net/DNSBL.php | 153 + bundled-libs/Net/DNSBL/SURBL.php | 164 + bundled-libs/Net/Socket.php | 456 ++ bundled-libs/Net/URL.php | 410 + bundled-libs/Onyx/RSS.php | 382 + bundled-libs/PEAR.php | 956 +++ bundled-libs/Smarty/BUGS | 7 + bundled-libs/Smarty/COPYING.lib | 458 ++ bundled-libs/Smarty/ChangeLog | 6778 +++++++++++++++++ bundled-libs/Smarty/FAQ | 284 + bundled-libs/Smarty/INSTALL | 29 + bundled-libs/Smarty/NEWS | 858 +++ bundled-libs/Smarty/README | 80 + bundled-libs/Smarty/RELEASE_NOTES | 423 + .../Smarty/libs/Config_File.class.php | 389 + bundled-libs/Smarty/libs/Smarty.class.php | 1934 +++++ .../Smarty/libs/Smarty_Compiler.class.php | 2304 ++++++ bundled-libs/Smarty/libs/debug.tpl | 64 + .../core.assemble_plugin_filepath.php | 67 + .../core.assign_smarty_interface.php | 43 + .../internals/core.create_dir_structure.php | 79 + .../internals/core.display_debug_console.php | 61 + .../libs/internals/core.get_include_path.php | 44 + .../libs/internals/core.get_microtime.php | 23 + .../libs/internals/core.get_php_resource.php | 80 + .../Smarty/libs/internals/core.is_secure.php | 56 + .../Smarty/libs/internals/core.is_trusted.php | 47 + .../libs/internals/core.load_plugins.php | 125 + .../internals/core.load_resource_plugin.php | 74 + .../internals/core.process_cached_inserts.php | 71 + .../core.process_compiled_include.php | 32 + .../libs/internals/core.read_cache_file.php | 111 + .../Smarty/libs/internals/core.rm_auto.php | 71 + .../Smarty/libs/internals/core.rmdir.php | 55 + .../internals/core.run_insert_handler.php | 71 + .../internals/core.smarty_include_php.php | 50 + .../libs/internals/core.write_cache_file.php | 96 + .../internals/core.write_compiled_include.php | 91 + .../core.write_compiled_resource.php | 35 + .../Smarty/libs/internals/core.write_file.php | 54 + .../Smarty/libs/plugins/block.textformat.php | 102 + .../Smarty/libs/plugins/compiler.assign.php | 38 + .../plugins/function.assign_debug_info.php | 39 + .../libs/plugins/function.config_load.php | 140 + .../Smarty/libs/plugins/function.counter.php | 79 + .../Smarty/libs/plugins/function.cycle.php | 102 + .../Smarty/libs/plugins/function.debug.php | 35 + .../Smarty/libs/plugins/function.eval.php | 48 + .../Smarty/libs/plugins/function.fetch.php | 220 + .../libs/plugins/function.html_checkboxes.php | 143 + .../libs/plugins/function.html_image.php | 139 + .../libs/plugins/function.html_options.php | 121 + .../libs/plugins/function.html_radios.php | 150 + .../plugins/function.html_select_date.php | 316 + .../plugins/function.html_select_time.php | 192 + .../libs/plugins/function.html_table.php | 137 + .../Smarty/libs/plugins/function.mailto.php | 163 + .../Smarty/libs/plugins/function.math.php | 83 + .../Smarty/libs/plugins/function.popup.php | 117 + .../libs/plugins/function.popup_init.php | 39 + .../libs/plugins/modifier.capitalize.php | 42 + .../Smarty/libs/plugins/modifier.cat.php | 33 + .../plugins/modifier.count_characters.php | 31 + .../plugins/modifier.count_paragraphs.php | 28 + .../libs/plugins/modifier.count_sentences.php | 28 + .../libs/plugins/modifier.count_words.php | 32 + .../libs/plugins/modifier.date_format.php | 48 + .../libs/plugins/modifier.debug_print_var.php | 56 + .../Smarty/libs/plugins/modifier.default.php | 31 + .../Smarty/libs/plugins/modifier.escape.php | 89 + .../Smarty/libs/plugins/modifier.indent.php | 27 + .../Smarty/libs/plugins/modifier.lower.php | 25 + .../Smarty/libs/plugins/modifier.nl2br.php | 35 + .../libs/plugins/modifier.regex_replace.php | 33 + .../Smarty/libs/plugins/modifier.replace.php | 29 + .../Smarty/libs/plugins/modifier.spacify.php | 29 + .../libs/plugins/modifier.string_format.php | 28 + .../Smarty/libs/plugins/modifier.strip.php | 33 + .../libs/plugins/modifier.strip_tags.php | 31 + .../Smarty/libs/plugins/modifier.truncate.php | 43 + .../Smarty/libs/plugins/modifier.upper.php | 25 + .../Smarty/libs/plugins/modifier.wordwrap.php | 28 + .../plugins/outputfilter.trimwhitespace.php | 75 + .../plugins/shared.escape_special_chars.php | 30 + .../libs/plugins/shared.make_timestamp.php | 43 + bundled-libs/Text/Wiki.php | 557 ++ bundled-libs/Text/Wiki/Rule.php | 345 + bundled-libs/Text/Wiki/Rule/blockquote.php | 209 + bundled-libs/Text/Wiki/Rule/bold.php | 103 + bundled-libs/Text/Wiki/Rule/break.php | 90 + bundled-libs/Text/Wiki/Rule/center.php | 98 + bundled-libs/Text/Wiki/Rule/code.php | 177 + bundled-libs/Text/Wiki/Rule/colortext.php | 139 + bundled-libs/Text/Wiki/Rule/deflist.php | 172 + bundled-libs/Text/Wiki/Rule/delimiter.php | 95 + bundled-libs/Text/Wiki/Rule/embed.php | 102 + bundled-libs/Text/Wiki/Rule/emphasis.php | 103 + bundled-libs/Text/Wiki/Rule/entities.php | 57 + bundled-libs/Text/Wiki/Rule/freelink.php | 179 + bundled-libs/Text/Wiki/Rule/heading.php | 119 + bundled-libs/Text/Wiki/Rule/horiz.php | 88 + bundled-libs/Text/Wiki/Rule/html.php | 93 + bundled-libs/Text/Wiki/Rule/image.php | 136 + bundled-libs/Text/Wiki/Rule/include.php | 80 + bundled-libs/Text/Wiki/Rule/interwiki.php | 195 + bundled-libs/Text/Wiki/Rule/italic.php | 103 + bundled-libs/Text/Wiki/Rule/list.php | 295 + bundled-libs/Text/Wiki/Rule/newline.php | 91 + bundled-libs/Text/Wiki/Rule/paragraph.php | 141 + bundled-libs/Text/Wiki/Rule/phpcode.php | 133 + bundled-libs/Text/Wiki/Rule/phplookup.php | 93 + bundled-libs/Text/Wiki/Rule/prefilter.php | 77 + bundled-libs/Text/Wiki/Rule/raw.php | 91 + bundled-libs/Text/Wiki/Rule/revise.php | 182 + bundled-libs/Text/Wiki/Rule/strong.php | 103 + bundled-libs/Text/Wiki/Rule/superscript.php | 103 + bundled-libs/Text/Wiki/Rule/table.php | 249 + bundled-libs/Text/Wiki/Rule/tighten.php | 50 + bundled-libs/Text/Wiki/Rule/toc.php | 352 + bundled-libs/Text/Wiki/Rule/tt.php | 102 + bundled-libs/Text/Wiki/Rule/url.php | 316 + bundled-libs/Text/Wiki/Rule/wikilink.php | 241 + bundled-libs/XML/RPC.php | 1188 +++ bundled-libs/XML/RPC/Server.php | 312 + bundled-libs/create_release.sh | 104 + bundled-libs/docs/HomePage.wiki.txt | 263 + bundled-libs/docs/SamplePage.wiki.txt | 374 + bundled-libs/docs/SmashWordsTogether.wiki.txt | 1 + bundled-libs/docs/TextWikiProposal.wiki.txt | 151 + bundled-libs/docs/TokenRuleKeys.wiki.txt | 57 + bundled-libs/docs/WikiPage.wiki.txt | 1 + .../docs/WordsSmashedTogether.wiki.txt | 1 + bundled-libs/docs/free links.wiki.txt | 1 + bundled-libs/docs/index.php | 77 + bundled-libs/docs/stylesheet.css | 69 + bundled-libs/tests/README | 4 + comment.php | 164 + deployment/comment.php | 8 + deployment/exit.php | 8 + deployment/index.php | 8 + deployment/rss.php | 8 + deployment/serendipity.css.php | 8 + deployment/serendipity_admin.php | 8 + .../serendipity_admin_image_selector.php | 8 + deployment/serendipity_config.inc.php | 9 + deployment/serendipity_define.js.php | 8 + deployment/serendipity_editor.js | 227 + deployment/serendipity_xmlrpc.php | 8 + deployment/wfwcomment.php | 8 + docs/CHANGED_FILES | 248 + docs/INSTALL | 74 + docs/INSTALL_EMBEDED | 77 + docs/INSTALL_SHARED | 139 + docs/LICENSE | 24 + docs/NEWS | 1318 ++++ docs/NEWS_OLD | 523 ++ docs/README | 121 + docs/UPGRADE | 106 + docs/upgrade.sh | 188 + exit.php | 34 + htmlarea/ChangeLog | 1185 +++ htmlarea/dialog.js | 73 + htmlarea/examples/2-areas.html | 158 + htmlarea/examples/context-menu.html | 95 + htmlarea/examples/core.html | 184 + htmlarea/examples/css.html | 88 + htmlarea/examples/custom.css | 29 + htmlarea/examples/full-page.html | 77 + htmlarea/examples/fully-loaded.html | 262 + htmlarea/examples/index.html | 29 + htmlarea/examples/spell-checker.html | 132 + htmlarea/examples/table-operations.html | 116 + htmlarea/htmlarea.css | 180 + htmlarea/htmlarea.js | 2530 ++++++ htmlarea/images/ed_about.gif | Bin 0 -> 87 bytes htmlarea/images/ed_align_center.gif | Bin 0 -> 69 bytes htmlarea/images/ed_align_justify.gif | Bin 0 -> 69 bytes htmlarea/images/ed_align_left.gif | Bin 0 -> 69 bytes htmlarea/images/ed_align_right.gif | Bin 0 -> 68 bytes htmlarea/images/ed_blank.gif | Bin 0 -> 56 bytes htmlarea/images/ed_charmap.gif | Bin 0 -> 143 bytes htmlarea/images/ed_color_bg.gif | Bin 0 -> 181 bytes htmlarea/images/ed_color_fg.gif | Bin 0 -> 171 bytes htmlarea/images/ed_copy.gif | Bin 0 -> 110 bytes htmlarea/images/ed_custom.gif | Bin 0 -> 67 bytes htmlarea/images/ed_cut.gif | Bin 0 -> 91 bytes htmlarea/images/ed_delete.gif | Bin 0 -> 90 bytes htmlarea/images/ed_format_bold.gif | Bin 0 -> 74 bytes htmlarea/images/ed_format_italic.gif | Bin 0 -> 77 bytes htmlarea/images/ed_format_strike.gif | Bin 0 -> 78 bytes htmlarea/images/ed_format_sub.gif | Bin 0 -> 78 bytes htmlarea/images/ed_format_sup.gif | Bin 0 -> 77 bytes htmlarea/images/ed_format_underline.gif | Bin 0 -> 85 bytes htmlarea/images/ed_help.gif | Bin 0 -> 70 bytes htmlarea/images/ed_hr.gif | Bin 0 -> 70 bytes htmlarea/images/ed_html.gif | Bin 0 -> 75 bytes htmlarea/images/ed_image.gif | Bin 0 -> 148 bytes htmlarea/images/ed_indent_less.gif | Bin 0 -> 87 bytes htmlarea/images/ed_indent_more.gif | Bin 0 -> 87 bytes htmlarea/images/ed_killword.gif | Bin 0 -> 154 bytes htmlarea/images/ed_left_to_right.gif | Bin 0 -> 89 bytes htmlarea/images/ed_link.gif | Bin 0 -> 97 bytes htmlarea/images/ed_list_bullet.gif | Bin 0 -> 80 bytes htmlarea/images/ed_list_num.gif | Bin 0 -> 82 bytes htmlarea/images/ed_paste.gif | Bin 0 -> 139 bytes htmlarea/images/ed_print.gif | Bin 0 -> 128 bytes htmlarea/images/ed_redo.gif | Bin 0 -> 80 bytes htmlarea/images/ed_right_to_left.gif | Bin 0 -> 88 bytes htmlarea/images/ed_rmformat.gif | Bin 0 -> 118 bytes htmlarea/images/ed_s9yimage.gif | Bin 0 -> 132 bytes htmlarea/images/ed_save.gif | Bin 0 -> 143 bytes htmlarea/images/ed_save.png | Bin 0 -> 230 bytes htmlarea/images/ed_show_border.gif | Bin 0 -> 104 bytes htmlarea/images/ed_splitcel.gif | Bin 0 -> 143 bytes htmlarea/images/ed_undo.gif | Bin 0 -> 81 bytes htmlarea/images/fullscreen_maximize.gif | Bin 0 -> 97 bytes htmlarea/images/fullscreen_minimize.gif | Bin 0 -> 97 bytes htmlarea/images/insert_table.gif | Bin 0 -> 121 bytes htmlarea/index.html | 210 + htmlarea/lang/b5.js | 36 + htmlarea/lang/ch.js | 83 + htmlarea/lang/cz.js | 63 + htmlarea/lang/da.js | 38 + htmlarea/lang/de.js | 80 + htmlarea/lang/ee.js | 63 + htmlarea/lang/el.js | 75 + htmlarea/lang/en.js | 147 + htmlarea/lang/es.js | 51 + htmlarea/lang/fi.js | 46 + htmlarea/lang/fr.js | 97 + htmlarea/lang/gb.js | 36 + htmlarea/lang/he.js | 89 + htmlarea/lang/hu.js | 90 + htmlarea/lang/it.js | 79 + htmlarea/lang/ja-euc.js | 37 + htmlarea/lang/ja-jis.js | 37 + htmlarea/lang/ja-sjis.js | 37 + htmlarea/lang/ja-utf8.js | 37 + htmlarea/lang/lt.js | 77 + htmlarea/lang/lv.js | 55 + htmlarea/lang/nb.js | 36 + htmlarea/lang/nl.js | 90 + htmlarea/lang/no.js | 79 + htmlarea/lang/pl.js | 36 + htmlarea/license.txt | 30 + htmlarea/plugins/CSS/css.js | 116 + htmlarea/plugins/CSS/lang/en.js | 2 + htmlarea/plugins/ContextMenu/context-menu.js | 445 ++ htmlarea/plugins/ContextMenu/lang/de.js | 59 + htmlarea/plugins/ContextMenu/lang/el.js | 57 + htmlarea/plugins/ContextMenu/lang/en.js | 70 + htmlarea/plugins/ContextMenu/lang/nl.js | 66 + htmlarea/plugins/ContextMenu/menu.css | 65 + htmlarea/plugins/FullPage/full-page.js | 177 + htmlarea/plugins/FullPage/img/docprop.gif | Bin 0 -> 302 bytes htmlarea/plugins/FullPage/lang/en.js | 25 + htmlarea/plugins/FullPage/lang/ro.js | 25 + htmlarea/plugins/FullPage/popups/docprop.html | 143 + htmlarea/plugins/FullPage/test.html | 89 + .../TableOperations/img/cell-delete.gif | Bin 0 -> 101 bytes .../TableOperations/img/cell-insert-after.gif | Bin 0 -> 118 bytes .../img/cell-insert-before.gif | Bin 0 -> 118 bytes .../TableOperations/img/cell-merge.gif | Bin 0 -> 896 bytes .../plugins/TableOperations/img/cell-prop.gif | Bin 0 -> 155 bytes .../TableOperations/img/cell-split.gif | Bin 0 -> 907 bytes .../TableOperations/img/col-delete.gif | Bin 0 -> 100 bytes .../TableOperations/img/col-insert-after.gif | Bin 0 -> 111 bytes .../TableOperations/img/col-insert-before.gif | Bin 0 -> 110 bytes .../plugins/TableOperations/img/col-split.gif | Bin 0 -> 908 bytes .../TableOperations/img/row-delete.gif | Bin 0 -> 104 bytes .../TableOperations/img/row-insert-above.gif | Bin 0 -> 116 bytes .../TableOperations/img/row-insert-under.gif | Bin 0 -> 115 bytes .../plugins/TableOperations/img/row-prop.gif | Bin 0 -> 149 bytes .../plugins/TableOperations/img/row-split.gif | Bin 0 -> 895 bytes .../TableOperations/img/table-prop.gif | Bin 0 -> 145 bytes htmlarea/plugins/TableOperations/lang/cz.js | 90 + htmlarea/plugins/TableOperations/lang/da.js | 90 + htmlarea/plugins/TableOperations/lang/de.js | 81 + htmlarea/plugins/TableOperations/lang/el.js | 81 + htmlarea/plugins/TableOperations/lang/en.js | 90 + htmlarea/plugins/TableOperations/lang/fi.js | 66 + htmlarea/plugins/TableOperations/lang/hu.js | 63 + htmlarea/plugins/TableOperations/lang/it.js | 81 + htmlarea/plugins/TableOperations/lang/nl.js | 90 + htmlarea/plugins/TableOperations/lang/no.js | 91 + htmlarea/plugins/TableOperations/lang/ro.js | 90 + .../TableOperations/table-operations.js | 1160 +++ htmlarea/popupdiv.js | 369 + htmlarea/popups/about.html | 392 + htmlarea/popups/blank.html | 2 + htmlarea/popups/custom2.html | 35 + htmlarea/popups/editor_help.html | 16 + htmlarea/popups/fullscreen.html | 139 + htmlarea/popups/insert_image.html | 191 + htmlarea/popups/insert_table.html | 175 + htmlarea/popups/link.html | 155 + htmlarea/popups/old-fullscreen.html | 131 + htmlarea/popups/old_insert_image.html | 206 + htmlarea/popups/popup.js | 114 + htmlarea/popups/select_color.html | 347 + htmlarea/popupwin.js | 139 + htmlarea/reference.html | 523 ++ htmlarea/release-notes.html | 209 + include/admin/category.inc.php | 246 + include/admin/comments.inc.php | 370 + include/admin/configuration.inc.php | 44 + include/admin/entries.inc.php | 405 + include/admin/entries_overview.inc.php | 12 + include/admin/export.inc.php | 15 + include/admin/images.inc.php | 546 ++ include/admin/import.inc.php | 187 + include/admin/importers/b2evolution.inc.php | 297 + include/admin/importers/bblog.inc.php | 233 + include/admin/importers/bmachine.inc.php | 255 + include/admin/importers/geeklog.inc.php | 245 + include/admin/importers/generic.inc.php | 147 + include/admin/importers/movabletype.inc.php | 219 + include/admin/importers/nucleus.inc.php | 244 + include/admin/importers/phpbb.inc.php | 308 + include/admin/importers/pmachine.inc.php | 252 + include/admin/importers/sunlog.inc.php | 276 + include/admin/importers/textpattern.inc.php | 251 + include/admin/importers/wordpress.inc.php | 254 + include/admin/installer.inc.php | 456 ++ include/admin/overview.inc.php | 18 + include/admin/personal.inc.php | 46 + include/admin/plugins.inc.php | 711 ++ include/admin/templates.inc.php | 91 + include/admin/upgrader.inc.php | 336 + include/admin/users.inc.php | 190 + include/compat.inc.php | 173 + include/db/db.inc.php | 94 + include/db/mysql.inc.php | 200 + include/db/mysqli.inc.php | 196 + include/db/postgres.inc.php | 208 + include/db/sqlite.inc.php | 218 + include/functions.inc.php | 681 ++ include/functions_comments.inc.php | 486 ++ include/functions_config.inc.php | 490 ++ include/functions_entries.inc.php | 1666 ++++ include/functions_images.inc.php | 1289 ++++ include/functions_installer.inc.php | 869 +++ include/functions_smarty.inc.php | 243 + include/functions_trackbacks.inc.php | 384 + include/functions_upgrader.inc.php | 113 + include/genpage.inc.php | 72 + include/lang.inc.php | 81 + include/plugin_api.inc.php | 838 ++ include/plugin_internal.inc.php | 1012 +++ include/tpl/config_local.inc.php | 297 + include/tpl/config_personal.inc.php | 114 + include/tpl/htaccess_cgi_errordocs.tpl | 21 + include/tpl/htaccess_cgi_normal.tpl | 19 + include/tpl/htaccess_cgi_rewrite.tpl | 41 + include/tpl/htaccess_errordocs.tpl | 23 + include/tpl/htaccess_normal.tpl | 21 + include/tpl/htaccess_rewrite.tpl | 43 + index.php | 312 + lang/serendipity_lang_bg.inc.php | 655 ++ lang/serendipity_lang_cn.inc.php | 669 ++ lang/serendipity_lang_cs.inc.php | 671 ++ lang/serendipity_lang_cz.inc.php | 671 ++ lang/serendipity_lang_da.inc.php | 671 ++ lang/serendipity_lang_de.inc.php | 669 ++ lang/serendipity_lang_en.inc.php | 668 ++ lang/serendipity_lang_es.inc.php | 673 ++ lang/serendipity_lang_fa.inc.php | 670 ++ lang/serendipity_lang_fi.inc.php | 668 ++ lang/serendipity_lang_fr.inc.php | 674 ++ lang/serendipity_lang_is.inc.php | 668 ++ lang/serendipity_lang_it.inc.php | 670 ++ lang/serendipity_lang_ja.inc.php | 670 ++ lang/serendipity_lang_ko.inc.php | 673 ++ lang/serendipity_lang_nl.inc.php | 672 ++ lang/serendipity_lang_no.inc.php | 670 ++ lang/serendipity_lang_pt.inc.php | 671 ++ lang/serendipity_lang_ru.inc.php | 671 ++ lang/serendipity_lang_tn.inc.php | 669 ++ lang/serendipity_lang_tw.inc.php | 669 ++ lang/serendipity_lang_zh.inc.php | 669 ++ .../serendipity_event_bbcode/lang_ja.inc.php | 20 + .../serendipity_event_bbcode.php | 290 + .../font/courier.php | 7 + .../font/helvetica.php | 15 + .../font/helveticab.php | 15 + .../font/helveticabi.php | 15 + .../font/helveticai.php | 15 + .../font/makefont/cp1250.map | 251 + .../font/makefont/cp1251.map | 255 + .../font/makefont/cp1252.map | 251 + .../font/makefont/cp1253.map | 239 + .../font/makefont/cp1254.map | 249 + .../font/makefont/cp1255.map | 233 + .../font/makefont/cp1257.map | 244 + .../font/makefont/cp1258.map | 247 + .../font/makefont/cp874.map | 225 + .../font/makefont/iso-8859-1.map | 256 + .../font/makefont/iso-8859-11.map | 248 + .../font/makefont/iso-8859-15.map | 256 + .../font/makefont/iso-8859-16.map | 256 + .../font/makefont/iso-8859-2.map | 256 + .../font/makefont/iso-8859-4.map | 256 + .../font/makefont/iso-8859-5.map | 256 + .../font/makefont/iso-8859-7.map | 250 + .../font/makefont/iso-8859-9.map | 256 + .../font/makefont/koi8-r.map | 256 + .../font/makefont/koi8-u.map | 256 + .../serendipity_event_blogpdf/font/symbol.php | 15 + .../serendipity_event_blogpdf/font/times.php | 15 + .../serendipity_event_blogpdf/font/timesb.php | 15 + .../font/timesbi.php | 15 + .../serendipity_event_blogpdf/font/timesi.php | 15 + .../font/zapfdingbats.php | 15 + plugins/serendipity_event_blogpdf/fpdf.php | 1618 ++++ .../serendipity_event_blogpdf/lang_ja.inc.php | 27 + .../serendipity_event_blogpdf.php | 447 ++ .../lang_ja.inc.php | 18 + .../pngbehavior.htc | 89 + ...serendipity_event_browsercompatibility.php | 89 + .../lang_ja.inc.php | 34 + .../serendipity_event_contentrewrite.php | 315 + .../lang_ja.inc.php | 29 + .../serendipity_event_creativecommons.php | 377 + .../lang_is.inc.php | 8 + .../lang_ja.inc.php | 20 + .../serendipity_event_emoticate.php | 201 + .../lang_ja.inc.php | 34 + .../serendipity_event_entryproperties.php | 480 ++ .../lang_ja.inc.php | 24 + .../serendipity_event_htmlvalidator.php | 272 + .../serendipity_event_karma/lang_ja.inc.php | 56 + .../serendipity_event_karma.php | 633 ++ .../serendipity_event_livesearch.js | 157 + .../serendipity_event_livesearch.php | 174 + .../serendipity_event_mailer/lang_ja.inc.php | 25 + .../serendipity_event_mailer.php | 134 + .../serendipity_event_nl2br/lang_ja.inc.php | 19 + .../serendipity_event_nl2br.php | 121 + .../lang_is.inc.php | 8 + .../lang_ja.inc.php | 20 + .../serendipity_event_s9ymarkup.php | 154 + .../serendipity_event_searchhighlight.php | 230 + .../serendipity_event_spamblock/36daysago.ttf | Bin 0 -> 42073 bytes .../serendipity_event_spamblock/36daysago.txt | 85 + plugins/serendipity_event_spamblock/Vera.ttf | Bin 0 -> 65933 bytes .../serendipity_event_spamblock/VeraSe.ttf | Bin 0 -> 60281 bytes .../serendipity_event_spamblock/captcha_2.png | Bin 0 -> 133 bytes .../serendipity_event_spamblock/captcha_3.png | Bin 0 -> 132 bytes .../serendipity_event_spamblock/captcha_4.png | Bin 0 -> 141 bytes .../serendipity_event_spamblock/captcha_7.png | Bin 0 -> 124 bytes .../serendipity_event_spamblock/captcha_9.png | Bin 0 -> 144 bytes .../serendipity_event_spamblock/captcha_a.png | Bin 0 -> 145 bytes .../serendipity_event_spamblock/captcha_b.png | Bin 0 -> 131 bytes .../serendipity_event_spamblock/captcha_c.png | Bin 0 -> 133 bytes .../serendipity_event_spamblock/captcha_d.png | Bin 0 -> 127 bytes .../serendipity_event_spamblock/captcha_e.png | Bin 0 -> 124 bytes .../serendipity_event_spamblock/captcha_f.png | Bin 0 -> 134 bytes .../serendipity_event_spamblock/captcha_h.png | Bin 0 -> 131 bytes .../serendipity_event_spamblock/captcha_j.png | Bin 0 -> 124 bytes .../serendipity_event_spamblock/captcha_k.png | Bin 0 -> 145 bytes .../serendipity_event_spamblock/captcha_l.png | Bin 0 -> 132 bytes .../serendipity_event_spamblock/captcha_m.png | Bin 0 -> 144 bytes .../serendipity_event_spamblock/captcha_n.png | Bin 0 -> 130 bytes .../serendipity_event_spamblock/captcha_p.png | Bin 0 -> 131 bytes .../serendipity_event_spamblock/captcha_q.png | Bin 0 -> 144 bytes .../serendipity_event_spamblock/captcha_r.png | Bin 0 -> 139 bytes .../serendipity_event_spamblock/captcha_t.png | Bin 0 -> 132 bytes .../serendipity_event_spamblock/captcha_u.png | Bin 0 -> 129 bytes .../serendipity_event_spamblock/captcha_v.png | Bin 0 -> 121 bytes .../serendipity_event_spamblock/captcha_w.png | Bin 0 -> 137 bytes .../serendipity_event_spamblock/captcha_x.png | Bin 0 -> 125 bytes .../serendipity_event_spamblock/captcha_y.png | Bin 0 -> 140 bytes .../serendipity_event_spamblock/captcha_z.png | Bin 0 -> 124 bytes .../serendipity_event_spamblock/chumbly.ttf | Bin 0 -> 67845 bytes .../serendipity_event_spamblock/chumbly.txt | 57 + .../lang_ja.inc.php | 93 + .../serendipity_event_spamblock.php | 858 +++ .../lang_ja.inc.php | 21 + .../serendipity_event_spartacus.php | 383 + .../serendipity_event_statistics/lang_cz.php | 50 + .../lang_ja.inc.php | 64 + .../serendipity_event_statistics.php | 502 ++ .../lang_ja.inc.php | 18 + .../serendipity_event_templatechooser.php | 85 + .../serendipity_event_textile/lang_ja.inc.php | 19 + .../serendipity_event_textile.php | 239 + plugins/serendipity_event_textile/textile.php | 1096 +++ .../lang_ja.inc.php | 19 + .../serendipity_event_textwiki.php | 678 ++ .../serendipity_event_trackexits.php | 225 + .../lang_ja.inc.php | 23 + .../serendipity_event_weblogping.php | 237 + .../servicesdb_en.inc.php | 62 + .../servicesdb_ja.inc.php | 97 + .../serendipity_event_xhtmlcleanup.php | 171 + .../lang_is.inc.php | 12 + .../lang_ja.inc.php | 12 + .../serendipity_plugin_comments.php | 181 + .../lang_ja.inc.php | 18 + .../serendipity_plugin_creativecommons.php | 71 + .../serendipity_plugin_entrylinks.php | 214 + .../serendipity_plugin_eventwrapper.php | 103 + .../lang_ja.inc.php | 41 + .../serendipity_plugin_history.php | 242 + .../lang_is.inc.php | 9 + .../lang_ja.inc.php | 25 + .../serendipity_plugin_recententries.php | 187 + .../lang_ja.inc.php | 35 + .../serendipity_plugin_remoterss.php | 579 ++ .../lang_ja.inc.php | 27 + .../serendipity_plugin_shoutbox.php | 220 + .../lang_ja.inc.php | 21 + .../serendipity_plugin_templatedropdown.php | 97 + rss.php | 298 + serendipity.css.php | 69 + serendipity_admin.php | 265 + serendipity_admin_image_selector.php | 235 + serendipity_config.inc.php | 301 + serendipity_define.js.php | 16 + serendipity_editor.js | 228 + serendipity_xmlrpc.php | 509 ++ sql/db.sql | 194 + sql/db_update_0.2_0.3_mysql.sql | 17 + sql/db_update_0.2_0.3_postgres.sql | 17 + sql/db_update_0.3_0.4_mysql.sql | 1 + sql/db_update_0.3_0.4_postgres.sql | 4 + sql/db_update_0.5.1_0.6_mysql.sql | 3 + sql/db_update_0.5.1_0.6_postgres.sql | 3 + sql/db_update_0.5_0.5.1_mysql.sql | 34 + sql/db_update_0.5_0.5.1_postgres.sql | 34 + sql/db_update_0.6.10_0.6.11_mysql.sql | 1 + sql/db_update_0.6.10_0.6.11_postgres.sql | 1 + sql/db_update_0.6.1_0.6.2_mysql.sql | 1 + sql/db_update_0.6.1_0.6.2_postgres.sql | 1 + sql/db_update_0.6.2_0.6.3_mysql.sql | 2 + sql/db_update_0.6.2_0.6.3_postgres.sql | 4 + sql/db_update_0.6.3_0.6.4_mysql.sql | 1 + sql/db_update_0.6.3_0.6.4_postgres.sql | 3 + sql/db_update_0.6.4_0.6.5_mysql.sql | 15 + sql/db_update_0.6.4_0.6.5_postgres.sql | 21 + sql/db_update_0.6.5_0.6.6_mysql.sql | 1 + sql/db_update_0.6.5_0.6.6_postgres.sql | 1 + sql/db_update_0.6.6_0.6.7_mysql.sql | 3 + sql/db_update_0.6.6_0.6.7_postgres.sql | 7 + sql/db_update_0.6.8_0.6.9_mysql.sql | 1 + sql/db_update_0.6.8_0.6.9_postgres.sql | 9 + sql/db_update_0.6.9_0.7.0_mysql.sql | 1 + sql/db_update_0.6.9_0.7.0_postgresql.sql | 2 + sql/db_update_0.6_0.6.1_mysql.sql | 15 + sql/db_update_0.6_0.6.1_postgres.sql | 22 + ...b_update_0.8-alpha10_0.8-alpha11_mysql.sql | 7 + ...b_update_0.8-alpha11_0.8-alpha12_mysql.sql | 2 + ...pdate_0.8-alpha11_0.8-alpha12_postgres.sql | 1 + ..._update_0.8-alpha11_0.8-alpha12_sqlite.sql | 31 + ...b_update_0.8-alpha12_0.8-alpha13_mysql.sql | 1 + ...pdate_0.8-alpha12_0.8-alpha13_postgres.sql | 1 + ..._update_0.8-alpha12_0.8-alpha13_sqlite.sql | 35 + sql/db_update_0.8-alpha1_0.8-alpha2_mysql.sql | 8 + sql/db_update_0.8-alpha4_0.8-alpha5_mysql.sql | 1 + ..._update_0.8-alpha4_0.8-alpha5_postgres.sql | 1 + ...db_update_0.8-alpha4_0.8-alpha5_sqlite.sql | 38 + sql/db_update_0.8-alpha5_0.8-alpha6_mysql.sql | 1 + ..._update_0.8-alpha5_0.8-alpha6_postgres.sql | 1 + ...db_update_0.8-alpha5_0.8-alpha6_sqlite.sql | 22 + sql/db_update_0.8-beta3_0.8-beta4_mysql.sql | 1 + ...db_update_0.8-beta3_0.8-beta4_postgres.sql | 1 + sql/db_update_0.8-beta3_0.8-beta4_sqlite.sql | 1 + sql/db_update_0.8-beta5_0.8-beta6_mysql.sql | 2 + ...db_update_0.8-beta5_0.8-beta6_postgres.sql | 2 + sql/db_update_0.8-beta5_0.8-beta6_sqlite.sql | 2 + templates/HOWTO | 1 + templates/blue/htmlarea.css | 44 + templates/blue/info.txt | 3 + templates/blue/preview.png | Bin 0 -> 7667 bytes templates/blue/style.css | 341 + .../default-rtl/admin/img/background.jpg | Bin 0 -> 6947 bytes .../admin/img/banner_background.png | Bin 0 -> 6414 bytes .../admin/img/button_background.png | Bin 0 -> 2176 bytes .../admin/img/infobar_background.png | Bin 0 -> 252 bytes .../default-rtl/admin/img/menu_background.png | Bin 0 -> 1035 bytes .../admin/img/menuheader_background.png | Bin 0 -> 1475 bytes templates/default-rtl/admin/style.css | 252 + templates/default-rtl/htmlarea.css | 45 + templates/default-rtl/img/background.png | Bin 0 -> 674 bytes templates/default-rtl/info.txt | 4 + templates/default-rtl/preview.png | Bin 0 -> 13606 bytes templates/default-rtl/style.css | 353 + templates/default/admin/img/accept.png | Bin 0 -> 883 bytes templates/default/admin/img/background.jpg | Bin 0 -> 6947 bytes .../default/admin/img/banner_background.png | Bin 0 -> 6414 bytes templates/default/admin/img/big_delete.png | Bin 0 -> 1572 bytes templates/default/admin/img/big_rename.png | Bin 0 -> 1111 bytes templates/default/admin/img/big_resize.png | Bin 0 -> 1157 bytes .../default/admin/img/big_rotate_ccw.png | Bin 0 -> 1141 bytes templates/default/admin/img/big_rotate_cw.png | Bin 0 -> 1132 bytes templates/default/admin/img/big_zoom.png | Bin 0 -> 1329 bytes .../default/admin/img/button_background.png | Bin 0 -> 2176 bytes templates/default/admin/img/clock.png | Bin 0 -> 1160 bytes templates/default/admin/img/clock_future.png | Bin 0 -> 3650 bytes templates/default/admin/img/configure.png | Bin 0 -> 980 bytes templates/default/admin/img/delete.png | Bin 0 -> 1032 bytes templates/default/admin/img/downarrow.png | Bin 0 -> 808 bytes templates/default/admin/img/edit.png | Bin 0 -> 857 bytes templates/default/admin/img/folder.png | Bin 0 -> 702 bytes .../default/admin/img/infobar_background.png | Bin 0 -> 252 bytes templates/default/admin/img/install.png | Bin 0 -> 2407 bytes templates/default/admin/img/install_now.png | Bin 0 -> 2172 bytes .../default/admin/img/install_template.png | Bin 0 -> 2358 bytes .../default/admin/img/menu_background.png | Bin 0 -> 700 bytes .../admin/img/menuheader_background.png | Bin 0 -> 1135 bytes templates/default/admin/img/menuitem.png | Bin 0 -> 708 bytes templates/default/admin/img/mime_unknown.png | Bin 0 -> 5854 bytes templates/default/admin/img/next.png | Bin 0 -> 781 bytes templates/default/admin/img/previous.png | Bin 0 -> 777 bytes templates/default/admin/img/rotate.png | Bin 0 -> 1141 bytes templates/default/admin/img/thumbnail.png | Bin 0 -> 922 bytes templates/default/admin/img/uparrow.png | Bin 0 -> 781 bytes templates/default/admin/img/upgrade_now.png | Bin 0 -> 2146 bytes templates/default/admin/img/user_admin.png | Bin 0 -> 1157 bytes templates/default/admin/img/user_chief.png | Bin 0 -> 1130 bytes templates/default/admin/img/user_editor.png | Bin 0 -> 1068 bytes templates/default/admin/img/zoom.png | Bin 0 -> 813 bytes templates/default/admin/style.css | 257 + templates/default/atom.css | 89 + templates/default/commentform.tpl | 59 + templates/default/commentpopup.tpl | 61 + templates/default/comments.tpl | 27 + templates/default/content.tpl | 7 + templates/default/entries.tpl | 196 + templates/default/entries_archives.tpl | 16 + templates/default/entries_summary.tpl | 12 + templates/default/htmlarea.css | 44 + templates/default/img/back.png | Bin 0 -> 468 bytes templates/default/img/background.png | Bin 0 -> 674 bytes templates/default/img/blank.gif | Bin 0 -> 43 bytes templates/default/img/blank.png | Bin 0 -> 127 bytes templates/default/img/delete.png | Bin 0 -> 969 bytes templates/default/img/down.png | Bin 0 -> 456 bytes templates/default/img/emoticons/cool.png | Bin 0 -> 627 bytes templates/default/img/emoticons/cry.png | Bin 0 -> 702 bytes templates/default/img/emoticons/eek.png | Bin 0 -> 567 bytes templates/default/img/emoticons/laugh.png | Bin 0 -> 591 bytes templates/default/img/emoticons/normal.png | Bin 0 -> 526 bytes templates/default/img/emoticons/sad.png | Bin 0 -> 593 bytes templates/default/img/emoticons/smile.png | Bin 0 -> 556 bytes templates/default/img/emoticons/tongue.png | Bin 0 -> 571 bytes templates/default/img/emoticons/wink.png | Bin 0 -> 577 bytes templates/default/img/forward.png | Bin 0 -> 477 bytes .../default/img/graph_bar_horisontal.png | Bin 0 -> 165 bytes templates/default/img/img_align_left.png | Bin 0 -> 6212 bytes templates/default/img/img_align_right.png | Bin 0 -> 6409 bytes templates/default/img/img_align_top.png | Bin 0 -> 4596 bytes templates/default/img/minus.png | Bin 0 -> 265 bytes templates/default/img/norights.png | Bin 0 -> 1167 bytes templates/default/img/plus.png | Bin 0 -> 290 bytes templates/default/img/rename.png | Bin 0 -> 766 bytes templates/default/img/s9y_banner_small.png | Bin 0 -> 4101 bytes templates/default/img/scale.png | Bin 0 -> 840 bytes templates/default/img/somerights20.gif | Bin 0 -> 1836 bytes templates/default/img/up.png | Bin 0 -> 440 bytes templates/default/img/xml.gif | Bin 0 -> 111 bytes templates/default/img/zoom.png | Bin 0 -> 1132 bytes templates/default/index.tpl | 54 + templates/default/info.txt | 4 + templates/default/plugin_calendar.tpl | 33 + templates/default/preview.png | Bin 0 -> 13606 bytes templates/default/sidebar.tpl | 12 + templates/default/style.css | 349 + templates/default/trackbacks.tpl | 17 + templates/idea/img/I_had_an_idea.jpg | Bin 0 -> 2299 bytes templates/idea/img/bullet.gif | Bin 0 -> 113 bytes .../idea/img/clock_face_messy_paint_runs.jpg | Bin 0 -> 638 bytes templates/idea/img/quote.gif | Bin 0 -> 451 bytes templates/idea/info.txt | 3 + templates/idea/preview.png | Bin 0 -> 6220 bytes templates/idea/style.css | 391 + templates/kubrick/comments.tpl | 23 + templates/kubrick/config.inc.php | 11 + templates/kubrick/entries.tpl | 197 + templates/kubrick/images/kubrickbg.jpg | Bin 0 -> 1047 bytes templates/kubrick/images/kubrickbgcolor.jpg | Bin 0 -> 558 bytes templates/kubrick/images/kubrickbgwide.jpg | Bin 0 -> 1020 bytes templates/kubrick/images/kubrickfooter.jpg | Bin 0 -> 2601 bytes templates/kubrick/images/kubrickheader.jpg | Bin 0 -> 8334 bytes templates/kubrick/images/kubricklogo.jpg | Bin 0 -> 20902 bytes templates/kubrick/images/kubrickportrait.png | Bin 0 -> 23879 bytes templates/kubrick/index.tpl | 59 + templates/kubrick/info.txt | 3 + templates/kubrick/lang_de.inc.php | 11 + templates/kubrick/lang_en.inc.php | 11 + templates/kubrick/preview.png | Bin 0 -> 8941 bytes templates/kubrick/sidebar.tpl | 8 + templates/kubrick/style.css | 625 ++ templates/kubrick/trackbacks.tpl | 15 + templates/moz-modern/htmlarea.css | 43 + templates/moz-modern/img/back.png | Bin 0 -> 390 bytes templates/moz-modern/img/background.png | Bin 0 -> 1135 bytes templates/moz-modern/img/background2.png | Bin 0 -> 577 bytes templates/moz-modern/img/forward.png | Bin 0 -> 386 bytes templates/moz-modern/index.tpl | 61 + templates/moz-modern/info.txt | 4 + templates/moz-modern/preview.png | Bin 0 -> 6974 bytes templates/moz-modern/style.css | 477 ++ templates/mt-clean/info.txt | 3 + templates/mt-clean/preview.png | Bin 0 -> 6426 bytes templates/mt-clean/style.css | 291 + templates/mt-georgiablue/info.txt | 3 + templates/mt-georgiablue/preview.png | Bin 0 -> 6523 bytes templates/mt-georgiablue/style.css | 304 + templates/mt-gettysburg/info.txt | 3 + templates/mt-gettysburg/preview.png | Bin 0 -> 6560 bytes templates/mt-gettysburg/style.css | 312 + templates/mt-plainjane/info.txt | 3 + templates/mt-plainjane/preview.png | Bin 0 -> 5855 bytes templates/mt-plainjane/style.css | 303 + templates/mt-rusty/info.txt | 3 + templates/mt-rusty/preview.png | Bin 0 -> 6943 bytes templates/mt-rusty/style.css | 323 + templates/mt-stormy/inactive.txt | 2 + templates/mt-stormy/info.txt | 3 + templates/mt-stormy/style.css | 163 + templates/mt-trendy/htmlarea.css | 44 + templates/mt-trendy/img/back.png | Bin 0 -> 436 bytes templates/mt-trendy/img/forward.png | Bin 0 -> 434 bytes templates/mt-trendy/info.txt | 3 + templates/mt-trendy/preview.png | Bin 0 -> 6563 bytes templates/mt-trendy/style.css | 287 + templates/mt3-chalkboard/info.txt | 3 + templates/mt3-chalkboard/preview.png | Bin 0 -> 43018 bytes templates/mt3-chalkboard/style.css | 433 ++ templates/mt3-gettysburg/info.txt | 3 + templates/mt3-gettysburg/preview.png | Bin 0 -> 40016 bytes templates/mt3-gettysburg/style.css | 405 + templates/mt3-independence/info.txt | 3 + templates/mt3-independence/preview.png | Bin 0 -> 39819 bytes templates/mt3-independence/style.css | 428 ++ templates/mt3-squash/info.txt | 3 + templates/mt3-squash/preview.png | Bin 0 -> 41003 bytes templates/mt3-squash/style.css | 414 + templates/newspaper/htmlarea.css | 43 + templates/newspaper/img/shadowb.png | Bin 0 -> 204 bytes templates/newspaper/img/shadowbl.png | Bin 0 -> 299 bytes templates/newspaper/img/shadowbr.png | Bin 0 -> 298 bytes templates/newspaper/img/shadowr.png | Bin 0 -> 209 bytes templates/newspaper/img/shadowt.png | Bin 0 -> 311 bytes templates/newspaper/info.txt | 3 + templates/newspaper/layout.php | 107 + templates/newspaper/preview.png | Bin 0 -> 10421 bytes templates/newspaper/style.css | 352 + templates/wp/atom.css | 89 + templates/wp/commentform.tpl | 52 + templates/wp/comments.tpl | 6 + templates/wp/content.tpl | 7 + templates/wp/entries.tpl | 66 + templates/wp/entries_archives.tpl | 16 + templates/wp/entries_summary.tpl | 12 + templates/wp/htmlarea.css | 44 + templates/wp/index.tpl | 48 + templates/wp/info.txt | 4 + templates/wp/plugin_calendar.tpl | 32 + templates/wp/sidebar.tpl | 5 + templates/wp/trackbacks.tpl | 6 + templates/wp/wp-layout.css | 145 + wfwcomment.php | 40 + 770 files changed, 109903 insertions(+) create mode 100644 bundled-libs/Cache/Lite.php create mode 100644 bundled-libs/Cache/Lite/Function.php create mode 100644 bundled-libs/Cache/Lite/Output.php create mode 100644 bundled-libs/HTTP/Request.php create mode 100644 bundled-libs/HTTP/Request/Listener.php create mode 100644 bundled-libs/Net/CheckIP.php create mode 100644 bundled-libs/Net/DNSBL.php create mode 100644 bundled-libs/Net/DNSBL/SURBL.php create mode 100644 bundled-libs/Net/Socket.php create mode 100644 bundled-libs/Net/URL.php create mode 100644 bundled-libs/Onyx/RSS.php create mode 100644 bundled-libs/PEAR.php create mode 100644 bundled-libs/Smarty/BUGS create mode 100644 bundled-libs/Smarty/COPYING.lib create mode 100644 bundled-libs/Smarty/ChangeLog create mode 100644 bundled-libs/Smarty/FAQ create mode 100644 bundled-libs/Smarty/INSTALL create mode 100644 bundled-libs/Smarty/NEWS create mode 100644 bundled-libs/Smarty/README create mode 100644 bundled-libs/Smarty/RELEASE_NOTES create mode 100644 bundled-libs/Smarty/libs/Config_File.class.php create mode 100644 bundled-libs/Smarty/libs/Smarty.class.php create mode 100644 bundled-libs/Smarty/libs/Smarty_Compiler.class.php create mode 100644 bundled-libs/Smarty/libs/debug.tpl create mode 100644 bundled-libs/Smarty/libs/internals/core.assemble_plugin_filepath.php create mode 100644 bundled-libs/Smarty/libs/internals/core.assign_smarty_interface.php create mode 100644 bundled-libs/Smarty/libs/internals/core.create_dir_structure.php create mode 100644 bundled-libs/Smarty/libs/internals/core.display_debug_console.php create mode 100644 bundled-libs/Smarty/libs/internals/core.get_include_path.php create mode 100644 bundled-libs/Smarty/libs/internals/core.get_microtime.php create mode 100644 bundled-libs/Smarty/libs/internals/core.get_php_resource.php create mode 100644 bundled-libs/Smarty/libs/internals/core.is_secure.php create mode 100644 bundled-libs/Smarty/libs/internals/core.is_trusted.php create mode 100644 bundled-libs/Smarty/libs/internals/core.load_plugins.php create mode 100644 bundled-libs/Smarty/libs/internals/core.load_resource_plugin.php create mode 100644 bundled-libs/Smarty/libs/internals/core.process_cached_inserts.php create mode 100644 bundled-libs/Smarty/libs/internals/core.process_compiled_include.php create mode 100644 bundled-libs/Smarty/libs/internals/core.read_cache_file.php create mode 100644 bundled-libs/Smarty/libs/internals/core.rm_auto.php create mode 100644 bundled-libs/Smarty/libs/internals/core.rmdir.php create mode 100644 bundled-libs/Smarty/libs/internals/core.run_insert_handler.php create mode 100644 bundled-libs/Smarty/libs/internals/core.smarty_include_php.php create mode 100644 bundled-libs/Smarty/libs/internals/core.write_cache_file.php create mode 100644 bundled-libs/Smarty/libs/internals/core.write_compiled_include.php create mode 100644 bundled-libs/Smarty/libs/internals/core.write_compiled_resource.php create mode 100644 bundled-libs/Smarty/libs/internals/core.write_file.php create mode 100644 bundled-libs/Smarty/libs/plugins/block.textformat.php create mode 100644 bundled-libs/Smarty/libs/plugins/compiler.assign.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.assign_debug_info.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.config_load.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.counter.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.cycle.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.debug.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.eval.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.fetch.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.html_checkboxes.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.html_image.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.html_options.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.html_radios.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.html_select_date.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.html_select_time.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.html_table.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.mailto.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.math.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.popup.php create mode 100644 bundled-libs/Smarty/libs/plugins/function.popup_init.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.capitalize.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.cat.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.count_characters.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.count_paragraphs.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.count_sentences.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.count_words.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.date_format.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.debug_print_var.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.default.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.escape.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.indent.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.lower.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.nl2br.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.regex_replace.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.replace.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.spacify.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.string_format.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.strip.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.strip_tags.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.truncate.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.upper.php create mode 100644 bundled-libs/Smarty/libs/plugins/modifier.wordwrap.php create mode 100644 bundled-libs/Smarty/libs/plugins/outputfilter.trimwhitespace.php create mode 100644 bundled-libs/Smarty/libs/plugins/shared.escape_special_chars.php create mode 100644 bundled-libs/Smarty/libs/plugins/shared.make_timestamp.php create mode 100644 bundled-libs/Text/Wiki.php create mode 100644 bundled-libs/Text/Wiki/Rule.php create mode 100644 bundled-libs/Text/Wiki/Rule/blockquote.php create mode 100644 bundled-libs/Text/Wiki/Rule/bold.php create mode 100644 bundled-libs/Text/Wiki/Rule/break.php create mode 100644 bundled-libs/Text/Wiki/Rule/center.php create mode 100644 bundled-libs/Text/Wiki/Rule/code.php create mode 100644 bundled-libs/Text/Wiki/Rule/colortext.php create mode 100644 bundled-libs/Text/Wiki/Rule/deflist.php create mode 100644 bundled-libs/Text/Wiki/Rule/delimiter.php create mode 100644 bundled-libs/Text/Wiki/Rule/embed.php create mode 100644 bundled-libs/Text/Wiki/Rule/emphasis.php create mode 100644 bundled-libs/Text/Wiki/Rule/entities.php create mode 100644 bundled-libs/Text/Wiki/Rule/freelink.php create mode 100644 bundled-libs/Text/Wiki/Rule/heading.php create mode 100644 bundled-libs/Text/Wiki/Rule/horiz.php create mode 100644 bundled-libs/Text/Wiki/Rule/html.php create mode 100644 bundled-libs/Text/Wiki/Rule/image.php create mode 100644 bundled-libs/Text/Wiki/Rule/include.php create mode 100644 bundled-libs/Text/Wiki/Rule/interwiki.php create mode 100644 bundled-libs/Text/Wiki/Rule/italic.php create mode 100644 bundled-libs/Text/Wiki/Rule/list.php create mode 100644 bundled-libs/Text/Wiki/Rule/newline.php create mode 100644 bundled-libs/Text/Wiki/Rule/paragraph.php create mode 100644 bundled-libs/Text/Wiki/Rule/phpcode.php create mode 100644 bundled-libs/Text/Wiki/Rule/phplookup.php create mode 100644 bundled-libs/Text/Wiki/Rule/prefilter.php create mode 100644 bundled-libs/Text/Wiki/Rule/raw.php create mode 100644 bundled-libs/Text/Wiki/Rule/revise.php create mode 100644 bundled-libs/Text/Wiki/Rule/strong.php create mode 100644 bundled-libs/Text/Wiki/Rule/superscript.php create mode 100644 bundled-libs/Text/Wiki/Rule/table.php create mode 100644 bundled-libs/Text/Wiki/Rule/tighten.php create mode 100644 bundled-libs/Text/Wiki/Rule/toc.php create mode 100644 bundled-libs/Text/Wiki/Rule/tt.php create mode 100644 bundled-libs/Text/Wiki/Rule/url.php create mode 100644 bundled-libs/Text/Wiki/Rule/wikilink.php create mode 100644 bundled-libs/XML/RPC.php create mode 100644 bundled-libs/XML/RPC/Server.php create mode 100644 bundled-libs/create_release.sh create mode 100644 bundled-libs/docs/HomePage.wiki.txt create mode 100644 bundled-libs/docs/SamplePage.wiki.txt create mode 100644 bundled-libs/docs/SmashWordsTogether.wiki.txt create mode 100644 bundled-libs/docs/TextWikiProposal.wiki.txt create mode 100644 bundled-libs/docs/TokenRuleKeys.wiki.txt create mode 100644 bundled-libs/docs/WikiPage.wiki.txt create mode 100644 bundled-libs/docs/WordsSmashedTogether.wiki.txt create mode 100644 bundled-libs/docs/free links.wiki.txt create mode 100644 bundled-libs/docs/index.php create mode 100644 bundled-libs/docs/stylesheet.css create mode 100644 bundled-libs/tests/README create mode 100644 comment.php create mode 100644 deployment/comment.php create mode 100644 deployment/exit.php create mode 100644 deployment/index.php create mode 100644 deployment/rss.php create mode 100644 deployment/serendipity.css.php create mode 100644 deployment/serendipity_admin.php create mode 100644 deployment/serendipity_admin_image_selector.php create mode 100644 deployment/serendipity_config.inc.php create mode 100644 deployment/serendipity_define.js.php create mode 100644 deployment/serendipity_editor.js create mode 100644 deployment/serendipity_xmlrpc.php create mode 100644 deployment/wfwcomment.php create mode 100644 docs/CHANGED_FILES create mode 100644 docs/INSTALL create mode 100644 docs/INSTALL_EMBEDED create mode 100644 docs/INSTALL_SHARED create mode 100644 docs/LICENSE create mode 100644 docs/NEWS create mode 100644 docs/NEWS_OLD create mode 100644 docs/README create mode 100644 docs/UPGRADE create mode 100644 docs/upgrade.sh create mode 100644 exit.php create mode 100644 htmlarea/ChangeLog create mode 100644 htmlarea/dialog.js create mode 100644 htmlarea/examples/2-areas.html create mode 100644 htmlarea/examples/context-menu.html create mode 100644 htmlarea/examples/core.html create mode 100644 htmlarea/examples/css.html create mode 100644 htmlarea/examples/custom.css create mode 100644 htmlarea/examples/full-page.html create mode 100644 htmlarea/examples/fully-loaded.html create mode 100644 htmlarea/examples/index.html create mode 100644 htmlarea/examples/spell-checker.html create mode 100644 htmlarea/examples/table-operations.html create mode 100644 htmlarea/htmlarea.css create mode 100644 htmlarea/htmlarea.js create mode 100644 htmlarea/images/ed_about.gif create mode 100644 htmlarea/images/ed_align_center.gif create mode 100644 htmlarea/images/ed_align_justify.gif create mode 100644 htmlarea/images/ed_align_left.gif create mode 100644 htmlarea/images/ed_align_right.gif create mode 100644 htmlarea/images/ed_blank.gif create mode 100644 htmlarea/images/ed_charmap.gif create mode 100644 htmlarea/images/ed_color_bg.gif create mode 100644 htmlarea/images/ed_color_fg.gif create mode 100644 htmlarea/images/ed_copy.gif create mode 100644 htmlarea/images/ed_custom.gif create mode 100644 htmlarea/images/ed_cut.gif create mode 100644 htmlarea/images/ed_delete.gif create mode 100644 htmlarea/images/ed_format_bold.gif create mode 100644 htmlarea/images/ed_format_italic.gif create mode 100644 htmlarea/images/ed_format_strike.gif create mode 100644 htmlarea/images/ed_format_sub.gif create mode 100644 htmlarea/images/ed_format_sup.gif create mode 100644 htmlarea/images/ed_format_underline.gif create mode 100644 htmlarea/images/ed_help.gif create mode 100644 htmlarea/images/ed_hr.gif create mode 100644 htmlarea/images/ed_html.gif create mode 100644 htmlarea/images/ed_image.gif create mode 100644 htmlarea/images/ed_indent_less.gif create mode 100644 htmlarea/images/ed_indent_more.gif create mode 100644 htmlarea/images/ed_killword.gif create mode 100644 htmlarea/images/ed_left_to_right.gif create mode 100644 htmlarea/images/ed_link.gif create mode 100644 htmlarea/images/ed_list_bullet.gif create mode 100644 htmlarea/images/ed_list_num.gif create mode 100644 htmlarea/images/ed_paste.gif create mode 100644 htmlarea/images/ed_print.gif create mode 100644 htmlarea/images/ed_redo.gif create mode 100644 htmlarea/images/ed_right_to_left.gif create mode 100644 htmlarea/images/ed_rmformat.gif create mode 100644 htmlarea/images/ed_s9yimage.gif create mode 100644 htmlarea/images/ed_save.gif create mode 100644 htmlarea/images/ed_save.png create mode 100644 htmlarea/images/ed_show_border.gif create mode 100644 htmlarea/images/ed_splitcel.gif create mode 100644 htmlarea/images/ed_undo.gif create mode 100644 htmlarea/images/fullscreen_maximize.gif create mode 100644 htmlarea/images/fullscreen_minimize.gif create mode 100644 htmlarea/images/insert_table.gif create mode 100644 htmlarea/index.html create mode 100644 htmlarea/lang/b5.js create mode 100644 htmlarea/lang/ch.js create mode 100644 htmlarea/lang/cz.js create mode 100644 htmlarea/lang/da.js create mode 100644 htmlarea/lang/de.js create mode 100644 htmlarea/lang/ee.js create mode 100644 htmlarea/lang/el.js create mode 100644 htmlarea/lang/en.js create mode 100644 htmlarea/lang/es.js create mode 100644 htmlarea/lang/fi.js create mode 100644 htmlarea/lang/fr.js create mode 100644 htmlarea/lang/gb.js create mode 100644 htmlarea/lang/he.js create mode 100644 htmlarea/lang/hu.js create mode 100644 htmlarea/lang/it.js create mode 100644 htmlarea/lang/ja-euc.js create mode 100644 htmlarea/lang/ja-jis.js create mode 100644 htmlarea/lang/ja-sjis.js create mode 100644 htmlarea/lang/ja-utf8.js create mode 100644 htmlarea/lang/lt.js create mode 100644 htmlarea/lang/lv.js create mode 100644 htmlarea/lang/nb.js create mode 100644 htmlarea/lang/nl.js create mode 100644 htmlarea/lang/no.js create mode 100644 htmlarea/lang/pl.js create mode 100644 htmlarea/license.txt create mode 100644 htmlarea/plugins/CSS/css.js create mode 100644 htmlarea/plugins/CSS/lang/en.js create mode 100644 htmlarea/plugins/ContextMenu/context-menu.js create mode 100644 htmlarea/plugins/ContextMenu/lang/de.js create mode 100644 htmlarea/plugins/ContextMenu/lang/el.js create mode 100644 htmlarea/plugins/ContextMenu/lang/en.js create mode 100644 htmlarea/plugins/ContextMenu/lang/nl.js create mode 100644 htmlarea/plugins/ContextMenu/menu.css create mode 100644 htmlarea/plugins/FullPage/full-page.js create mode 100644 htmlarea/plugins/FullPage/img/docprop.gif create mode 100644 htmlarea/plugins/FullPage/lang/en.js create mode 100644 htmlarea/plugins/FullPage/lang/ro.js create mode 100644 htmlarea/plugins/FullPage/popups/docprop.html create mode 100644 htmlarea/plugins/FullPage/test.html create mode 100644 htmlarea/plugins/TableOperations/img/cell-delete.gif create mode 100644 htmlarea/plugins/TableOperations/img/cell-insert-after.gif create mode 100644 htmlarea/plugins/TableOperations/img/cell-insert-before.gif create mode 100644 htmlarea/plugins/TableOperations/img/cell-merge.gif create mode 100644 htmlarea/plugins/TableOperations/img/cell-prop.gif create mode 100644 htmlarea/plugins/TableOperations/img/cell-split.gif create mode 100644 htmlarea/plugins/TableOperations/img/col-delete.gif create mode 100644 htmlarea/plugins/TableOperations/img/col-insert-after.gif create mode 100644 htmlarea/plugins/TableOperations/img/col-insert-before.gif create mode 100644 htmlarea/plugins/TableOperations/img/col-split.gif create mode 100644 htmlarea/plugins/TableOperations/img/row-delete.gif create mode 100644 htmlarea/plugins/TableOperations/img/row-insert-above.gif create mode 100644 htmlarea/plugins/TableOperations/img/row-insert-under.gif create mode 100644 htmlarea/plugins/TableOperations/img/row-prop.gif create mode 100644 htmlarea/plugins/TableOperations/img/row-split.gif create mode 100644 htmlarea/plugins/TableOperations/img/table-prop.gif create mode 100644 htmlarea/plugins/TableOperations/lang/cz.js create mode 100644 htmlarea/plugins/TableOperations/lang/da.js create mode 100644 htmlarea/plugins/TableOperations/lang/de.js create mode 100644 htmlarea/plugins/TableOperations/lang/el.js create mode 100644 htmlarea/plugins/TableOperations/lang/en.js create mode 100644 htmlarea/plugins/TableOperations/lang/fi.js create mode 100644 htmlarea/plugins/TableOperations/lang/hu.js create mode 100644 htmlarea/plugins/TableOperations/lang/it.js create mode 100644 htmlarea/plugins/TableOperations/lang/nl.js create mode 100644 htmlarea/plugins/TableOperations/lang/no.js create mode 100644 htmlarea/plugins/TableOperations/lang/ro.js create mode 100644 htmlarea/plugins/TableOperations/table-operations.js create mode 100644 htmlarea/popupdiv.js create mode 100644 htmlarea/popups/about.html create mode 100644 htmlarea/popups/blank.html create mode 100644 htmlarea/popups/custom2.html create mode 100644 htmlarea/popups/editor_help.html create mode 100644 htmlarea/popups/fullscreen.html create mode 100644 htmlarea/popups/insert_image.html create mode 100644 htmlarea/popups/insert_table.html create mode 100644 htmlarea/popups/link.html create mode 100644 htmlarea/popups/old-fullscreen.html create mode 100644 htmlarea/popups/old_insert_image.html create mode 100644 htmlarea/popups/popup.js create mode 100644 htmlarea/popups/select_color.html create mode 100644 htmlarea/popupwin.js create mode 100644 htmlarea/reference.html create mode 100644 htmlarea/release-notes.html create mode 100644 include/admin/category.inc.php create mode 100644 include/admin/comments.inc.php create mode 100644 include/admin/configuration.inc.php create mode 100644 include/admin/entries.inc.php create mode 100644 include/admin/entries_overview.inc.php create mode 100644 include/admin/export.inc.php create mode 100644 include/admin/images.inc.php create mode 100644 include/admin/import.inc.php create mode 100644 include/admin/importers/b2evolution.inc.php create mode 100644 include/admin/importers/bblog.inc.php create mode 100644 include/admin/importers/bmachine.inc.php create mode 100644 include/admin/importers/geeklog.inc.php create mode 100644 include/admin/importers/generic.inc.php create mode 100644 include/admin/importers/movabletype.inc.php create mode 100644 include/admin/importers/nucleus.inc.php create mode 100644 include/admin/importers/phpbb.inc.php create mode 100644 include/admin/importers/pmachine.inc.php create mode 100644 include/admin/importers/sunlog.inc.php create mode 100644 include/admin/importers/textpattern.inc.php create mode 100644 include/admin/importers/wordpress.inc.php create mode 100644 include/admin/installer.inc.php create mode 100644 include/admin/overview.inc.php create mode 100644 include/admin/personal.inc.php create mode 100644 include/admin/plugins.inc.php create mode 100644 include/admin/templates.inc.php create mode 100644 include/admin/upgrader.inc.php create mode 100644 include/admin/users.inc.php create mode 100644 include/compat.inc.php create mode 100644 include/db/db.inc.php create mode 100644 include/db/mysql.inc.php create mode 100644 include/db/mysqli.inc.php create mode 100644 include/db/postgres.inc.php create mode 100644 include/db/sqlite.inc.php create mode 100644 include/functions.inc.php create mode 100644 include/functions_comments.inc.php create mode 100644 include/functions_config.inc.php create mode 100644 include/functions_entries.inc.php create mode 100644 include/functions_images.inc.php create mode 100644 include/functions_installer.inc.php create mode 100644 include/functions_smarty.inc.php create mode 100644 include/functions_trackbacks.inc.php create mode 100644 include/functions_upgrader.inc.php create mode 100644 include/genpage.inc.php create mode 100644 include/lang.inc.php create mode 100644 include/plugin_api.inc.php create mode 100644 include/plugin_internal.inc.php create mode 100644 include/tpl/config_local.inc.php create mode 100644 include/tpl/config_personal.inc.php create mode 100644 include/tpl/htaccess_cgi_errordocs.tpl create mode 100644 include/tpl/htaccess_cgi_normal.tpl create mode 100644 include/tpl/htaccess_cgi_rewrite.tpl create mode 100644 include/tpl/htaccess_errordocs.tpl create mode 100644 include/tpl/htaccess_normal.tpl create mode 100644 include/tpl/htaccess_rewrite.tpl create mode 100644 index.php create mode 100644 lang/serendipity_lang_bg.inc.php create mode 100644 lang/serendipity_lang_cn.inc.php create mode 100644 lang/serendipity_lang_cs.inc.php create mode 100644 lang/serendipity_lang_cz.inc.php create mode 100644 lang/serendipity_lang_da.inc.php create mode 100644 lang/serendipity_lang_de.inc.php create mode 100644 lang/serendipity_lang_en.inc.php create mode 100644 lang/serendipity_lang_es.inc.php create mode 100644 lang/serendipity_lang_fa.inc.php create mode 100644 lang/serendipity_lang_fi.inc.php create mode 100644 lang/serendipity_lang_fr.inc.php create mode 100644 lang/serendipity_lang_is.inc.php create mode 100644 lang/serendipity_lang_it.inc.php create mode 100644 lang/serendipity_lang_ja.inc.php create mode 100644 lang/serendipity_lang_ko.inc.php create mode 100644 lang/serendipity_lang_nl.inc.php create mode 100644 lang/serendipity_lang_no.inc.php create mode 100644 lang/serendipity_lang_pt.inc.php create mode 100644 lang/serendipity_lang_ru.inc.php create mode 100644 lang/serendipity_lang_tn.inc.php create mode 100644 lang/serendipity_lang_tw.inc.php create mode 100644 lang/serendipity_lang_zh.inc.php create mode 100644 plugins/serendipity_event_bbcode/lang_ja.inc.php create mode 100644 plugins/serendipity_event_bbcode/serendipity_event_bbcode.php create mode 100644 plugins/serendipity_event_blogpdf/font/courier.php create mode 100644 plugins/serendipity_event_blogpdf/font/helvetica.php create mode 100644 plugins/serendipity_event_blogpdf/font/helveticab.php create mode 100644 plugins/serendipity_event_blogpdf/font/helveticabi.php create mode 100644 plugins/serendipity_event_blogpdf/font/helveticai.php create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1250.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1251.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1252.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1253.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1254.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1255.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1257.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp1258.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/cp874.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-1.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-11.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-15.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-16.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-2.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-4.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-5.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-7.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/iso-8859-9.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/koi8-r.map create mode 100644 plugins/serendipity_event_blogpdf/font/makefont/koi8-u.map create mode 100644 plugins/serendipity_event_blogpdf/font/symbol.php create mode 100644 plugins/serendipity_event_blogpdf/font/times.php create mode 100644 plugins/serendipity_event_blogpdf/font/timesb.php create mode 100644 plugins/serendipity_event_blogpdf/font/timesbi.php create mode 100644 plugins/serendipity_event_blogpdf/font/timesi.php create mode 100644 plugins/serendipity_event_blogpdf/font/zapfdingbats.php create mode 100644 plugins/serendipity_event_blogpdf/fpdf.php create mode 100644 plugins/serendipity_event_blogpdf/lang_ja.inc.php create mode 100644 plugins/serendipity_event_blogpdf/serendipity_event_blogpdf.php create mode 100644 plugins/serendipity_event_browsercompatibility/lang_ja.inc.php create mode 100644 plugins/serendipity_event_browsercompatibility/pngbehavior.htc create mode 100644 plugins/serendipity_event_browsercompatibility/serendipity_event_browsercompatibility.php create mode 100644 plugins/serendipity_event_contentrewrite/lang_ja.inc.php create mode 100644 plugins/serendipity_event_contentrewrite/serendipity_event_contentrewrite.php create mode 100644 plugins/serendipity_event_creativecommons/lang_ja.inc.php create mode 100644 plugins/serendipity_event_creativecommons/serendipity_event_creativecommons.php create mode 100644 plugins/serendipity_event_emoticate/lang_is.inc.php create mode 100644 plugins/serendipity_event_emoticate/lang_ja.inc.php create mode 100644 plugins/serendipity_event_emoticate/serendipity_event_emoticate.php create mode 100644 plugins/serendipity_event_entryproperties/lang_ja.inc.php create mode 100644 plugins/serendipity_event_entryproperties/serendipity_event_entryproperties.php create mode 100644 plugins/serendipity_event_htmlvalidator/lang_ja.inc.php create mode 100644 plugins/serendipity_event_htmlvalidator/serendipity_event_htmlvalidator.php create mode 100644 plugins/serendipity_event_karma/lang_ja.inc.php create mode 100644 plugins/serendipity_event_karma/serendipity_event_karma.php create mode 100644 plugins/serendipity_event_livesearch/serendipity_event_livesearch.js create mode 100644 plugins/serendipity_event_livesearch/serendipity_event_livesearch.php create mode 100644 plugins/serendipity_event_mailer/lang_ja.inc.php create mode 100644 plugins/serendipity_event_mailer/serendipity_event_mailer.php create mode 100644 plugins/serendipity_event_nl2br/lang_ja.inc.php create mode 100644 plugins/serendipity_event_nl2br/serendipity_event_nl2br.php create mode 100644 plugins/serendipity_event_s9ymarkup/lang_is.inc.php create mode 100644 plugins/serendipity_event_s9ymarkup/lang_ja.inc.php create mode 100644 plugins/serendipity_event_s9ymarkup/serendipity_event_s9ymarkup.php create mode 100644 plugins/serendipity_event_searchhighlight/serendipity_event_searchhighlight.php create mode 100644 plugins/serendipity_event_spamblock/36daysago.ttf create mode 100644 plugins/serendipity_event_spamblock/36daysago.txt create mode 100644 plugins/serendipity_event_spamblock/Vera.ttf create mode 100644 plugins/serendipity_event_spamblock/VeraSe.ttf create mode 100644 plugins/serendipity_event_spamblock/captcha_2.png create mode 100644 plugins/serendipity_event_spamblock/captcha_3.png create mode 100644 plugins/serendipity_event_spamblock/captcha_4.png create mode 100644 plugins/serendipity_event_spamblock/captcha_7.png create mode 100644 plugins/serendipity_event_spamblock/captcha_9.png create mode 100644 plugins/serendipity_event_spamblock/captcha_a.png create mode 100644 plugins/serendipity_event_spamblock/captcha_b.png create mode 100644 plugins/serendipity_event_spamblock/captcha_c.png create mode 100644 plugins/serendipity_event_spamblock/captcha_d.png create mode 100644 plugins/serendipity_event_spamblock/captcha_e.png create mode 100644 plugins/serendipity_event_spamblock/captcha_f.png create mode 100644 plugins/serendipity_event_spamblock/captcha_h.png create mode 100644 plugins/serendipity_event_spamblock/captcha_j.png create mode 100644 plugins/serendipity_event_spamblock/captcha_k.png create mode 100644 plugins/serendipity_event_spamblock/captcha_l.png create mode 100644 plugins/serendipity_event_spamblock/captcha_m.png create mode 100644 plugins/serendipity_event_spamblock/captcha_n.png create mode 100644 plugins/serendipity_event_spamblock/captcha_p.png create mode 100644 plugins/serendipity_event_spamblock/captcha_q.png create mode 100644 plugins/serendipity_event_spamblock/captcha_r.png create mode 100644 plugins/serendipity_event_spamblock/captcha_t.png create mode 100644 plugins/serendipity_event_spamblock/captcha_u.png create mode 100644 plugins/serendipity_event_spamblock/captcha_v.png create mode 100644 plugins/serendipity_event_spamblock/captcha_w.png create mode 100644 plugins/serendipity_event_spamblock/captcha_x.png create mode 100644 plugins/serendipity_event_spamblock/captcha_y.png create mode 100644 plugins/serendipity_event_spamblock/captcha_z.png create mode 100644 plugins/serendipity_event_spamblock/chumbly.ttf create mode 100644 plugins/serendipity_event_spamblock/chumbly.txt create mode 100644 plugins/serendipity_event_spamblock/lang_ja.inc.php create mode 100644 plugins/serendipity_event_spamblock/serendipity_event_spamblock.php create mode 100644 plugins/serendipity_event_spartacus/lang_ja.inc.php create mode 100644 plugins/serendipity_event_spartacus/serendipity_event_spartacus.php create mode 100644 plugins/serendipity_event_statistics/lang_cz.php create mode 100644 plugins/serendipity_event_statistics/lang_ja.inc.php create mode 100644 plugins/serendipity_event_statistics/serendipity_event_statistics.php create mode 100644 plugins/serendipity_event_templatechooser/lang_ja.inc.php create mode 100644 plugins/serendipity_event_templatechooser/serendipity_event_templatechooser.php create mode 100644 plugins/serendipity_event_textile/lang_ja.inc.php create mode 100644 plugins/serendipity_event_textile/serendipity_event_textile.php create mode 100644 plugins/serendipity_event_textile/textile.php create mode 100644 plugins/serendipity_event_textwiki/lang_ja.inc.php create mode 100644 plugins/serendipity_event_textwiki/serendipity_event_textwiki.php create mode 100644 plugins/serendipity_event_trackexits/serendipity_event_trackexits.php create mode 100644 plugins/serendipity_event_weblogping/lang_ja.inc.php create mode 100644 plugins/serendipity_event_weblogping/serendipity_event_weblogping.php create mode 100644 plugins/serendipity_event_weblogping/servicesdb_en.inc.php create mode 100644 plugins/serendipity_event_weblogping/servicesdb_ja.inc.php create mode 100644 plugins/serendipity_event_xhtmlcleanup/serendipity_event_xhtmlcleanup.php create mode 100644 plugins/serendipity_plugin_comments/lang_is.inc.php create mode 100644 plugins/serendipity_plugin_comments/lang_ja.inc.php create mode 100644 plugins/serendipity_plugin_comments/serendipity_plugin_comments.php create mode 100644 plugins/serendipity_plugin_creativecommons/lang_ja.inc.php create mode 100644 plugins/serendipity_plugin_creativecommons/serendipity_plugin_creativecommons.php create mode 100644 plugins/serendipity_plugin_entrylinks/serendipity_plugin_entrylinks.php create mode 100644 plugins/serendipity_plugin_eventwrapper/serendipity_plugin_eventwrapper.php create mode 100644 plugins/serendipity_plugin_history/lang_ja.inc.php create mode 100644 plugins/serendipity_plugin_history/serendipity_plugin_history.php create mode 100644 plugins/serendipity_plugin_recententries/lang_is.inc.php create mode 100644 plugins/serendipity_plugin_recententries/lang_ja.inc.php create mode 100644 plugins/serendipity_plugin_recententries/serendipity_plugin_recententries.php create mode 100644 plugins/serendipity_plugin_remoterss/lang_ja.inc.php create mode 100644 plugins/serendipity_plugin_remoterss/serendipity_plugin_remoterss.php create mode 100644 plugins/serendipity_plugin_shoutbox/lang_ja.inc.php create mode 100644 plugins/serendipity_plugin_shoutbox/serendipity_plugin_shoutbox.php create mode 100644 plugins/serendipity_plugin_templatedropdown/lang_ja.inc.php create mode 100644 plugins/serendipity_plugin_templatedropdown/serendipity_plugin_templatedropdown.php create mode 100644 rss.php create mode 100644 serendipity.css.php create mode 100644 serendipity_admin.php create mode 100644 serendipity_admin_image_selector.php create mode 100644 serendipity_config.inc.php create mode 100644 serendipity_define.js.php create mode 100644 serendipity_editor.js create mode 100644 serendipity_xmlrpc.php create mode 100644 sql/db.sql create mode 100644 sql/db_update_0.2_0.3_mysql.sql create mode 100644 sql/db_update_0.2_0.3_postgres.sql create mode 100644 sql/db_update_0.3_0.4_mysql.sql create mode 100644 sql/db_update_0.3_0.4_postgres.sql create mode 100644 sql/db_update_0.5.1_0.6_mysql.sql create mode 100644 sql/db_update_0.5.1_0.6_postgres.sql create mode 100644 sql/db_update_0.5_0.5.1_mysql.sql create mode 100644 sql/db_update_0.5_0.5.1_postgres.sql create mode 100644 sql/db_update_0.6.10_0.6.11_mysql.sql create mode 100644 sql/db_update_0.6.10_0.6.11_postgres.sql create mode 100644 sql/db_update_0.6.1_0.6.2_mysql.sql create mode 100644 sql/db_update_0.6.1_0.6.2_postgres.sql create mode 100644 sql/db_update_0.6.2_0.6.3_mysql.sql create mode 100644 sql/db_update_0.6.2_0.6.3_postgres.sql create mode 100644 sql/db_update_0.6.3_0.6.4_mysql.sql create mode 100644 sql/db_update_0.6.3_0.6.4_postgres.sql create mode 100644 sql/db_update_0.6.4_0.6.5_mysql.sql create mode 100644 sql/db_update_0.6.4_0.6.5_postgres.sql create mode 100644 sql/db_update_0.6.5_0.6.6_mysql.sql create mode 100644 sql/db_update_0.6.5_0.6.6_postgres.sql create mode 100644 sql/db_update_0.6.6_0.6.7_mysql.sql create mode 100644 sql/db_update_0.6.6_0.6.7_postgres.sql create mode 100644 sql/db_update_0.6.8_0.6.9_mysql.sql create mode 100644 sql/db_update_0.6.8_0.6.9_postgres.sql create mode 100644 sql/db_update_0.6.9_0.7.0_mysql.sql create mode 100644 sql/db_update_0.6.9_0.7.0_postgresql.sql create mode 100644 sql/db_update_0.6_0.6.1_mysql.sql create mode 100644 sql/db_update_0.6_0.6.1_postgres.sql create mode 100644 sql/db_update_0.8-alpha10_0.8-alpha11_mysql.sql create mode 100644 sql/db_update_0.8-alpha11_0.8-alpha12_mysql.sql create mode 100644 sql/db_update_0.8-alpha11_0.8-alpha12_postgres.sql create mode 100644 sql/db_update_0.8-alpha11_0.8-alpha12_sqlite.sql create mode 100644 sql/db_update_0.8-alpha12_0.8-alpha13_mysql.sql create mode 100644 sql/db_update_0.8-alpha12_0.8-alpha13_postgres.sql create mode 100644 sql/db_update_0.8-alpha12_0.8-alpha13_sqlite.sql create mode 100644 sql/db_update_0.8-alpha1_0.8-alpha2_mysql.sql create mode 100644 sql/db_update_0.8-alpha4_0.8-alpha5_mysql.sql create mode 100644 sql/db_update_0.8-alpha4_0.8-alpha5_postgres.sql create mode 100644 sql/db_update_0.8-alpha4_0.8-alpha5_sqlite.sql create mode 100644 sql/db_update_0.8-alpha5_0.8-alpha6_mysql.sql create mode 100644 sql/db_update_0.8-alpha5_0.8-alpha6_postgres.sql create mode 100644 sql/db_update_0.8-alpha5_0.8-alpha6_sqlite.sql create mode 100644 sql/db_update_0.8-beta3_0.8-beta4_mysql.sql create mode 100644 sql/db_update_0.8-beta3_0.8-beta4_postgres.sql create mode 100644 sql/db_update_0.8-beta3_0.8-beta4_sqlite.sql create mode 100644 sql/db_update_0.8-beta5_0.8-beta6_mysql.sql create mode 100644 sql/db_update_0.8-beta5_0.8-beta6_postgres.sql create mode 100644 sql/db_update_0.8-beta5_0.8-beta6_sqlite.sql create mode 100644 templates/HOWTO create mode 100644 templates/blue/htmlarea.css create mode 100644 templates/blue/info.txt create mode 100644 templates/blue/preview.png create mode 100644 templates/blue/style.css create mode 100644 templates/default-rtl/admin/img/background.jpg create mode 100644 templates/default-rtl/admin/img/banner_background.png create mode 100644 templates/default-rtl/admin/img/button_background.png create mode 100644 templates/default-rtl/admin/img/infobar_background.png create mode 100644 templates/default-rtl/admin/img/menu_background.png create mode 100644 templates/default-rtl/admin/img/menuheader_background.png create mode 100644 templates/default-rtl/admin/style.css create mode 100644 templates/default-rtl/htmlarea.css create mode 100644 templates/default-rtl/img/background.png create mode 100644 templates/default-rtl/info.txt create mode 100644 templates/default-rtl/preview.png create mode 100644 templates/default-rtl/style.css create mode 100644 templates/default/admin/img/accept.png create mode 100644 templates/default/admin/img/background.jpg create mode 100644 templates/default/admin/img/banner_background.png create mode 100644 templates/default/admin/img/big_delete.png create mode 100644 templates/default/admin/img/big_rename.png create mode 100644 templates/default/admin/img/big_resize.png create mode 100644 templates/default/admin/img/big_rotate_ccw.png create mode 100644 templates/default/admin/img/big_rotate_cw.png create mode 100644 templates/default/admin/img/big_zoom.png create mode 100644 templates/default/admin/img/button_background.png create mode 100644 templates/default/admin/img/clock.png create mode 100644 templates/default/admin/img/clock_future.png create mode 100644 templates/default/admin/img/configure.png create mode 100644 templates/default/admin/img/delete.png create mode 100644 templates/default/admin/img/downarrow.png create mode 100644 templates/default/admin/img/edit.png create mode 100644 templates/default/admin/img/folder.png create mode 100644 templates/default/admin/img/infobar_background.png create mode 100644 templates/default/admin/img/install.png create mode 100644 templates/default/admin/img/install_now.png create mode 100644 templates/default/admin/img/install_template.png create mode 100644 templates/default/admin/img/menu_background.png create mode 100644 templates/default/admin/img/menuheader_background.png create mode 100644 templates/default/admin/img/menuitem.png create mode 100644 templates/default/admin/img/mime_unknown.png create mode 100644 templates/default/admin/img/next.png create mode 100644 templates/default/admin/img/previous.png create mode 100644 templates/default/admin/img/rotate.png create mode 100644 templates/default/admin/img/thumbnail.png create mode 100644 templates/default/admin/img/uparrow.png create mode 100644 templates/default/admin/img/upgrade_now.png create mode 100644 templates/default/admin/img/user_admin.png create mode 100644 templates/default/admin/img/user_chief.png create mode 100644 templates/default/admin/img/user_editor.png create mode 100644 templates/default/admin/img/zoom.png create mode 100644 templates/default/admin/style.css create mode 100644 templates/default/atom.css create mode 100644 templates/default/commentform.tpl create mode 100644 templates/default/commentpopup.tpl create mode 100644 templates/default/comments.tpl create mode 100644 templates/default/content.tpl create mode 100644 templates/default/entries.tpl create mode 100644 templates/default/entries_archives.tpl create mode 100644 templates/default/entries_summary.tpl create mode 100644 templates/default/htmlarea.css create mode 100644 templates/default/img/back.png create mode 100644 templates/default/img/background.png create mode 100644 templates/default/img/blank.gif create mode 100644 templates/default/img/blank.png create mode 100644 templates/default/img/delete.png create mode 100644 templates/default/img/down.png create mode 100644 templates/default/img/emoticons/cool.png create mode 100644 templates/default/img/emoticons/cry.png create mode 100644 templates/default/img/emoticons/eek.png create mode 100644 templates/default/img/emoticons/laugh.png create mode 100644 templates/default/img/emoticons/normal.png create mode 100644 templates/default/img/emoticons/sad.png create mode 100644 templates/default/img/emoticons/smile.png create mode 100644 templates/default/img/emoticons/tongue.png create mode 100644 templates/default/img/emoticons/wink.png create mode 100644 templates/default/img/forward.png create mode 100644 templates/default/img/graph_bar_horisontal.png create mode 100644 templates/default/img/img_align_left.png create mode 100644 templates/default/img/img_align_right.png create mode 100644 templates/default/img/img_align_top.png create mode 100644 templates/default/img/minus.png create mode 100644 templates/default/img/norights.png create mode 100644 templates/default/img/plus.png create mode 100644 templates/default/img/rename.png create mode 100644 templates/default/img/s9y_banner_small.png create mode 100644 templates/default/img/scale.png create mode 100644 templates/default/img/somerights20.gif create mode 100644 templates/default/img/up.png create mode 100644 templates/default/img/xml.gif create mode 100644 templates/default/img/zoom.png create mode 100644 templates/default/index.tpl create mode 100644 templates/default/info.txt create mode 100644 templates/default/plugin_calendar.tpl create mode 100644 templates/default/preview.png create mode 100644 templates/default/sidebar.tpl create mode 100644 templates/default/style.css create mode 100644 templates/default/trackbacks.tpl create mode 100644 templates/idea/img/I_had_an_idea.jpg create mode 100644 templates/idea/img/bullet.gif create mode 100644 templates/idea/img/clock_face_messy_paint_runs.jpg create mode 100644 templates/idea/img/quote.gif create mode 100644 templates/idea/info.txt create mode 100644 templates/idea/preview.png create mode 100644 templates/idea/style.css create mode 100644 templates/kubrick/comments.tpl create mode 100644 templates/kubrick/config.inc.php create mode 100644 templates/kubrick/entries.tpl create mode 100644 templates/kubrick/images/kubrickbg.jpg create mode 100644 templates/kubrick/images/kubrickbgcolor.jpg create mode 100644 templates/kubrick/images/kubrickbgwide.jpg create mode 100644 templates/kubrick/images/kubrickfooter.jpg create mode 100644 templates/kubrick/images/kubrickheader.jpg create mode 100644 templates/kubrick/images/kubricklogo.jpg create mode 100644 templates/kubrick/images/kubrickportrait.png create mode 100644 templates/kubrick/index.tpl create mode 100644 templates/kubrick/info.txt create mode 100644 templates/kubrick/lang_de.inc.php create mode 100644 templates/kubrick/lang_en.inc.php create mode 100644 templates/kubrick/preview.png create mode 100644 templates/kubrick/sidebar.tpl create mode 100644 templates/kubrick/style.css create mode 100644 templates/kubrick/trackbacks.tpl create mode 100644 templates/moz-modern/htmlarea.css create mode 100644 templates/moz-modern/img/back.png create mode 100644 templates/moz-modern/img/background.png create mode 100644 templates/moz-modern/img/background2.png create mode 100644 templates/moz-modern/img/forward.png create mode 100644 templates/moz-modern/index.tpl create mode 100644 templates/moz-modern/info.txt create mode 100644 templates/moz-modern/preview.png create mode 100644 templates/moz-modern/style.css create mode 100644 templates/mt-clean/info.txt create mode 100644 templates/mt-clean/preview.png create mode 100644 templates/mt-clean/style.css create mode 100644 templates/mt-georgiablue/info.txt create mode 100644 templates/mt-georgiablue/preview.png create mode 100644 templates/mt-georgiablue/style.css create mode 100644 templates/mt-gettysburg/info.txt create mode 100644 templates/mt-gettysburg/preview.png create mode 100644 templates/mt-gettysburg/style.css create mode 100644 templates/mt-plainjane/info.txt create mode 100644 templates/mt-plainjane/preview.png create mode 100644 templates/mt-plainjane/style.css create mode 100644 templates/mt-rusty/info.txt create mode 100644 templates/mt-rusty/preview.png create mode 100644 templates/mt-rusty/style.css create mode 100644 templates/mt-stormy/inactive.txt create mode 100644 templates/mt-stormy/info.txt create mode 100644 templates/mt-stormy/style.css create mode 100644 templates/mt-trendy/htmlarea.css create mode 100644 templates/mt-trendy/img/back.png create mode 100644 templates/mt-trendy/img/forward.png create mode 100644 templates/mt-trendy/info.txt create mode 100644 templates/mt-trendy/preview.png create mode 100644 templates/mt-trendy/style.css create mode 100644 templates/mt3-chalkboard/info.txt create mode 100644 templates/mt3-chalkboard/preview.png create mode 100644 templates/mt3-chalkboard/style.css create mode 100644 templates/mt3-gettysburg/info.txt create mode 100644 templates/mt3-gettysburg/preview.png create mode 100644 templates/mt3-gettysburg/style.css create mode 100644 templates/mt3-independence/info.txt create mode 100644 templates/mt3-independence/preview.png create mode 100644 templates/mt3-independence/style.css create mode 100644 templates/mt3-squash/info.txt create mode 100644 templates/mt3-squash/preview.png create mode 100644 templates/mt3-squash/style.css create mode 100644 templates/newspaper/htmlarea.css create mode 100644 templates/newspaper/img/shadowb.png create mode 100644 templates/newspaper/img/shadowbl.png create mode 100644 templates/newspaper/img/shadowbr.png create mode 100644 templates/newspaper/img/shadowr.png create mode 100644 templates/newspaper/img/shadowt.png create mode 100644 templates/newspaper/info.txt create mode 100644 templates/newspaper/layout.php create mode 100644 templates/newspaper/preview.png create mode 100644 templates/newspaper/style.css create mode 100644 templates/wp/atom.css create mode 100644 templates/wp/commentform.tpl create mode 100644 templates/wp/comments.tpl create mode 100644 templates/wp/content.tpl create mode 100644 templates/wp/entries.tpl create mode 100644 templates/wp/entries_archives.tpl create mode 100644 templates/wp/entries_summary.tpl create mode 100644 templates/wp/htmlarea.css create mode 100644 templates/wp/index.tpl create mode 100644 templates/wp/info.txt create mode 100644 templates/wp/plugin_calendar.tpl create mode 100644 templates/wp/sidebar.tpl create mode 100644 templates/wp/trackbacks.tpl create mode 100644 templates/wp/wp-layout.css create mode 100644 wfwcomment.php diff --git a/bundled-libs/Cache/Lite.php b/bundled-libs/Cache/Lite.php new file mode 100644 index 0000000..9b39342 --- /dev/null +++ b/bundled-libs/Cache/Lite.php @@ -0,0 +1,615 @@ + +* +* @package Cache_Lite +* @category Caching +* @version $Id: Lite.php,v 1.1 2004/12/02 14:23:52 nohn Exp $ +* @author Fabien MARTY +*/ + +define('CACHE_LITE_ERROR_RETURN', 1); +define('CACHE_LITE_ERROR_DIE', 8); + +class Cache_Lite +{ + + // --- Private properties --- + + /** + * Directory where to put the cache files + * (make sure to add a trailing slash) + * + * @var string $_cacheDir + */ + var $_cacheDir = '/tmp/'; + + /** + * Enable / disable caching + * + * (can be very usefull for the debug of cached scripts) + * + * @var boolean $_caching + */ + var $_caching = true; + + /** + * Cache lifetime (in seconds) + * + * @var int $_lifeTime + */ + var $_lifeTime = 3600; + + /** + * Enable / disable fileLocking + * + * (can avoid cache corruption under bad circumstances) + * + * @var boolean $_fileLocking + */ + var $_fileLocking = true; + + /** + * Timestamp of the last valid cache + * + * @var int $_refreshTime + */ + var $_refreshTime; + + /** + * File name (with path) + * + * @var string $_file + */ + var $_file; + + /** + * Enable / disable write control (the cache is read just after writing to detect corrupt entries) + * + * Enable write control will lightly slow the cache writing but not the cache reading + * Write control can detect some corrupt cache files but maybe it's not a perfect control + * + * @var boolean $_writeControl + */ + var $_writeControl = true; + + /** + * Enable / disable read control + * + * If enabled, a control key is embeded in cache file and this key is compared with the one + * calculated after the reading. + * + * @var boolean $_writeControl + */ + var $_readControl = true; + + /** + * Type of read control (only if read control is enabled) + * + * Available values are : + * 'md5' for a md5 hash control (best but slowest) + * 'crc32' for a crc32 hash control (lightly less safe but faster, better choice) + * 'strlen' for a length only test (fastest) + * + * @var boolean $_readControlType + */ + var $_readControlType = 'crc32'; + + /** + * Pear error mode (when raiseError is called) + * + * (see PEAR doc) + * + * @see setToDebug() + * @var int $_pearErrorMode + */ + var $_pearErrorMode = CACHE_LITE_ERROR_RETURN; + + /** + * Current cache id + * + * @var string $_id + */ + var $_id; + + /** + * Current cache group + * + * @var string $_group + */ + var $_group; + + /** + * Enable / Disable "Memory Caching" + * + * NB : There is no lifetime for memory caching ! + * + * @var boolean $_memoryCaching + */ + var $_memoryCaching = false; + + /** + * Enable / Disable "Only Memory Caching" + * (be carefull, memory caching is "beta quality") + * + * @var boolean $_onlyMemoryCaching + */ + var $_onlyMemoryCaching = false; + + /** + * Memory caching array + * + * @var array $_memoryCachingArray + */ + var $_memoryCachingArray = array(); + + /** + * Memory caching counter + * + * @var int $memoryCachingCounter + */ + var $_memoryCachingCounter = 0; + + /** + * Memory caching limit + * + * @var int $memoryCachingLimit + */ + var $_memoryCachingLimit = 1000; + + /** + * File Name protection + * + * if set to true, you can use any cache id or group name + * if set to false, it can be faster but cache ids and group names + * will be used directly in cache file names so be carefull with + * special characters... + * + * @var boolean $fileNameProtection + */ + var $_fileNameProtection = true; + + /** + * Enable / disable automatic serialization + * + * it can be used to save directly datas which aren't strings + * (but it's slower) + * + * @var boolean $_serialize + */ + var $_automaticSerialization = false; + + // --- Public methods --- + + /** + * Constructor + * + * $options is an assoc. Available options are : + * $options = array( + * 'cacheDir' => directory where to put the cache files (string), + * 'caching' => enable / disable caching (boolean), + * 'lifeTime' => cache lifetime in seconds (int), + * 'fileLocking' => enable / disable fileLocking (boolean), + * 'writeControl' => enable / disable write control (boolean), + * 'readControl' => enable / disable read control (boolean), + * 'readControlType' => type of read control 'crc32', 'md5', 'strlen' (string), + * 'pearErrorMode' => pear error mode (when raiseError is called) (cf PEAR doc) (int), + * 'memoryCaching' => enable / disable memory caching (boolean), + * 'onlyMemoryCaching' => enable / disable only memory caching (boolean), + * 'memoryCachingLimit' => max nbr of records to store into memory caching (int), + * 'fileNameProtection' => enable / disable automatic file name protection (boolean), + * 'automaticSerialization' => enable / disable automatic serialization (boolean) + * ); + * + * @param array $options options + * @access public + */ + function Cache_Lite($options = array(NULL)) + { + $availableOptions = array('automaticSerialization', 'fileNameProtection', 'memoryCaching', 'onlyMemoryCaching', 'memoryCachingLimit', 'cacheDir', 'caching', 'lifeTime', 'fileLocking', 'writeControl', 'readControl', 'readControlType', 'pearErrorMode'); + foreach($options as $key => $value) { + if(in_array($key, $availableOptions)) { + $property = '_'.$key; + $this->$property = $value; + } + } + $this->_refreshTime = time() - $this->_lifeTime; + } + + /** + * Test if a cache is available and (if yes) return it + * + * @param string $id cache id + * @param string $group name of the cache group + * @param boolean $doNotTestCacheValidity if set to true, the cache validity won't be tested + * @return string data of the cache (or false if no cache available) + * @access public + */ + function get($id, $group = 'default', $doNotTestCacheValidity = false) + { + $this->_id = $id; + $this->_group = $group; + $data = false; + if ($this->_caching) { + $this->_setFileName($id, $group); + if ($this->_memoryCaching) { + if (isset($this->_memoryCachingArray[$this->_file])) { + if ($this->_automaticSerialization) { + return unserialize($this->_memoryCachingArray[$this->_file]); + } else { + return $this->_memoryCachingArray[$this->_file]; + } + } else { + if ($this->_onlyMemoryCaching) { + return false; + } + } + } + if ($doNotTestCacheValidity) { + if (file_exists($this->_file)) { + $data = $this->_read(); + } + } else { + if ((file_exists($this->_file)) && (@filemtime($this->_file) > $this->_refreshTime)) { + $data = $this->_read(); + } + } + if (($data) and ($this->_memoryCaching)) { + $this->_memoryCacheAdd($this->_file, $data); + } + if (($this->_automaticSerialization) and (is_string($data))) { + $data = unserialize($data); + } + return $data; + } + return false; + } + + /** + * Save some data in a cache file + * + * @param string $data data to put in cache (can be another type than strings if automaticSerialization is on) + * @param string $id cache id + * @param string $group name of the cache group + * @return boolean true if no problem + * @access public + */ + function save($data, $id = NULL, $group = 'default') + { + if ($this->_caching) { + if ($this->_automaticSerialization) { + $data = serialize($data); + } + if (isset($id)) { + $this->_setFileName($id, $group); + } + if ($this->_memoryCaching) { + $this->_memoryCacheAdd($this->_file, $data); + if ($this->_onlyMemoryCaching) { + return true; + } + } + if ($this->_writeControl) { + if (!$this->_writeAndControl($data)) { + @touch($this->_file, time() - 2*abs($this->_lifeTime)); + return false; + } else { + return true; + } + } else { + return $this->_write($data); + } + } + return false; + } + + /** + * Remove a cache file + * + * @param string $id cache id + * @param string $group name of the cache group + * @return boolean true if no problem + * @access public + */ + function remove($id, $group = 'default') + { + $this->_setFileName($id, $group); + if ($this->_memoryCaching) { + if (isset($this->_memoryCachingArray[$this->_file])) { + unset($this->_memoryCachingArray[$this->_file]); + $this->_memoryCachingCounter = $this->_memoryCachingCounter - 1; + } + if ($this->_onlyMemoryCaching) { + return true; + } + } + if (!@unlink($this->_file)) { + $this->raiseError('Cache_Lite : Unable to remove cache !', -3); + return false; + } + return true; + } + + /** + * Clean the cache + * + * if no group is specified all cache files will be destroyed + * else only cache files of the specified group will be destroyed + * + * @param string $group name of the cache group + * @return boolean true if no problem + * @access public + */ + function clean($group = false) + { + if ($this->_fileNameProtection) { + $motif = ($group) ? 'cache_'.md5($group).'_' : 'cache_'; + } else { + $motif = ($group) ? 'cache_'.$group.'_' : 'cache_'; + } + if ($this->_memoryCaching) { + while (list($key, $value) = each($this->_memoryCachingArray)) { + if (strpos($key, $motif, 0)) { + unset($this->_memoryCachingArray[$key]); + $this->_memoryCachingCounter = $this->_memoryCachingCounter - 1; + } + } + if ($this->_onlyMemoryCaching) { + return true; + } + } + if (!($dh = opendir($this->_cacheDir))) { + $this->raiseError('Cache_Lite : Unable to open cache directory !', -4); + return false; + } + while ($file = readdir($dh)) { + if (($file != '.') && ($file != '..')) { + $file = $this->_cacheDir . $file; + if (is_file($file)) { + if (strpos($file, $motif, 0)) { + if (!@unlink($file)) { + $this->raiseError('Cache_Lite : Unable to remove cache !', -3); + return false; + } + } + } + } + } + return true; + } + + /** + * Set to debug mode + * + * When an error is found, the script will stop and the message will be displayed + * (in debug mode only). + * + * @access public + */ + function setToDebug() + { + $this->_pearErrorMode = CACHE_LITE_ERROR_DIE; + } + + /** + * Set a new life time + * + * @param int $newLifeTime new life time (in seconds) + * @access public + */ + function setLifeTime($newLifeTime) + { + $this->_lifeTime = $newLifeTime; + $this->_refreshTime = time() - $newLifeTime; + } + + /** + * + * @access public + */ + function saveMemoryCachingState($id, $group = 'default') + { + if ($this->_caching) { + $array = array( + 'counter' => $this->_memoryCachingCounter, + 'array' => $this->_memoryCachingState + ); + $data = serialize($array); + $this->save($data, $id, $group); + } + } + + /** + * + * @access public + */ + function getMemoryCachingState($id, $group = 'default', $doNotTestCacheValidity = false) + { + if ($this->_caching) { + if ($data = $this->get($id, $group, $doNotTestCacheValidity)) { + $array = unserialize($data); + $this->_memoryCachingCounter = $array['counter']; + $this->_memoryCachingArray = $array['array']; + } + } + } + + /** + * Return the cache last modification time + * + * BE CAREFUL : THIS METHOD IS FOR HACKING ONLY ! + * + * @return int last modification time + */ + function lastModified() { + return filemtime($this->_file); + } + + /** + * Trigger a PEAR error + * + * To improve performances, the PEAR.php file is included dynamically. + * The file is so included only when an error is triggered. So, in most + * cases, the file isn't included and perfs are much better. + * + * @param string $msg error message + * @param int $code error code + * @access public + */ + function raiseError($msg, $code) + { + include_once('PEAR.php'); + PEAR::raiseError($msg, $code, $this->_pearErrorMode); + } + + // --- Private methods --- + + /** + * + * @access private + */ + function _memoryCacheAdd($id, $data) + { + $this->_memoryCachingArray[$this->_file] = $data; + if ($this->_memoryCachingCounter >= $this->_memoryCachingLimit) { + list($key, $value) = each($this->_memoryCachingArray); + unset($this->_memoryCachingArray[$key]); + } else { + $this->_memoryCachingCounter = $this->_memoryCachingCounter + 1; + } + } + + /** + * Make a file name (with path) + * + * @param string $id cache id + * @param string $group name of the group + * @access private + */ + function _setFileName($id, $group) + { + if ($this->_fileNameProtection) { + $this->_file = ($this->_cacheDir.'cache_'.md5($group).'_'.md5($id)); + } else { + $this->_file = $this->_cacheDir.'cache_'.$group.'_'.$id; + } + } + + /** + * Read the cache file and return the content + * + * @return string content of the cache file + * @access private + */ + function _read() + { + $fp = @fopen($this->_file, "rb"); + if ($this->_fileLocking) @flock($fp, LOCK_SH); + if ($fp) { + clearstatcache(); // because the filesize can be cached by PHP itself... + $length = @filesize($this->_file); + $mqr = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + if ($this->_readControl) { + $hashControl = @fread($fp, 32); + $length = $length - 32; + } + $data = @fread($fp, $length); + set_magic_quotes_runtime($mqr); + if ($this->_fileLocking) @flock($fp, LOCK_UN); + @fclose($fp); + if ($this->_readControl) { + $hashData = $this->_hash($data, $this->_readControlType); + if ($hashData != $hashControl) { + @touch($this->_file, time() - 2*abs($this->_lifeTime)); + return false; + } + } + return $data; + } + $this->raiseError('Cache_Lite : Unable to read cache !', -2); + return false; + } + + /** + * Write the given data in the cache file + * + * @param string $data data to put in cache + * @return boolean true if ok + * @access private + */ + function _write($data) + { + $fp = @fopen($this->_file, "wb"); + if ($fp) { + if ($this->_fileLocking) @flock($fp, LOCK_EX); + if ($this->_readControl) { + @fwrite($fp, $this->_hash($data, $this->_readControlType), 32); + } + $len = strlen($data); + @fwrite($fp, $data, $len); + if ($this->_fileLocking) @flock($fp, LOCK_UN); + @fclose($fp); + return true; + } + $this->raiseError('Cache_Lite : Unable to write cache !', -1); + return false; + } + + /** + * Write the given data in the cache file and control it just after to avoir corrupted cache entries + * + * @param string $data data to put in cache + * @return boolean true if the test is ok + * @access private + */ + function _writeAndControl($data) + { + $this->_write($data); + $dataRead = $this->_read($data); + return ($dataRead==$data); + } + + /** + * Make a control key with the string containing datas + * + * @param string $data data + * @param string $controlType type of control 'md5', 'crc32' or 'strlen' + * @return string control key + * @access private + */ + function _hash($data, $controlType) + { + switch ($controlType) { + case 'md5': + return md5($data); + case 'crc32': + return sprintf('% 32d', crc32($data)); + case 'strlen': + return sprintf('% 32d', strlen($data)); + default: + $this->raiseError('Unknown controlType ! (available values are only \'md5\', \'crc32\', \'strlen\')', -5); + } + } + +} + +?> diff --git a/bundled-libs/Cache/Lite/Function.php b/bundled-libs/Cache/Lite/Function.php new file mode 100644 index 0000000..a72023f --- /dev/null +++ b/bundled-libs/Cache/Lite/Function.php @@ -0,0 +1,111 @@ + +* @author Fabien MARTY +*/ + +require_once('Cache/Lite.php'); + +class Cache_Lite_Function extends Cache_Lite +{ + + // --- Private properties --- + + /** + * Default cache group for function caching + * + * @var string $_defaultGroup + */ + var $_defaultGroup = 'Cache_Lite_Function'; + + // --- Public methods ---- + + /** + * Constructor + * + * $options is an assoc. To have a look at availables options, + * see the constructor of the Cache_Lite class in 'Cache_Lite.php' + * + * Comparing to Cache_Lite constructor, there is another option : + * $options = array( + * (...) see Cache_Lite constructor + * 'defaultGroup' => default cache group for function caching (string) + * ); + * + * @param array $options options + * @access public + */ + function Cache_Lite_Function($options = array(NULL)) + { + if (isset($options['defaultGroup'])) { + $this->_defaultGroup = $options['defaultGroup']; + } + $this->Cache_Lite($options); + } + + /** + * Calls a cacheable function or method (or not if there is already a cache for it) + * + * Arguments of this method are read with func_get_args. So it doesn't appear + * in the function definition. Synopsis : + * call('functionName', $arg1, $arg2, ...) + * (arg1, arg2... are arguments of 'functionName') + * + * @return mixed result of the function/method + * @access public + */ + function call() + { + $arguments = func_get_args(); + $id = serialize($arguments); // Generate a cache id + if (!$this->_fileNameProtection) { + $id = md5($id); + // if fileNameProtection is set to false, then the id has to be hashed + // because it's a very bad file name in most cases + } + $data = $this->get($id, $this->_defaultGroup); + if ($data !== false) { + $array = unserialize($data); + $output = $array['output']; + $result = $array['result']; + } else { + ob_start(); + ob_implicit_flush(false); + $target = array_shift($arguments); + if (strstr($target, '::')) { // classname::staticMethod + list($class, $method) = explode('::', $target); + $result = call_user_func_array(array($class, $method), $arguments); + } else if (strstr($target, '->')) { // object->method + // use a stupid name ($objet_123456789 because) of problems when the object + // name is the same as this var name + list($object_123456789, $method) = explode('->', $target); + global $$object_123456789; + $result = call_user_func_array(array($$object_123456789, $method), $arguments); + } else { // function + $result = call_user_func_array($target, $arguments); + } + $output = ob_get_contents(); + ob_end_clean(); + $array['output'] = $output; + $array['result'] = $result; + $this->save(serialize($array), $id, $this->_defaultGroup); + } + echo($output); + return $result; + } + +} + +?> diff --git a/bundled-libs/Cache/Lite/Output.php b/bundled-libs/Cache/Lite/Output.php new file mode 100644 index 0000000..d6d2460 --- /dev/null +++ b/bundled-libs/Cache/Lite/Output.php @@ -0,0 +1,72 @@ + +*/ + +require_once('Cache/Lite.php'); + +class Cache_Lite_Output extends Cache_Lite +{ + + // --- Public methods --- + + /** + * Constructor + * + * $options is an assoc. To have a look at availables options, + * see the constructor of the Cache_Lite class in 'Cache_Lite.php' + * + * @param array $options options + * @access public + */ + function Cache_Lite_Output($options) + { + $this->Cache_Lite($options); + } + + /** + * Start the cache + * + * @param string $id cache id + * @param string $group name of the cache group + * @return boolean true if the cache is hit (false else) + * @access public + */ + function start($id, $group = 'default') + { + $data = $this->get($id, $group); + if ($data !== false) { + echo($data); + return true; + } else { + ob_start(); + ob_implicit_flush(false); + return false; + } + } + + /** + * Stop the cache + * + * @access public + */ + function end() + { + $data = ob_get_contents(); + ob_end_clean(); + $this->save($data, $this->_id, $this->_group); + echo($data); + } + +} + + +?> diff --git a/bundled-libs/HTTP/Request.php b/bundled-libs/HTTP/Request.php new file mode 100644 index 0000000..ce918fb --- /dev/null +++ b/bundled-libs/HTTP/Request.php @@ -0,0 +1,1132 @@ + | +// +-----------------------------------------------------------------------+ +// +// $Id: Request.php,v 1.1 2004/12/06 09:18:15 nohn Exp $ +// +// HTTP_Request Class +// +// Simple example, (Fetches yahoo.com and displays it): +// +// $a = &new HTTP_Request('http://www.yahoo.com/'); +// $a->sendRequest(); +// echo $a->getResponseBody(); +// + +require_once 'PEAR.php'; +require_once 'Net/Socket.php'; +require_once 'Net/URL.php'; + +define('HTTP_REQUEST_METHOD_GET', 'GET', true); +define('HTTP_REQUEST_METHOD_HEAD', 'HEAD', true); +define('HTTP_REQUEST_METHOD_POST', 'POST', true); +define('HTTP_REQUEST_METHOD_PUT', 'PUT', true); +define('HTTP_REQUEST_METHOD_DELETE', 'DELETE', true); +define('HTTP_REQUEST_METHOD_OPTIONS', 'OPTIONS', true); +define('HTTP_REQUEST_METHOD_TRACE', 'TRACE', true); + +define('HTTP_REQUEST_HTTP_VER_1_0', '1.0', true); +define('HTTP_REQUEST_HTTP_VER_1_1', '1.1', true); + +class HTTP_Request { + + /** + * Instance of Net_URL + * @var object + */ + var $_url; + + /** + * Type of request + * @var string + */ + var $_method; + + /** + * HTTP Version + * @var string + */ + var $_http; + + /** + * Request headers + * @var array + */ + var $_requestHeaders; + + /** + * Basic Auth Username + * @var string + */ + var $_user; + + /** + * Basic Auth Password + * @var string + */ + var $_pass; + + /** + * Socket object + * @var object + */ + var $_sock; + + /** + * Proxy server + * @var string + */ + var $_proxy_host; + + /** + * Proxy port + * @var integer + */ + var $_proxy_port; + + /** + * Proxy username + * @var string + */ + var $_proxy_user; + + /** + * Proxy password + * @var string + */ + var $_proxy_pass; + + /** + * Post data + * @var mixed + */ + var $_postData; + + /** + * Files to post + * @var array + */ + var $_postFiles = array(); + + /** + * Connection timeout. + * @var integer + */ + var $_timeout; + + /** + * HTTP_Response object + * @var object + */ + var $_response; + + /** + * Whether to allow redirects + * @var boolean + */ + var $_allowRedirects; + + /** + * Maximum redirects allowed + * @var integer + */ + var $_maxRedirects; + + /** + * Current number of redirects + * @var integer + */ + var $_redirects; + + /** + * Whether to append brackets [] to array variables + * @var bool + */ + var $_useBrackets = true; + + /** + * Attached listeners + * @var array + */ + var $_listeners = array(); + + /** + * Whether to save response body in response object property + * @var bool + */ + var $_saveBody = true; + + /** + * Timeout for reading from socket (array(seconds, microseconds)) + * @var array + */ + var $_readTimeout = null; + + /** + * Options to pass to Net_Socket::connect. See stream_context_create + * @var array + */ + var $_socketOptions = null; + + /** + * Constructor + * + * Sets up the object + * @param $url The url to fetch/access + * @param $params Associative array of parameters which can be: + * method - Method to use, GET, POST etc + * http - HTTP Version to use, 1.0 or 1.1 + * user - Basic Auth username + * pass - Basic Auth password + * proxy_host - Proxy server host + * proxy_port - Proxy server port + * proxy_user - Proxy auth username + * proxy_pass - Proxy auth password + * timeout - Connection timeout in seconds. + * allowRedirects - Whether to follow redirects or not + * maxRedirects - Max number of redirects to follow + * useBrackets - Whether to append [] to array variable names + * saveBody - Whether to save response body in response object property + * @access public + */ + function HTTP_Request($url = '', $params = array()) + { + $this->_sock = &new Net_Socket(); + $this->_method = HTTP_REQUEST_METHOD_GET; + $this->_http = HTTP_REQUEST_HTTP_VER_1_1; + $this->_requestHeaders = array(); + $this->_postData = null; + + $this->_user = null; + $this->_pass = null; + + $this->_proxy_host = null; + $this->_proxy_port = null; + $this->_proxy_user = null; + $this->_proxy_pass = null; + + $this->_allowRedirects = false; + $this->_maxRedirects = 3; + $this->_redirects = 0; + + $this->_timeout = null; + $this->_response = null; + + foreach ($params as $key => $value) { + $this->{'_' . $key} = $value; + } + + if (!empty($url)) { + $this->setURL($url); + } + + // Default useragent + $this->addHeader('User-Agent', 'PEAR HTTP_Request class ( http://pear.php.net/ )'); + + // Make sure keepalives dont knobble us + $this->addHeader('Connection', 'close'); + + // Basic authentication + if (!empty($this->_user)) { + $this->_requestHeaders['Authorization'] = 'Basic ' . base64_encode($this->_user . ':' . $this->_pass); + } + + // Use gzip encoding if possible + // Avoid gzip encoding if using multibyte functions (see #1781) + if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && extension_loaded('zlib') && + 0 == (2 & ini_get('mbstring.func_overload'))) { + + $this->addHeader('Accept-Encoding', 'gzip'); + } + } + + /** + * Generates a Host header for HTTP/1.1 requests + * + * @access private + * @return string + */ + function _generateHostHeader() + { + if ($this->_url->port != 80 AND strcasecmp($this->_url->protocol, 'http') == 0) { + $host = $this->_url->host . ':' . $this->_url->port; + + } elseif ($this->_url->port != 443 AND strcasecmp($this->_url->protocol, 'https') == 0) { + $host = $this->_url->host . ':' . $this->_url->port; + + } elseif ($this->_url->port == 443 AND strcasecmp($this->_url->protocol, 'https') == 0 AND strpos($this->_url->url, ':443') !== false) { + $host = $this->_url->host . ':' . $this->_url->port; + + } else { + $host = $this->_url->host; + } + + return $host; + } + + /** + * Resets the object to its initial state (DEPRECATED). + * Takes the same parameters as the constructor. + * + * @param string $url The url to be requested + * @param array $params Associative array of parameters + * (see constructor for details) + * @access public + * @deprecated deprecated since 1.2, call the constructor if this is necessary + */ + function reset($url, $params = array()) + { + $this->HTTP_Request($url, $params); + } + + /** + * Sets the URL to be requested + * + * @param string The url to be requested + * @access public + */ + function setURL($url) + { + $this->_url = &new Net_URL($url, $this->_useBrackets); + + if (!empty($this->_url->user) || !empty($this->_url->pass)) { + $this->setBasicAuth($this->_url->user, $this->_url->pass); + } + + if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http) { + $this->addHeader('Host', $this->_generateHostHeader()); + } + } + + /** + * Sets a proxy to be used + * + * @param string Proxy host + * @param int Proxy port + * @param string Proxy username + * @param string Proxy password + * @access public + */ + function setProxy($host, $port = 8080, $user = null, $pass = null) + { + $this->_proxy_host = $host; + $this->_proxy_port = $port; + $this->_proxy_user = $user; + $this->_proxy_pass = $pass; + + if (!empty($user)) { + $this->addHeader('Proxy-Authorization', 'Basic ' . base64_encode($user . ':' . $pass)); + } + } + + /** + * Sets basic authentication parameters + * + * @param string Username + * @param string Password + */ + function setBasicAuth($user, $pass) + { + $this->_user = $user; + $this->_pass = $pass; + + $this->addHeader('Authorization', 'Basic ' . base64_encode($user . ':' . $pass)); + } + + /** + * Sets the method to be used, GET, POST etc. + * + * @param string Method to use. Use the defined constants for this + * @access public + */ + function setMethod($method) + { + $this->_method = $method; + } + + /** + * Sets the HTTP version to use, 1.0 or 1.1 + * + * @param string Version to use. Use the defined constants for this + * @access public + */ + function setHttpVer($http) + { + $this->_http = $http; + } + + /** + * Adds a request header + * + * @param string Header name + * @param string Header value + * @access public + */ + function addHeader($name, $value) + { + $this->_requestHeaders[$name] = $value; + } + + /** + * Removes a request header + * + * @param string Header name to remove + * @access public + */ + function removeHeader($name) + { + if (isset($this->_requestHeaders[$name])) { + unset($this->_requestHeaders[$name]); + } + } + + /** + * Adds a querystring parameter + * + * @param string Querystring parameter name + * @param string Querystring parameter value + * @param bool Whether the value is already urlencoded or not, default = not + * @access public + */ + function addQueryString($name, $value, $preencoded = false) + { + $this->_url->addQueryString($name, $value, $preencoded); + } + + /** + * Sets the querystring to literally what you supply + * + * @param string The querystring data. Should be of the format foo=bar&x=y etc + * @param bool Whether data is already urlencoded or not, default = already encoded + * @access public + */ + function addRawQueryString($querystring, $preencoded = true) + { + $this->_url->addRawQueryString($querystring, $preencoded); + } + + /** + * Adds postdata items + * + * @param string Post data name + * @param string Post data value + * @param bool Whether data is already urlencoded or not, default = not + * @access public + */ + function addPostData($name, $value, $preencoded = false) + { + if ($preencoded) { + $this->_postData[$name] = $value; + } else { + $this->_postData[$name] = $this->_arrayMapRecursive('urlencode', $value); + } + } + + /** + * Recursively applies the callback function to the value + * + * @param mixed Callback function + * @param mixed Value to process + * @access private + * @return mixed Processed value + */ + function _arrayMapRecursive($callback, $value) + { + if (!is_array($value)) { + return call_user_func($callback, $value); + } else { + $map = array(); + foreach ($value as $k => $v) { + $map[$k] = $this->_arrayMapRecursive($callback, $v); + } + return $map; + } + } + + /** + * Adds a file to upload + * + * This also changes content-type to 'multipart/form-data' for proper upload + * + * @access public + * @param string name of file-upload field + * @param mixed file name(s) + * @param mixed content-type(s) of file(s) being uploaded + * @return bool true on success + * @throws PEAR_Error + */ + function addFile($inputName, $fileName, $contentType = 'application/octet-stream') + { + if (!is_array($fileName) && !is_readable($fileName)) { + return PEAR::raiseError("File '{$fileName}' is not readable"); + } elseif (is_array($fileName)) { + foreach ($fileName as $name) { + if (!is_readable($name)) { + return PEAR::raiseError("File '{$name}' is not readable"); + } + } + } + $this->addHeader('Content-Type', 'multipart/form-data'); + $this->_postFiles[$inputName] = array( + 'name' => $fileName, + 'type' => $contentType + ); + return true; + } + + /** + * Adds raw postdata + * + * @param string The data + * @param bool Whether data is preencoded or not, default = already encoded + * @access public + */ + function addRawPostData($postdata, $preencoded = true) + { + $this->_postData = $preencoded ? $postdata : urlencode($postdata); + } + + /** + * Clears any postdata that has been added (DEPRECATED). + * + * Useful for multiple request scenarios. + * + * @access public + * @deprecated deprecated since 1.2 + */ + function clearPostData() + { + $this->_postData = null; + } + + /** + * Appends a cookie to "Cookie:" header + * + * @param string $name cookie name + * @param string $value cookie value + * @access public + */ + function addCookie($name, $value) + { + $cookies = isset($this->_requestHeaders['Cookie']) ? $this->_requestHeaders['Cookie']. '; ' : ''; + $this->addHeader('Cookie', $cookies . $name . '=' . $value); + } + + /** + * Clears any cookies that have been added (DEPRECATED). + * + * Useful for multiple request scenarios + * + * @access public + * @deprecated deprecated since 1.2 + */ + function clearCookies() + { + $this->removeHeader('Cookie'); + } + + /** + * Sends the request + * + * @access public + * @param bool Whether to store response body in Response object property, + * set this to false if downloading a LARGE file and using a Listener + * @return mixed PEAR error on error, true otherwise + */ + function sendRequest($saveBody = true) + { + if (!is_a($this->_url, 'Net_URL')) { + return PEAR::raiseError('No URL given.'); + } + + $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; + $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; + + // 4.3.0 supports SSL connections using OpenSSL. The function test determines + // we running on at least 4.3.0 + if (strcasecmp($this->_url->protocol, 'https') == 0 AND function_exists('file_get_contents') AND extension_loaded('openssl')) { + if (isset($this->_proxy_host)) { + return PEAR::raiseError('HTTPS proxies are not supported.'); + } + $host = 'ssl://' . $host; + } + + // If this is a second request, we may get away without + // re-connecting if they're on the same server + if (PEAR::isError($err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions)) || + PEAR::isError($err = $this->_sock->write($this->_buildRequest()))) { + + return $err; + } + if (!empty($this->_readTimeout)) { + $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]); + } + + $this->_notify('sentRequest'); + + // Read the response + $this->_response = &new HTTP_Response($this->_sock, $this->_listeners); + if (PEAR::isError($err = $this->_response->process($this->_saveBody && $saveBody)) ) { + return $err; + } + + // Check for redirection + // Bugfix (PEAR) bug #18, 6 oct 2003 by Dave Mertens (headers are also stored lowercase, so we're gonna use them here) + // some non RFC2616 compliant servers (scripts) are returning lowercase headers ('location: xxx') + if ( $this->_allowRedirects + AND $this->_redirects <= $this->_maxRedirects + AND $this->getResponseCode() > 300 + AND $this->getResponseCode() < 399 + AND !empty($this->_response->_headers['location'])) { + + + $redirect = $this->_response->_headers['location']; + + // Absolute URL + if (preg_match('/^https?:\/\//i', $redirect)) { + $this->_url = &new Net_URL($redirect); + $this->addHeader('Host', $this->_generateHostHeader()); + // Absolute path + } elseif ($redirect{0} == '/') { + $this->_url->path = $redirect; + + // Relative path + } elseif (substr($redirect, 0, 3) == '../' OR substr($redirect, 0, 2) == './') { + if (substr($this->_url->path, -1) == '/') { + $redirect = $this->_url->path . $redirect; + } else { + $redirect = dirname($this->_url->path) . '/' . $redirect; + } + $redirect = Net_URL::resolvePath($redirect); + $this->_url->path = $redirect; + + // Filename, no path + } else { + if (substr($this->_url->path, -1) == '/') { + $redirect = $this->_url->path . $redirect; + } else { + $redirect = dirname($this->_url->path) . '/' . $redirect; + } + $this->_url->path = $redirect; + } + + $this->_redirects++; + return $this->sendRequest($saveBody); + + // Too many redirects + } elseif ($this->_allowRedirects AND $this->_redirects > $this->_maxRedirects) { + return PEAR::raiseError('Too many redirects'); + } + + $this->_sock->disconnect(); + + return true; + } + + /** + * Returns the response code + * + * @access public + * @return mixed Response code, false if not set + */ + function getResponseCode() + { + return isset($this->_response->_code) ? $this->_response->_code : false; + } + + /** + * Returns either the named header or all if no name given + * + * @access public + * @param string The header name to return, do not set to get all headers + * @return mixed either the value of $headername (false if header is not present) + * or an array of all headers + */ + function getResponseHeader($headername = null) + { + if (!isset($headername)) { + return isset($this->_response->_headers)? $this->_response->_headers: array(); + } else { + return isset($this->_response->_headers[$headername]) ? $this->_response->_headers[$headername] : false; + } + } + + /** + * Returns the body of the response + * + * @access public + * @return mixed response body, false if not set + */ + function getResponseBody() + { + return isset($this->_response->_body) ? $this->_response->_body : false; + } + + /** + * Returns cookies set in response + * + * @access public + * @return mixed array of response cookies, false if none are present + */ + function getResponseCookies() + { + return isset($this->_response->_cookies) ? $this->_response->_cookies : false; + } + + /** + * Builds the request string + * + * @access private + * @return string The request string + */ + function _buildRequest() + { + $separator = ini_get('arg_separator.output'); + ini_set('arg_separator.output', '&'); + $querystring = ($querystring = $this->_url->getQueryString()) ? '?' . $querystring : ''; + ini_set('arg_separator.output', $separator); + + $host = isset($this->_proxy_host) ? $this->_url->protocol . '://' . $this->_url->host : ''; + $port = (isset($this->_proxy_host) AND $this->_url->port != 80) ? ':' . $this->_url->port : ''; + $path = (empty($this->_url->path)? '/': $this->_url->path) . $querystring; + $url = $host . $port . $path; + + $request = $this->_method . ' ' . $url . ' HTTP/' . $this->_http . "\r\n"; + + if (HTTP_REQUEST_METHOD_POST != $this->_method && HTTP_REQUEST_METHOD_PUT != $this->_method) { + $this->removeHeader('Content-Type'); + } else { + if (empty($this->_requestHeaders['Content-Type'])) { + // Add default content-type + $this->addHeader('Content-Type', 'application/x-www-form-urlencoded'); + } elseif ('multipart/form-data' == $this->_requestHeaders['Content-Type']) { + $boundary = 'HTTP_Request_' . md5(uniqid('request') . microtime()); + $this->addHeader('Content-Type', 'multipart/form-data; boundary=' . $boundary); + } + } + + // Request Headers + if (!empty($this->_requestHeaders)) { + foreach ($this->_requestHeaders as $name => $value) { + $request .= $name . ': ' . $value . "\r\n"; + } + } + + // No post data or wrong method, so simply add a final CRLF + if ((HTTP_REQUEST_METHOD_POST != $this->_method && HTTP_REQUEST_METHOD_PUT != $this->_method) || + (empty($this->_postData) && empty($this->_postFiles))) { + + $request .= "\r\n"; + // Post data if it's an array + } elseif ((!empty($this->_postData) && is_array($this->_postData)) || !empty($this->_postFiles)) { + // "normal" POST request + if (!isset($boundary)) { + $postdata = implode('&', array_map( + create_function('$a', 'return $a[0] . \'=\' . $a[1];'), + $this->_flattenArray('', $this->_postData) + )); + + // multipart request, probably with file uploads + } else { + $postdata = ''; + if (!empty($this->_postData)) { + $flatData = $this->_flattenArray('', $this->_postData); + foreach ($flatData as $item) { + $postdata .= '--' . $boundary . "\r\n"; + $postdata .= 'Content-Disposition: form-data; name="' . $item[0] . '"'; + $postdata .= "\r\n\r\n" . urldecode($item[1]) . "\r\n"; + } + } + foreach ($this->_postFiles as $name => $value) { + if (is_array($value['name'])) { + $varname = $name . ($this->_useBrackets? '[]': ''); + } else { + $varname = $name; + $value['name'] = array($value['name']); + } + foreach ($value['name'] as $key => $filename) { + $fp = fopen($filename, 'r'); + $data = fread($fp, filesize($filename)); + fclose($fp); + $basename = basename($filename); + $type = is_array($value['type'])? @$value['type'][$key]: $value['type']; + + $postdata .= '--' . $boundary . "\r\n"; + $postdata .= 'Content-Disposition: form-data; name="' . $varname . '"; filename="' . $basename . '"'; + $postdata .= "\r\nContent-Type: " . $type; + $postdata .= "\r\n\r\n" . $data . "\r\n"; + } + } + $postdata .= '--' . $boundary . "\r\n"; + } + $request .= 'Content-Length: ' . strlen($postdata) . "\r\n\r\n"; + $request .= $postdata; + + // Post data if it's raw + } elseif(!empty($this->_postData)) { + $request .= 'Content-Length: ' . strlen($this->_postData) . "\r\n\r\n"; + $request .= $this->_postData; + } + + return $request; + } + + /** + * Helper function to change the (probably multidimensional) associative array + * into the simple one. + * + * @param string name for item + * @param mixed item's values + * @return array array with the following items: array('item name', 'item value'); + */ + function _flattenArray($name, $values) + { + if (!is_array($values)) { + return array(array($name, $values)); + } else { + $ret = array(); + foreach ($values as $k => $v) { + if (empty($name)) { + $newName = $k; + } elseif ($this->_useBrackets) { + $newName = $name . '[' . $k . ']'; + } else { + $newName = $name; + } + $ret = array_merge($ret, $this->_flattenArray($newName, $v)); + } + return $ret; + } + } + + + /** + * Adds a Listener to the list of listeners that are notified of + * the object's events + * + * @param object HTTP_Request_Listener instance to attach + * @return boolean whether the listener was successfully attached + * @access public + */ + function attach(&$listener) + { + if (!is_a($listener, 'HTTP_Request_Listener')) { + return false; + } + $this->_listeners[$listener->getId()] =& $listener; + return true; + } + + + /** + * Removes a Listener from the list of listeners + * + * @param object HTTP_Request_Listener instance to detach + * @return boolean whether the listener was successfully detached + * @access public + */ + function detach(&$listener) + { + if (!is_a($listener, 'HTTP_Request_Listener') || + !isset($this->_listeners[$listener->getId()])) { + return false; + } + unset($this->_listeners[$listener->getId()]); + return true; + } + + + /** + * Notifies all registered listeners of an event. + * + * Events sent by HTTP_Request object + * 'sentRequest': after the request was sent + * Events sent by HTTP_Response object + * 'gotHeaders': after receiving response headers (headers are passed in $data) + * 'tick': on receiving a part of response body (the part is passed in $data) + * 'gzTick': on receiving a gzip-encoded part of response body (ditto) + * 'gotBody': after receiving the response body (passes the decoded body in $data if it was gzipped) + * + * @param string Event name + * @param mixed Additional data + * @access private + */ + function _notify($event, $data = null) + { + foreach (array_keys($this->_listeners) as $id) { + $this->_listeners[$id]->update($this, $event, $data); + } + } +} + + +/** +* Response class to complement the Request class +*/ +class HTTP_Response +{ + /** + * Socket object + * @var object + */ + var $_sock; + + /** + * Protocol + * @var string + */ + var $_protocol; + + /** + * Return code + * @var string + */ + var $_code; + + /** + * Response headers + * @var array + */ + var $_headers; + + /** + * Cookies set in response + * @var array + */ + var $_cookies; + + /** + * Response body + * @var string + */ + var $_body = ''; + + /** + * Used by _readChunked(): remaining length of the current chunk + * @var string + */ + var $_chunkLength = 0; + + /** + * Attached listeners + * @var array + */ + var $_listeners = array(); + + /** + * Constructor + * + * @param object Net_Socket socket to read the response from + * @param array listeners attached to request + * @return mixed PEAR Error on error, true otherwise + */ + function HTTP_Response(&$sock, &$listeners) + { + $this->_sock =& $sock; + $this->_listeners =& $listeners; + } + + + /** + * Processes a HTTP response + * + * This extracts response code, headers, cookies and decodes body if it + * was encoded in some way + * + * @access public + * @param bool Whether to store response body in object property, set + * this to false if downloading a LARGE file and using a Listener. + * This is assumed to be true if body is gzip-encoded. + * @throws PEAR_Error + * @return mixed true on success, PEAR_Error in case of malformed response + */ + function process($saveBody = true) + { + do { + $line = $this->_sock->readLine(); + if (sscanf($line, 'HTTP/%s %s', $http_version, $returncode) != 2) { + return PEAR::raiseError('Malformed response.'); + } else { + $this->_protocol = 'HTTP/' . $http_version; + $this->_code = intval($returncode); + } + while ('' !== ($header = $this->_sock->readLine())) { + $this->_processHeader($header); + } + } while (100 == $this->_code); + + $this->_notify('gotHeaders', $this->_headers); + + // If response body is present, read it and decode + $chunked = isset($this->_headers['transfer-encoding']) && ('chunked' == $this->_headers['transfer-encoding']); + $gzipped = isset($this->_headers['content-encoding']) && ('gzip' == $this->_headers['content-encoding']); + $hasBody = false; + while (!$this->_sock->eof()) { + if ($chunked) { + $data = $this->_readChunked(); + } else { + $data = $this->_sock->read(4096); + } + if ('' != $data) { + $hasBody = true; + if ($saveBody || $gzipped) { + $this->_body .= $data; + } + $this->_notify($gzipped? 'gzTick': 'tick', $data); + } + } + if ($hasBody) { + // Uncompress the body if needed + if ($gzipped) { + $this->_body = gzinflate(substr($this->_body, 10)); + $this->_notify('gotBody', $this->_body); + } else { + $this->_notify('gotBody'); + } + } + return true; + } + + + /** + * Processes the response header + * + * @access private + * @param string HTTP header + */ + function _processHeader($header) + { + list($headername, $headervalue) = explode(':', $header, 2); + $headername_i = strtolower($headername); + $headervalue = ltrim($headervalue); + + if ('set-cookie' != $headername_i) { + $this->_headers[$headername] = $headervalue; + $this->_headers[$headername_i] = $headervalue; + } else { + $this->_parseCookie($headervalue); + } + } + + + /** + * Parse a Set-Cookie header to fill $_cookies array + * + * @access private + * @param string value of Set-Cookie header + */ + function _parseCookie($headervalue) + { + $cookie = array( + 'expires' => null, + 'domain' => null, + 'path' => null, + 'secure' => false + ); + + // Only a name=value pair + if (!strpos($headervalue, ';')) { + $pos = strpos($headervalue, '='); + $cookie['name'] = trim(substr($headervalue, 0, $pos)); + $cookie['value'] = trim(substr($headervalue, $pos + 1)); + + // Some optional parameters are supplied + } else { + $elements = explode(';', $headervalue); + $pos = strpos($elements[0], '='); + $cookie['name'] = trim(substr($elements[0], 0, $pos)); + $cookie['value'] = trim(substr($elements[0], $pos + 1)); + + for ($i = 1; $i < count($elements); $i++) { + list ($elName, $elValue) = array_map('trim', explode('=', $elements[$i])); + $elName = strtolower($elName); + if ('secure' == $elName) { + $cookie['secure'] = true; + } elseif ('expires' == $elName) { + $cookie['expires'] = str_replace('"', '', $elValue); + } elseif ('path' == $elName || 'domain' == $elName) { + $cookie[$elName] = urldecode($elValue); + } else { + $cookie[$elName] = $elValue; + } + } + } + $this->_cookies[] = $cookie; + } + + + /** + * Read a part of response body encoded with chunked Transfer-Encoding + * + * @access private + * @return string + */ + function _readChunked() + { + // at start of the next chunk? + if (0 == $this->_chunkLength) { + $line = $this->_sock->readLine(); + if (preg_match('/^([0-9a-f]+)/i', $line, $matches)) { + $this->_chunkLength = hexdec($matches[1]); + // Chunk with zero length indicates the end + if (0 == $this->_chunkLength) { + $this->_sock->readAll(); // make this an eof() + return ''; + } + } + } + $data = $this->_sock->read($this->_chunkLength); + $this->_chunkLength -= strlen($data); + if (0 == $this->_chunkLength) { + $this->_sock->readLine(); // Trailing CRLF + } + return $data; + } + + + /** + * Notifies all registered listeners of an event. + * + * @param string Event name + * @param mixed Additional data + * @access private + * @see HTTP_Request::_notify() + */ + function _notify($event, $data = null) + { + foreach (array_keys($this->_listeners) as $id) { + $this->_listeners[$id]->update($this, $event, $data); + } + } +} // End class HTTP_Response +?> diff --git a/bundled-libs/HTTP/Request/Listener.php b/bundled-libs/HTTP/Request/Listener.php new file mode 100644 index 0000000..70d4731 --- /dev/null +++ b/bundled-libs/HTTP/Request/Listener.php @@ -0,0 +1,96 @@ + | +// +-----------------------------------------------------------------------+ +// +// $Id: Listener.php,v 1.1 2004/12/06 09:18:23 nohn Exp $ +// + +/** + * This class implements the Observer part of a Subject-Observer + * design pattern. It listens to the events sent by a + * HTTP_Request or HTTP_Response instance. + * + * @package HTTP_Request + * @author Alexey Borzov + * @version $Revision: 1.1 $ + */ +class HTTP_Request_Listener +{ + /** + * A listener's identifier + * @var string + */ + var $_id; + + /** + * Constructor, sets the object's identifier + * + * @access public + */ + function HTTP_Request_Listener() + { + $this->_id = md5(uniqid('http_request_', 1)); + } + + + /** + * Returns the listener's identifier + * + * @access public + * @return string + */ + function getId() + { + return $this->_id; + } + + + /** + * This method is called when Listener is notified of an event + * + * @access public + * @param object an object the listener is attached to + * @param string Event name + * @param mixed Additional data + * @abstract + */ + function update(&$subject, $event, $data = null) + { + echo "Notified of event: '$event'\n"; + if (null !== $data) { + echo "Additional data: "; + var_dump($data); + } + } +} +?> diff --git a/bundled-libs/Net/CheckIP.php b/bundled-libs/Net/CheckIP.php new file mode 100644 index 0000000..2e3f15a --- /dev/null +++ b/bundled-libs/Net/CheckIP.php @@ -0,0 +1,75 @@ + | +// | Guido Haeger | +// +----------------------------------------------------------------------+ +// +// $Id: CheckIP.php,v 1.2 2004/11/19 11:05:24 garvinhicking Exp $ + +/** +* Class to validate the syntax of IPv4 adresses +* +* Usage: +* +* +* @author Martin Jansen +* @author Guido Haeger +* @package Net_CheckIP +* @version 1.1 +* @access public +*/ +class Net_CheckIP +{ + + /** + * Validate the syntax of the given IP adress + * + * This function splits the IP address in 4 pieces + * (separated by ".") and checks for each piece + * if it's an integer value between 0 and 255. + * If all 4 parameters pass this test, the function + * returns true. + * + * @param string $ip IP adress + * @return bool true if syntax is valid, otherwise false + */ + function check_ip($ip) + { + $oct = explode('.', $ip); + if (count($oct) != 4) { + return false; + } + + for ($i = 0; $i < 4; $i++) { + if (!is_numeric($oct[$i])) { + return false; + } + + if ($oct[$i] < 0 || $oct[$i] > 255) { + return false; + } + } + + return true; + } +} +?> diff --git a/bundled-libs/Net/DNSBL.php b/bundled-libs/Net/DNSBL.php new file mode 100644 index 0000000..ce6837b --- /dev/null +++ b/bundled-libs/Net/DNSBL.php @@ -0,0 +1,153 @@ + | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 3.0 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available through the world-wide-web at the following url: | +// | http://www.php.net/license/3_0.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Authors: Sebastian Nohn | +// +----------------------------------------------------------------------+ +// +// $Id: DNSBL.php,v 1.4 2004/12/02 14:23:51 nohn Exp $ + +/** + * PEAR::Net_DNSBL + * + * This class acts as interface to generic Realtime Blocking Lists + * (RBL) + * + * Net_RBL looks up an supplied host if it's listed in 1-n supplied + * Blacklists + * + * @author Sebastian Nohn + * @package Net_DNSBL + * @license http://www.php.net/license/3_0.txt + * @version 0.5.3 + */ +require_once 'Net/CheckIP.php'; + +class Net_DNSBL { + + /** + * Array of blacklists. + * + * Must have one or more elements. + * + * @var array + * @access protected + */ + var $blacklists = array('sbl-xbl.spamhaus.net', + 'bl.spamcop.net'); + + /** + * Set the blacklist to a desired blacklist. + * + * @param array Array of blacklists to use. May contain only one element. + * @access public + * @return bool true if the operation was successful + */ + function setBlacklists($blacklists) + { + if (is_array($blacklists)) { + $this->blacklists = $blacklists; + return true; + } else { + return false; + } // if + } // function + + /** + * Get the blacklists. + * + * @access public + * @return array Currently set blacklists. + */ + function getBlacklists() + { + return $this->blacklists; + } + + /** + * Checks if the supplied Host is listed in one or more of the + * RBLs. + * + * @param string Host to check for being listed. + * @access public + * @return boolean true if the checked host is listed in a blacklist. + */ + function isListed($host) + { + + $isListed = false; + + foreach ($this->blacklists as $blacklist) { + $result = gethostbyname($this->getHostForLookup($host, $blacklist)); + if ($result != $this->getHostForLookup($host, $blacklist)) { + $isListed = true; + + //if the Host was listed we don't need to check other RBLs, + break; + + } // if + } // foreach + + return $isListed; + } // function + + /** + * Get host to lookup. Lookup a host if neccessary and get the + * complete FQDN to lookup. + * + * @param string Host OR IP to use for building the lookup. + * @param string Blacklist to use for building the lookup. + * @access protected + * @return string Ready to use host to lookup + */ + function getHostForLookup($host, $blacklist) + { + // Currently only works for v4 addresses. + if (!Net_CheckIP::check_ip($host)) { + $ip = gethostbyname($host); + } else { + $ip = $host; + } + + return $this->buildLookUpHost($ip, $blacklist); + } // function + + /** + * Build the host to lookup from an IP. + * + * @param string IP to use for building the lookup. + * @param string Blacklist to use for building the lookup. + * @access protected + * @return string Ready to use host to lookup + */ + function buildLookUpHost($ip, $blacklist) + { + return $this->reverseIp($ip).'.'.$blacklist; + } // function + + /** + * Reverse the order of an IP. 127.0.0.1 -> 1.0.0.127. Currently + * only works for v4-adresses + * + * @param string IP to reverse. + * @access protected + * @return string Reversed IP + */ + function reverseIp($ip) + { + return implode('.', array_reverse(explode('.', $ip))); + } // function + +} // class +?> \ No newline at end of file diff --git a/bundled-libs/Net/DNSBL/SURBL.php b/bundled-libs/Net/DNSBL/SURBL.php new file mode 100644 index 0000000..d239fd5 --- /dev/null +++ b/bundled-libs/Net/DNSBL/SURBL.php @@ -0,0 +1,164 @@ + | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 3.0 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available through the world-wide-web at the following url: | +// | http://www.php.net/license/3_0.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Authors: Sebastian Nohn | +// +----------------------------------------------------------------------+ +// +// $Id: SURBL.php,v 1.4 2004/12/02 14:23:51 nohn Exp $ + +/** + * PEAR::Net_DNSBL_SURBL + * + * This class acts as interface to the SURBL - Spam URI Realtime Blocklists. + * + * Services_SURBL looks up an supplied URI if it's listed in a + * Spam URI Realtime Blocklists. + * + * @author Sebastian Nohn + * @package Net_DNSBL + * @license http://www.php.net/license/3_0.txt + * @version 0.5.4 + */ +require_once 'Cache/Lite.php'; +require_once 'HTTP/Request.php'; +require_once 'Net/CheckIP.php'; +require_once 'Net/DNSBL.php'; + +class Net_DNSBL_SURBL extends Net_DNSBL { + + /** + * Array of blacklists. + * + * Must have one or more elements. + * + * @var string[] + * @access protected + */ + var $blacklists = array('multi.surbl.org'); + + /** + * File containing whitelisted hosts. + * + * There are some whitelisted hosts (co.uk for example). This + * requires the package to not ask the domain name but the host + * name (spammer.co.uk instead of co.uk). + * + * @var string + * @see $twoLevelCcTld + * @access protected + */ + var $doubleCcTldFile = 'http://spamcheck.freeapp.net/two-level-tlds'; + + /** + * Array of whitelisted hosts. + * + * @var array + * @see $twoLevelCcTldFile + * @access private + */ + var $twoLevelCcTld = array(); + + /** + * Check if the last two parts of the FQDN are whitelisted. + * + * @param string Host to check if it is whitelisted + * @access protected + * @return boolean True if the host is whitelisted + */ + function isDoubleCcTld($fqdn) + { + // 30 Days should be way enough + $options = array( + 'lifeTime' => '2592000', + 'automaticSerialization' => true + ); + $id = md5($this->doubleCcTldFile); + + $cache = new Cache_Lite($options); + if ($data = $cache->get($id)) { + // Cache hit + } else { + // Cache miss + $http = &new HTTP_Request($this->doubleCcTldFile); + if (!PEAR::isError($http->sendRequest())) { + $data = $http->getResponseBody(); + } + $data = explode("\n", $data); + $data = array_flip($data); + $cache->save($data, $id); + } // if + if (array_key_exists($fqdn, $data)) { + return true; + } else { + return false; + } // if + } // function + + /** + * Get Hostname to ask for. + * + * Performs the following steps: + * + * (1) Extract the hostname from the given URI + * (2) Check if the "hostname" is an ip + * (3a) IS_IP Reverse the IP (1.2.3.4 -> 4.3.2.1) + * (3b) IS_FQDN Check if is in "CC-2-level-TLD" + * (3b1) IS_IN_2LEVEL: we want the last three names + * (3b2) IS_NOT_2LEVEL: we want the last two names + * (4) return the FQDN to query. + * + * @param string URL to check. + * @access protected + * @return string Host to lookup + */ + function getHostForLookup($uri, $blacklist) + { + $host = ''; + // (1) Extract the hostname from the given URI + $parsed_uri = parse_url($uri); + $host = $parsed_uri['host']; + // (2) Check if the "hostname" is an ip + if (Net_CheckIP::check_ip($host)) { + // (3a) IS_IP Reverse the IP (1.2.3.4 -> 4.3.2.1) + $host = $this->reverseIp($host); + } else { + $host_elements = explode('.', $host); + while (count($host_elements) > 3) { + array_shift($host_elements); + } // while + $host_3_elements = implode('.', $host_elements); + + $host_elements = explode('.', $host); + while (count($host_elements) > 2) { + array_shift($host_elements); + } // while + $host_2_elements = implode('.', $host_elements); + + // (3b) IS_FQDN Check if is in "CC-2-level-TLD" + if ($this->isDoubleCcTld($host_2_elements)) { + // (3b1) IS_IN_2LEVEL: we want the last three names + $host = $host_3_elements; + } else { + // (3b2) IS_NOT_2LEVEL: we want the last two names + $host = $host_2_elements; + } // if + } // if + // (4) return the FQDN to query + $host .= '.'.$blacklist; + return $host; + } // function + +} // class +?> \ No newline at end of file diff --git a/bundled-libs/Net/Socket.php b/bundled-libs/Net/Socket.php new file mode 100644 index 0000000..9d73e06 --- /dev/null +++ b/bundled-libs/Net/Socket.php @@ -0,0 +1,456 @@ + | +// | Chuck Hagenbuch | +// +----------------------------------------------------------------------+ +// +// $Id: Socket.php,v 1.1 2004/12/06 09:18:23 nohn Exp $ +// + +require_once 'PEAR.php'; + +/** + * Generalized Socket class. More docs to be written. + * + * @version 1.0 + * @author Stig Bakken + * @author Chuck Hagenbuch + */ +class Net_Socket extends PEAR { + // {{{ properties + + /** Socket file pointer. */ + var $fp = null; + + /** Whether the socket is blocking. */ + var $blocking = true; + + /** Whether the socket is persistent. */ + var $persistent = false; + + /** The IP address to connect to. */ + var $addr = ''; + + /** The port number to connect to. */ + var $port = 0; + + /** Number of seconds to wait on socket connections before + assuming there's no more data. */ + var $timeout = false; + + /** Number of bytes to read at a time in readLine() and + readAll(). */ + var $lineLength = 2048; + // }}} + + // {{{ constructor + /** + * Constructs a new Net_Socket object. + * + * @access public + */ + function Net_Socket() + { + $this->PEAR(); + } + // }}} + + // {{{ connect() + /** + * Connect to the specified port. If called when the socket is + * already connected, it disconnects and connects again. + * + * @param $addr string IP address or host name + * @param $port int TCP port number + * @param $persistent bool (optional) whether the connection is + * persistent (kept open between requests by the web server) + * @param $timeout int (optional) how long to wait for data + * @param $options array see options for stream_context_create + * @access public + * @return mixed true on success or error object + */ + function connect($addr, $port, $persistent = null, $timeout = null, $options = null) + { + if (is_resource($this->fp)) { + @fclose($this->fp); + $this->fp = null; + } + + if (strspn($addr, '.0123456789') == strlen($addr)) { + $this->addr = $addr; + } else { + $this->addr = gethostbyname($addr); + } + $this->port = $port % 65536; + if ($persistent !== null) { + $this->persistent = $persistent; + } + if ($timeout !== null) { + $this->timeout = $timeout; + } + $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen'; + $errno = 0; + $errstr = ''; + if ($options && function_exists('stream_context_create')) { + if ($this->timeout) { + $timeout = $this->timeout; + } else { + $timeout = 0; + } + $context = stream_context_create($options); + $fp = $openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context); + } else { + if ($this->timeout) { + $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout); + } else { + $fp = @$openfunc($this->addr, $this->port, $errno, $errstr); + } + } + + if (!$fp) { + return $this->raiseError($errstr, $errno); + } + + $this->fp = $fp; + + return $this->setBlocking($this->blocking); + } + // }}} + + // {{{ disconnect() + /** + * Disconnects from the peer, closes the socket. + * + * @access public + * @return mixed true on success or an error object otherwise + */ + function disconnect() + { + if (is_resource($this->fp)) { + fclose($this->fp); + $this->fp = null; + return true; + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ isBlocking() + /** + * Find out if the socket is in blocking mode. + * + * @access public + * @return bool the current blocking mode. + */ + function isBlocking() + { + return $this->blocking; + } + // }}} + + // {{{ setBlocking() + /** + * Sets whether the socket connection should be blocking or + * not. A read call to a non-blocking socket will return immediately + * if there is no data available, whereas it will block until there + * is data for blocking sockets. + * + * @param $mode bool true for blocking sockets, false for nonblocking + * @access public + * @return mixed true on success or an error object otherwise + */ + function setBlocking($mode) + { + if (is_resource($this->fp)) { + $this->blocking = $mode; + socket_set_blocking($this->fp, $this->blocking); + return true; + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ setTimeout() + /** + * Sets the timeout value on socket descriptor, + * expressed in the sum of seconds and microseconds + * + * @param $seconds int seconds + * @param $microseconds int microseconds + * @access public + * @return mixed true on success or an error object otherwise + */ + function setTimeout($seconds, $microseconds) + { + if (is_resource($this->fp)) { + socket_set_timeout($this->fp, $seconds, $microseconds); + return true; + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ getStatus() + /** + * Returns information about an existing socket resource. + * Currently returns four entries in the result array: + * + *

+ * timed_out (bool) - The socket timed out waiting for data
+ * blocked (bool) - The socket was blocked
+ * eof (bool) - Indicates EOF event
+ * unread_bytes (int) - Number of bytes left in the socket buffer
+ *

+ * + * @access public + * @return mixed Array containing information about existing socket resource or an error object otherwise + */ + function getStatus() + { + if (is_resource($this->fp)) { + return socket_get_status($this->fp); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ gets() + /** + * Get a specified line of data + * + * @access public + * @return $size bytes of data from the socket, or a PEAR_Error if + * not connected. + */ + function gets($size) + { + if (is_resource($this->fp)) { + return fgets($this->fp, $size); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ read() + /** + * Read a specified amount of data. This is guaranteed to return, + * and has the added benefit of getting everything in one fread() + * chunk; if you know the size of the data you're getting + * beforehand, this is definitely the way to go. + * + * @param $size The number of bytes to read from the socket. + * @access public + * @return $size bytes of data from the socket, or a PEAR_Error if + * not connected. + */ + function read($size) + { + if (is_resource($this->fp)) { + return fread($this->fp, $size); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ write() + /** + * Write a specified amount of data. + * + * @access public + * @return mixed true on success or an error object otherwise + */ + function write($data) + { + if (is_resource($this->fp)) { + return fwrite($this->fp, $data); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ writeLine() + /** + * Write a line of data to the socket, followed by a trailing "\r\n". + * + * @access public + * @return mixed fputs result, or an error + */ + function writeLine ($data) + { + if (is_resource($this->fp)) { + return $this->write($data . "\r\n"); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ eof() + /** + * Tests for end-of-file on a socket descriptor + * + * @access public + * @return bool + */ + function eof() + { + return (is_resource($this->fp) && feof($this->fp)); + } + // }}} + + // {{{ readByte() + /** + * Reads a byte of data + * + * @access public + * @return 1 byte of data from the socket, or a PEAR_Error if + * not connected. + */ + function readByte() + { + if (is_resource($this->fp)) { + return ord($this->read(1)); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ readWord() + /** + * Reads a word of data + * + * @access public + * @return 1 word of data from the socket, or a PEAR_Error if + * not connected. + */ + function readWord() + { + if (is_resource($this->fp)) { + $buf = $this->read(2); + return (ord($buf[0]) + (ord($buf[1]) << 8)); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ readInt() + /** + * Reads an int of data + * + * @access public + * @return 1 int of data from the socket, or a PEAR_Error if + * not connected. + */ + function readInt() + { + if (is_resource($this->fp)) { + $buf = $this->read(4); + return (ord($buf[0]) + (ord($buf[1]) << 8) + + (ord($buf[2]) << 16) + (ord($buf[3]) << 24)); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ readString() + /** + * Reads a zeroterminated string of data + * + * @access public + * @return string, or a PEAR_Error if + * not connected. + */ + function readString() + { + if (is_resource($this->fp)) { + $string = ''; + while (($char = $this->read(1)) != "\x00") { + $string .= $char; + } + return $string; + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ readIPAddress() + /** + * Reads an IP Address and returns it in a dot formated string + * + * @access public + * @return Dot formated string, or a PEAR_Error if + * not connected. + */ + function readIPAddress() + { + if (is_resource($this->fp)) { + $buf = $this->read(4); + return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]), + ord($buf[2]), ord($buf[3])); + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ readLine() + /** + * Read until either the end of the socket or a newline, whichever + * comes first. Strips the trailing newline from the returned data. + * + * @access public + * @return All available data up to a newline, without that + * newline, or until the end of the socket, or a PEAR_Error if + * not connected. + */ + function readLine() + { + if (is_resource($this->fp)) { + $line = ''; + $timeout = time() + $this->timeout; + while (!$this->eof() && (!$this->timeout || time() < $timeout)) { + $line .= $this->gets($this->lineLength); + if (substr($line, -2) == "\r\n" || + substr($line, -1) == "\n") { + return rtrim($line, "\r\n"); + } + } + return $line; + } + return $this->raiseError("not connected"); + } + // }}} + + // {{{ readAll() + /** + * Read until the socket closes. THIS FUNCTION WILL NOT EXIT if the + * socket is in blocking mode until the socket closes. + * + * @access public + * @return All data until the socket closes, or a PEAR_Error if + * not connected. + */ + function readAll() + { + if (is_resource($this->fp)) { + $data = ''; + while (!$this->eof()) + $data .= $this->read($this->lineLength); + return $data; + } + return $this->raiseError("not connected"); + } + // }}} + +} diff --git a/bundled-libs/Net/URL.php b/bundled-libs/Net/URL.php new file mode 100644 index 0000000..349c59c --- /dev/null +++ b/bundled-libs/Net/URL.php @@ -0,0 +1,410 @@ + | +// +-----------------------------------------------------------------------+ +// +// $Id: URL.php,v 1.1 2004/12/06 09:18:23 nohn Exp $ +// +// Net_URL Class + +class Net_URL +{ + /** + * Full url + * @var string + */ + var $url; + + /** + * Protocol + * @var string + */ + var $protocol; + + /** + * Username + * @var string + */ + var $username; + + /** + * Password + * @var string + */ + var $password; + + /** + * Host + * @var string + */ + var $host; + + /** + * Port + * @var integer + */ + var $port; + + /** + * Path + * @var string + */ + var $path; + + /** + * Query string + * @var array + */ + var $querystring; + + /** + * Anchor + * @var string + */ + var $anchor; + + /** + * Whether to use [] + * @var bool + */ + var $useBrackets; + + /** + * PHP4 Constructor + * + * @see __construct() + */ + function Net_URL($url = null, $useBrackets = true) + { + $this->__construct($url, $useBrackets); + } + + /** + * PHP5 Constructor + * + * Parses the given url and stores the various parts + * Defaults are used in certain cases + * + * @param string $url Optional URL + * @param bool $useBrackets Whether to use square brackets when + * multiple querystrings with the same name + * exist + */ + function __construct($url = null, $useBrackets = true) + { + $HTTP_SERVER_VARS = !empty($_SERVER) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; + + $this->useBrackets = $useBrackets; + $this->url = $url; + $this->user = ''; + $this->pass = ''; + $this->host = ''; + $this->port = 80; + $this->path = ''; + $this->querystring = array(); + $this->anchor = ''; + + // Only use defaults if not an absolute URL given + if (!preg_match('/^[a-z0-9]+:\/\//i', $url)) { + + $this->protocol = (@$HTTP_SERVER_VARS['HTTPS'] == 'on' ? 'https' : 'http'); + + /** + * Figure out host/port + */ + if (!empty($HTTP_SERVER_VARS['HTTP_HOST']) AND preg_match('/^(.*)(:([0-9]+))?$/U', $HTTP_SERVER_VARS['HTTP_HOST'], $matches)) { + $host = $matches[1]; + if (!empty($matches[3])) { + $port = $matches[3]; + } else { + $port = $this->getStandardPort($this->protocol); + } + } + + $this->user = ''; + $this->pass = ''; + $this->host = !empty($host) ? $host : (isset($HTTP_SERVER_VARS['SERVER_NAME']) ? $HTTP_SERVER_VARS['SERVER_NAME'] : 'localhost'); + $this->port = !empty($port) ? $port : (isset($HTTP_SERVER_VARS['SERVER_PORT']) ? $HTTP_SERVER_VARS['SERVER_PORT'] : $this->getStandardPort($this->protocol)); + $this->path = !empty($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : '/'; + $this->querystring = isset($HTTP_SERVER_VARS['QUERY_STRING']) ? $this->_parseRawQuerystring($HTTP_SERVER_VARS['QUERY_STRING']) : null; + $this->anchor = ''; + } + + // Parse the url and store the various parts + if (!empty($url)) { + $urlinfo = parse_url($url); + + // Default querystring + $this->querystring = array(); + + foreach ($urlinfo as $key => $value) { + switch ($key) { + case 'scheme': + $this->protocol = $value; + $this->port = $this->getStandardPort($value); + break; + + case 'user': + case 'pass': + case 'host': + case 'port': + $this->$key = $value; + break; + + case 'path': + if ($value{0} == '/') { + $this->path = $value; + } else { + $path = dirname($this->path) == DIRECTORY_SEPARATOR ? '' : dirname($this->path); + $this->path = sprintf('%s/%s', $path, $value); + } + break; + + case 'query': + $this->querystring = $this->_parseRawQueryString($value); + break; + + case 'fragment': + $this->anchor = $value; + break; + } + } + } + } + + /** + * Returns full url + * + * @return string Full url + * @access public + */ + function getURL() + { + $querystring = $this->getQueryString(); + + $this->url = $this->protocol . '://' + . $this->user . (!empty($this->pass) ? ':' : '') + . $this->pass . (!empty($this->user) ? '@' : '') + . $this->host . ($this->port == $this->getStandardPort($this->protocol) ? '' : ':' . $this->port) + . $this->path + . (!empty($querystring) ? '?' . $querystring : '') + . (!empty($this->anchor) ? '#' . $this->anchor : ''); + + return $this->url; + } + + /** + * Adds a querystring item + * + * @param string $name Name of item + * @param string $value Value of item + * @param bool $preencoded Whether value is urlencoded or not, default = not + * @access public + */ + function addQueryString($name, $value, $preencoded = false) + { + if ($preencoded) { + $this->querystring[$name] = $value; + } else { + $this->querystring[$name] = is_array($value) ? array_map('rawurlencode', $value): rawurlencode($value); + } + } + + /** + * Removes a querystring item + * + * @param string $name Name of item + * @access public + */ + function removeQueryString($name) + { + if (isset($this->querystring[$name])) { + unset($this->querystring[$name]); + } + } + + /** + * Sets the querystring to literally what you supply + * + * @param string $querystring The querystring data. Should be of the format foo=bar&x=y etc + * @access public + */ + function addRawQueryString($querystring) + { + $this->querystring = $this->_parseRawQueryString($querystring); + } + + /** + * Returns flat querystring + * + * @return string Querystring + * @access public + */ + function getQueryString() + { + if (!empty($this->querystring)) { + foreach ($this->querystring as $name => $value) { + if (is_array($value)) { + foreach ($value as $k => $v) { + $querystring[] = $this->useBrackets ? sprintf('%s[%s]=%s', $name, $k, $v) : ($name . '=' . $v); + } + } elseif (!is_null($value)) { + $querystring[] = $name . '=' . $value; + } else { + $querystring[] = $name; + } + } + $querystring = implode(ini_get('arg_separator.output'), $querystring); + } else { + $querystring = ''; + } + + return $querystring; + } + + /** + * Parses raw querystring and returns an array of it + * + * @param string $querystring The querystring to parse + * @return array An array of the querystring data + * @access private + */ + function _parseRawQuerystring($querystring) + { + $parts = preg_split('/[' . preg_quote(ini_get('arg_separator.input'), '/') . ']/', $querystring, -1, PREG_SPLIT_NO_EMPTY); + $return = array(); + + foreach ($parts as $part) { + if (strpos($part, '=') !== false) { + $value = substr($part, strpos($part, '=') + 1); + $key = substr($part, 0, strpos($part, '=')); + } else { + $value = null; + $key = $part; + } + if (substr($key, -2) == '[]') { + $key = substr($key, 0, -2); + if (@!is_array($return[$key])) { + $return[$key] = array(); + $return[$key][] = $value; + } else { + $return[$key][] = $value; + } + } elseif (!$this->useBrackets AND !empty($return[$key])) { + $return[$key] = (array)$return[$key]; + $return[$key][] = $value; + } else { + $return[$key] = $value; + } + } + + return $return; + } + + /** + * Resolves //, ../ and ./ from a path and returns + * the result. Eg: + * + * /foo/bar/../boo.php => /foo/boo.php + * /foo/bar/../../boo.php => /boo.php + * /foo/bar/.././/boo.php => /foo/boo.php + * + * This method can also be called statically. + * + * @param string $url URL path to resolve + * @return string The result + */ + function resolvePath($path) + { + $path = explode('/', str_replace('//', '/', $path)); + + for ($i=0; $i 1 OR ($i == 1 AND $path[0] != '') ) ) { + unset($path[$i]); + unset($path[$i-1]); + $path = array_values($path); + $i -= 2; + + } elseif ($path[$i] == '..' AND $i == 1 AND $path[0] == '') { + unset($path[$i]); + $path = array_values($path); + $i--; + + } else { + continue; + } + } + + return implode('/', $path); + } + + /** + * Returns the standard port number for a protocol + * + * @param string $scheme The protocol to lookup + * @return integer Port number or NULL if no scheme matches + * + * @author Philippe Jausions + */ + function getStandardPort($scheme) + { + switch (strtolower($scheme)) { + case 'http': return 80; + case 'https': return 443; + case 'ftp': return 21; + case 'imap': return 143; + case 'imaps': return 993; + case 'pop3': return 110; + case 'pop3s': return 995; + default: return null; + } + } + + /** + * Forces the URL to a particular protocol + * + * @param string $protocol Protocol to force the URL to + * @param integer $port Optional port (standard port is used by default) + */ + function setProtocol($protocol, $port = null) + { + $this->protocol = $protocol; + $this->port = is_null($port) ? $this->getStandardPort() : $port; + } + +} +?> diff --git a/bundled-libs/Onyx/RSS.php b/bundled-libs/Onyx/RSS.php new file mode 100644 index 0000000..7f4aeee --- /dev/null +++ b/bundled-libs/Onyx/RSS.php @@ -0,0 +1,382 @@ +PHP\'s XML Extension is not loaded or available.'); + define('ONYX_ERR_NOT_WRITEABLE', 'The specified cache directory is not writeable.'); + define('ONYX_ERR_INVALID_URI', 'The specified file could not be opened.'); + define('ONYX_ERR_INVALID_ITEM', 'Invalid item index specified.'); + define('ONYX_ERR_NO_STREAM', 'Could not open the specified file. Check the path, and make sure that you have write permissions to this file.'); + define('ONYX_META', 'meta'); + define('ONYX_ITEMS', 'items'); + define('ONYX_IMAGE', 'image'); + define('ONYX_TEXTINPUT', 'textinput'); + define('ONYX_NAMESPACES', 'namespaces'); + define('ONYX_CACHE_AGE', 'cache_age'); + define('ONYX_FETCH_ASSOC', 1); + define('ONYX_FETCH_OBJECT', 2); +} + +class ONYX_RSS +{ + var $parser; + var $conf; + var $rss; + var $data; + var $type; + /* For when PHP v.5 is released + * http://www.phpvolcano.com/eide/php5.php?page=variables + * private $parser; + * private $conf; + * private $rss; + * private $data; + * private $type; + */ + + function ONYX_RSS() + { + $this->__construct(); + } + + // Forward compatibility with PHP v.5 + // http://www.phpvolcano.com/eide/php5.php?page=start + function __construct() + { + $this->conf = array(); + $this->conf['error'] = '
Error on line %s of '.__FILE__.': %s
'; + $this->conf['cache_path'] = dirname(__FILE__); + $this->conf['cache_time'] = 180; + $this->conf['debug_mode'] = true; + $this->conf['fetch_mode'] = ONYX_FETCH_ASSOC; + + if (!function_exists('xml_parser_create')) + { + $this->raiseError((__LINE__-2), ONYX_ERR_NO_PARSER); + return false; + } + + $this->parser = @xml_parser_create(); + if (!is_resource($this->parser)) + { + $this->raiseError((__LINE__-3), ONYX_ERR_NO_PARSER); + return false; + } + xml_set_object($this->parser, $this); + xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false); + xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, LANG_CHARSET); + xml_set_element_handler($this->parser, 'tag_open', 'tag_close'); + xml_set_character_data_handler($this->parser, 'cdata'); + } + + function parse($uri, $file=false, $time=false, $local=false) + { + $this->rss = array(); + $this->rss['cache_age'] = 0; + $this->rss['current_tag'] = ''; + $this->rss['index'] = 0; + $this->rss['output_index'] = -1; + $this->data = array(); + + if ($file) + { + if (!is_writeable($this->conf['cache_path'])) + { + $this->raiseError((__LINE__-2), ONYX_ERR_NOT_WRITEABLE); + return false; + } + $file = str_replace('//', '/', $this->conf['cache_path'].'/'.$file); + if (!$time) + $time = $this->conf['cache_time']; + $this->rss['cache_age'] = file_exists($file) ? ceil((time() - filemtime($file)) / 60) : 0; + + clearstatcache(); + if (!$local && file_exists($file)) + if (($mod = $this->mod_time($uri)) === false) + { + $this->raiseError((__LINE__-2), ONYX_ERR_INVALID_URI); + return false; + } + else + $mod = ($mod !== 0) ? strtotime($mod) : (time()+3600); + elseif ($local) + $mod = (file_exists($file) && ($m = filemtime($uri))) ? $m : time()+3600; + } + if ( !$file || + ($file && !file_exists($file)) || + ($file && file_exists($file) && $time <= $this->rss['cache_age'] && $mod >= (time() - ($this->rss['cache_age'] * 60)))) + { + clearstatcache(); + if (!($fp = @fopen($uri, 'r'))) + { + $this->raiseError((__LINE__-2), ONYX_ERR_INVALID_URI); + return false; + } + $firstchunk_read = false; + while ($chunk = fread($fp, 4096)) + { + if (!$firstchunk_read && @preg_match('@]*encoding="([^"]+)"@i', $chunk, $xml_encoding)) { + $this->rss['encoding'] = strtolower($xml_encoding[1]); + } + $parsedOkay = xml_parse($this->parser, $chunk, feof($fp)); + if (!$parsedOkay && xml_get_error_code($this->parser) != XML_ERROR_NONE) + { + $this->raiseError((__LINE__-3), 'File has an XML error ('.xml_error_string(xml_get_error_code($this->parser)).' at line '.xml_get_current_line_number($this->parser).').'); + return false; + } + $firstchunk_read = true; + } + fclose($fp); + clearstatcache(); + if ($file) + { + if (!($cache = @fopen($file, 'w'))) + { + $this->raiseError((__LINE__-2), 'Could not write to cache file ('.$file.'). The path may be invalid or you may not have write permissions.'); + return false; + } + fwrite($cache, serialize($this->data)); + fclose($cache); + $this->rss['cache_age'] = 0; + } + } + else + { + clearstatcache(); + if (!($fp = @fopen($file, 'r'))) + { + $this->raiseError((__LINE__-2), 'Could not read contents of cache file ('.$cache_file.').'); + return false; + } + $this->data = unserialize(fread($fp, filesize($file))); + fclose($fp); + } + return true; + } + + function parseLocal($uri, $file=false, $time=false) + { + return $this->parse($uri, $file, $time, true); + } + + //private function tag_open($parser, $tag, $attrs) + function tag_open($parser, $tag, $attrs) + { + $this->rss['current_tag'] = $tag = strtolower($tag); + switch ($tag) + { + case 'channel': + case 'image': + case 'textinput': + $this->type = $tag; + break; + case 'item': + $this->type = $tag; + $this->rss['index']++; + break; + default: + break; + } + if (sizeof($attrs)) + foreach ($attrs as $k => $v) + if (strpos($k, 'xmlns') !== false) + $this->data['namespaces'][$k] = $v; + } + + //private function tag_close($parser, $tag){} + function tag_close($parser, $tag){} + + //private function cdata($parser, $cdata) + function cdata($parser, $cdata) + { + if (strlen(trim($cdata)) && $cdata != "\n") + switch ($this->type) + { + case 'channel': + case 'image': + case 'textinput': + (!isset($this->data[$this->type][$this->rss['current_tag']]) || + !strlen($this->data[$this->type][$this->rss['current_tag']])) ? + $this->data[$this->type][$this->rss['current_tag']] = $cdata : + $this->data[$this->type][$this->rss['current_tag']].= $cdata; + break; + case 'item': + (!isset($this->data['items'][$this->rss['index']-1][$this->rss['current_tag']]) || + !strlen($this->data['items'][$this->rss['index']-1][$this->rss['current_tag']])) ? + $this->data['items'][$this->rss['index']-1][$this->rss['current_tag']] = $cdata : + $this->data['items'][$this->rss['index']-1][$this->rss['current_tag']].= $cdata; + break; + } + } + + function getData($type) + { + if ($type == ONYX_META) + return $this->conf['fetch_mode'] == 1 ? $this->data['channel'] : (object)$this->data['channel']; + if ($type == ONYX_IMAGE) + return $this->conf['fetch_mode'] == 1 ? $this->data['image'] : (object)$this->data['image']; + if ($type == ONYX_TEXTINPUT) + return $this->conf['fetch_mode'] == 1 ? $this->data['textinput'] : (object)$this->data['textinput']; + if ($type == ONYX_ITEMS) + { + if ($this->conf['fetch_mode'] == 1) + return $this->data['items']; + + $temp = array(); + for ($i=0; $i < sizeof($this->data['items']); $i++) + $temp[] = (object)$this->data['items'][$i]; + + return $temp; + } + if ($type == ONYX_NAMESPACES) + return $this->conf['fetch_mode'] == 1 ? $this->data['namespaces'] : (object)$this->data['namespaces']; + if ($type == ONYX_CACHE_AGE) + return $this->rss['cache_age']; + + return false; + } + + function numItems() + { + return sizeof($this->data['items']); + } + + function getNextItem($max=false) + { + $type = $this->conf['fetch_mode']; + $this->rss['output_index']++; + if (($max && $this->rss['output_index'] > $max) || !isset($this->data['items'][$this->rss['output_index']])) + return false; + + return ($type == ONYX_FETCH_ASSOC) ? $this->data['items'][$this->rss['output_index']] : + (($type == ONYX_FETCH_OBJECT) ? (object)$this->data['items'][$this->rss['output_index']] : false); + } + + function itemAt($num) + { + if (!isset($this->data['items'][$num])) + { + $this->raiseError((__LINE__-3), ONYX_ERR_INVALID_ITEM); + return false; + } + + $type = $this->conf['fetch_mode']; + return ($type == ONYX_FETCH_ASSOC) ? $this->data['items'][$num] : + (($type == ONYX_FETCH_OBJECT) ? (object)$this->data['items'][$num] : false); + } + + function startBuffer($file=false) + { + $this->conf['output_file'] = $file; + ob_start(); + } + + function endBuffer() + { + if (!$this->conf['output_file']) + ob_end_flush(); + else + { + if (!($fp = @fopen($this->conf['output_file'], 'w'))) + { + $this->raiseError((__LINE__-2), ONYX_ERR_NO_STREAM); + ob_end_flush(); + return; + } + fwrite($fp, ob_get_contents()); + fclose($fp); + ob_end_clean(); + } + } + + //private function raiseError($line, $err) + function raiseError($line, $err) + { + if ($this->conf['debug_mode']) + printf($this->conf['error'], $line, $err); + } + + function setCachePath($path) + { + $this->conf['cache_path'] = $path; + } + + function setExpiryTime($time) + { + $this->conf['cache_time'] = $time; + } + + function setDebugMode($state) + { + $this->conf['debug_mode'] = (bool)$state; + } + + function setFetchMode($mode) + { + $this->conf['fetch_mode'] = $mode; + } + + //private function mod_time($uri) + function mod_time($uri) + { + if (function_exists('version_compare') && version_compare(phpversion(), '4.3.0') >= 0) + { + if (!($fp = @fopen($uri, 'r'))) + return false; + + $meta = stream_get_meta_data($fp); + for ($j = 0; isset($meta['wrapper_data'][$j]); $j++) + if (strpos(strtolower($meta['wrapper_data'][$j]), 'last-modified') !== false) + { + $modtime = substr($meta['wrapper_data'][$j], 15); + break; + } + fclose($fp); + } + else + { + $parts = parse_url($uri); + $host = $parts['host']; + $path = $parts['path']; + + if (!($fp = @fsockopen($host, 80))) + return false; + + $req = "HEAD $path HTTP/1.1\r\nUser-Agent: PHP/".phpversion(); + $req.= "\r\nHost: $host\r\nAccept: */*\r\n\r\n"; + fputs($fp, $req); + + while (!feof($fp)) + { + $str = fgets($fp, 4096); + if (strpos(strtolower($str), 'last-modified') !== false) + { + $modtime = substr($str, 15); + break; + } + } + fclose($fp); + } + return (isset($modtime)) ? $modtime : 0; + } +} + + +?> diff --git a/bundled-libs/PEAR.php b/bundled-libs/PEAR.php new file mode 100644 index 0000000..5ed8eac --- /dev/null +++ b/bundled-libs/PEAR.php @@ -0,0 +1,956 @@ + | +// | Stig Bakken | +// | Tomas V.V.Cox | +// +----------------------------------------------------------------------+ +// +// $Id: PEAR.php,v 1.1.1.1 2003/03/28 20:05:27 sterling Exp $ +// + +define('PEAR_ERROR_RETURN', 1); +define('PEAR_ERROR_PRINT', 2); +define('PEAR_ERROR_TRIGGER', 4); +define('PEAR_ERROR_DIE', 8); +define('PEAR_ERROR_CALLBACK', 16); +define('PEAR_ERROR_EXCEPTION', 32); +define('PEAR_ZE2', (function_exists('version_compare') && + version_compare(zend_version(), "2-dev", "ge"))); + +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); + define('OS_UNIX', false); + define('PEAR_OS', 'Windows'); +} else { + define('OS_WINDOWS', false); + define('OS_UNIX', true); + define('PEAR_OS', 'Unix'); // blatant assumption +} + +$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; +$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; +$GLOBALS['_PEAR_destructor_object_list'] = array(); +$GLOBALS['_PEAR_shutdown_funcs'] = array(); +$GLOBALS['_PEAR_error_handler_stack'] = array(); + +ini_set('track_errors', true); + +/** + * Base class for other PEAR classes. Provides rudimentary + * emulation of destructors. + * + * If you want a destructor in your class, inherit PEAR and make a + * destructor method called _yourclassname (same name as the + * constructor, but with a "_" prefix). Also, in your constructor you + * have to call the PEAR constructor: $this->PEAR();. + * The destructor method will be called without parameters. Note that + * at in some SAPI implementations (such as Apache), any output during + * the request shutdown (in which destructors are called) seems to be + * discarded. If you need to get any debug information from your + * destructor, use error_log(), syslog() or something similar. + * + * IMPORTANT! To use the emulated destructors you need to create the + * objects by reference, ej: $obj =& new PEAR_child; + * + * @since PHP 4.0.2 + * @author Stig Bakken + * @see http://pear.php.net/manual/ + */ +class PEAR +{ + // {{{ properties + + /** + * Whether to enable internal debug messages. + * + * @var bool + * @access private + */ + var $_debug = false; + + /** + * Default error mode for this object. + * + * @var int + * @access private + */ + var $_default_error_mode = null; + + /** + * Default error options used for this object when error mode + * is PEAR_ERROR_TRIGGER. + * + * @var int + * @access private + */ + var $_default_error_options = null; + + /** + * Default error handler (callback) for this object, if error mode is + * PEAR_ERROR_CALLBACK. + * + * @var string + * @access private + */ + var $_default_error_handler = ''; + + /** + * Which class to use for error objects. + * + * @var string + * @access private + */ + var $_error_class = 'PEAR_Error'; + + /** + * An array of expected errors. + * + * @var array + * @access private + */ + var $_expected_errors = array(); + + // }}} + + // {{{ constructor + + /** + * Constructor. Registers this object in + * $_PEAR_destructor_object_list for destructor emulation if a + * destructor object exists. + * + * @param string $error_class (optional) which class to use for + * error objects, defaults to PEAR_Error. + * @access public + * @return void + */ + function PEAR($error_class = null) + { + $classname = get_class($this); + if ($this->_debug) { + print "PEAR constructor called, class=$classname\n"; + } + if ($error_class !== null) { + $this->_error_class = $error_class; + } + while ($classname) { + $destructor = "_$classname"; + if (method_exists($this, $destructor)) { + global $_PEAR_destructor_object_list; + $_PEAR_destructor_object_list[] = &$this; + break; + } else { + $classname = get_parent_class($classname); + } + } + } + + // }}} + // {{{ destructor + + /** + * Destructor (the emulated type of...). Does nothing right now, + * but is included for forward compatibility, so subclass + * destructors should always call it. + * + * See the note in the class desciption about output from + * destructors. + * + * @access public + * @return void + */ + function _PEAR() { + if ($this->_debug) { + printf("PEAR destructor called, class=%s\n", get_class($this)); + } + } + + // }}} + // {{{ getStaticProperty() + + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR::getStaticProperty('myVar'); + * You MUST use a reference, or they will not persist! + * + * @access public + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + function &getStaticProperty($class, $var) + { + static $properties; + return $properties[$class][$var]; + } + + // }}} + // {{{ registerShutdownFunc() + + /** + * Use this function to register a shutdown method for static + * classes. + * + * @access public + * @param mixed $func The function name (or array of class/method) to call + * @param mixed $args The arguments to pass to the function + * @return void + */ + function registerShutdownFunc($func, $args = array()) + { + $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); + } + + // }}} + // {{{ isError() + + /** + * Tell whether a value is a PEAR error. + * + * @param mixed $data the value to test + * @param int $code if $data is an error object, return true + * only if $obj->getCode() == $code + * @access public + * @return bool true if parameter is an error + */ + function isError($data, $code = null) + { + if (is_object($data) && (get_class($data) == 'pear_error' || + is_subclass_of($data, 'pear_error'))) { + return $code === null ? true : $data->getCode() == $code; + } + return false; + } + + // }}} + // {{{ setErrorHandling() + + /** + * Sets how errors generated by this object should be handled. + * Can be invoked both in objects and statically. If called + * statically, setErrorHandling sets the default behaviour for all + * PEAR objects. If called in an object, setErrorHandling sets + * the default behaviour for that object. + * + * @param int $mode + * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. + * + * @param mixed $options + * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one + * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * + * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected + * to be the callback function or method. A callback + * function is a string with the name of the function, a + * callback method is an array of two elements: the element + * at index 0 is the object, and the element at index 1 is + * the name of the method to call in the object. + * + * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is + * a printf format string used when printing the error + * message. + * + * @access public + * @return void + * @see PEAR_ERROR_RETURN + * @see PEAR_ERROR_PRINT + * @see PEAR_ERROR_TRIGGER + * @see PEAR_ERROR_DIE + * @see PEAR_ERROR_CALLBACK + * @see PEAR_ERROR_EXCEPTION + * + * @since PHP 4.0.5 + */ + + function setErrorHandling($mode = null, $options = null) + { + if (isset($this)) { + $setmode = &$this->_default_error_mode; + $setoptions = &$this->_default_error_options; + } else { + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + } + + switch ($mode) { + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case PEAR_ERROR_EXCEPTION: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + if ((is_string($options) && function_exists($options)) || + (is_array($options) && method_exists(@$options[0], @$options[1]))) + { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + } + + // }}} + // {{{ expectError() + + /** + * This method is used to tell which errors you expect to get. + * Expected errors are always returned with error mode + * PEAR_ERROR_RETURN. Expected error codes are stored in a stack, + * and this method pushes a new element onto it. The list of + * expected errors are in effect until they are popped off the + * stack with the popExpect() method. + * + * Note that this method can not be called statically + * + * @param mixed $code a single error code or an array of error codes to expect + * + * @return int the new depth of the "expected errors" stack + * @access public + */ + function expectError($code = '*') + { + if (is_array($code)) { + array_push($this->_expected_errors, $code); + } else { + array_push($this->_expected_errors, array($code)); + } + return sizeof($this->_expected_errors); + } + + // }}} + // {{{ popExpect() + + /** + * This method pops one element off the expected error codes + * stack. + * + * @return array the list of error codes that were popped + */ + function popExpect() + { + return array_pop($this->_expected_errors); + } + + // }}} + // {{{ _checkDelExpect() + + /** + * This method checks unsets an error code if available + * + * @param mixed error code + * @return bool true if the error code was unset, false otherwise + * @access private + * @since PHP 4.3.0 + */ + function _checkDelExpect($error_code) + { + $deleted = false; + + foreach ($this->_expected_errors AS $key => $error_array) { + if (in_array($error_code, $error_array)) { + unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); + $deleted = true; + } + + // clean up empty arrays + if (0 == count($this->_expected_errors[$key])) { + unset($this->_expected_errors[$key]); + } + } + return $deleted; + } + + // }}} + // {{{ delExpect() + + /** + * This method deletes all occurences of the specified element from + * the expected error codes stack. + * + * @param mixed $error_code error code that should be deleted + * @return mixed list of error codes that were deleted or error + * @access public + * @since PHP 4.3.0 + */ + function delExpect($error_code) + { + $deleted = false; + + if ((is_array($error_code) && (0 != count($error_code)))) { + // $error_code is a non-empty array here; + // we walk through it trying to unset all + // values + foreach($error_code AS $key => $error) { + if ($this->_checkDelExpect($error)) { + $deleted = true; + } else { + $deleted = false; + } + } + return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } elseif (!empty($error_code)) { + // $error_code comes alone, trying to unset it + if ($this->_checkDelExpect($error_code)) { + return true; + } else { + return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } + } else { + // $error_code is empty + return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME + } + } + + // }}} + // {{{ raiseError() + + /** + * This method is a wrapper that returns an instance of the + * configured error class with this object's default error + * handling applied. If the $mode and $options parameters are not + * specified, the object's defaults are used. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. + * + * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter + * specifies the PHP-internal error level (one of + * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * If $mode is PEAR_ERROR_CALLBACK, this + * parameter specifies the callback function or + * method. In other error modes this parameter + * is ignored. + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @param string $error_class The returned error object will be + * instantiated from this class, if specified. + * + * @param bool $skipmsg If true, raiseError will only pass error codes, + * the error message parameter will be dropped. + * + * @access public + * @return object a PEAR error object + * @see PEAR::setErrorHandling + * @since PHP 4.0.5 + */ + function &raiseError($message = null, + $code = null, + $mode = null, + $options = null, + $userinfo = null, + $error_class = null, + $skipmsg = false) + { + // The error is yet a PEAR error object + if (is_object($message)) { + $code = $message->getCode(); + $userinfo = $message->getUserInfo(); + $error_class = $message->getType(); + $message = $message->getMessage(); + } + + if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) { + if ($exp[0] == "*" || + (is_int(reset($exp)) && in_array($code, $exp)) || + (is_string(reset($exp)) && in_array($message, $exp))) { + $mode = PEAR_ERROR_RETURN; + } + } + // No mode given, try global ones + if ($mode === null) { + // Class error handler + if (isset($this) && isset($this->_default_error_mode)) { + $mode = $this->_default_error_mode; + $options = $this->_default_error_options; + // Global error handler + } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { + $mode = $GLOBALS['_PEAR_default_error_mode']; + $options = $GLOBALS['_PEAR_default_error_options']; + } + } + + if ($error_class !== null) { + $ec = $error_class; + } elseif (isset($this) && isset($this->_error_class)) { + $ec = $this->_error_class; + } else { + $ec = 'PEAR_Error'; + } + if ($skipmsg) { + return new $ec($code, $mode, $options, $userinfo); + } else { + return new $ec($message, $code, $mode, $options, $userinfo); + } + } + + // }}} + // {{{ throwError() + + /** + * Simpler form of raiseError with fewer options. In most cases + * message, code and userinfo are enough. + * + * @param string $message + * + */ + function &throwError($message = null, + $code = null, + $userinfo = null) + { + if (isset($this)) { + return $this->raiseError($message, $code, null, null, $userinfo); + } else { + return PEAR::raiseError($message, $code, null, null, $userinfo); + } + } + + // }}} + // {{{ pushErrorHandling() + + /** + * Push a new error handler on top of the error handler options stack. With this + * you can easily override the actual error handler for some code and restore + * it later with popErrorHandling. + * + * @param mixed $mode (same as setErrorHandling) + * @param mixed $options (same as setErrorHandling) + * + * @return bool Always true + * + * @see PEAR::setErrorHandling + */ + function pushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + if (isset($this)) { + $def_mode = &$this->_default_error_mode; + $def_options = &$this->_default_error_options; + } else { + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + } + $stack[] = array($def_mode, $def_options); + + if (isset($this)) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + $stack[] = array($mode, $options); + return true; + } + + // }}} + // {{{ popErrorHandling() + + /** + * Pop the last error handler used + * + * @return bool Always true + * + * @see PEAR::pushErrorHandling + */ + function popErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + if (isset($this)) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + return true; + } + + // }}} + // {{{ loadExtension() + + /** + * OS independant PHP extension load. Remember to take care + * on the correct extension name for case sensitive OSes. + * + * @param string $ext The extension name + * @return bool Success or not on the dl() call + */ + function loadExtension($ext) + { + if (!extension_loaded($ext)) { + if (OS_WINDOWS) { + $suffix = '.dll'; + } elseif (PHP_OS == 'HP-UX') { + $suffix = '.sl'; + } elseif (PHP_OS == 'AIX') { + $suffix = '.a'; + } elseif (PHP_OS == 'OSX') { + $suffix = '.bundle'; + } else { + $suffix = '.so'; + } + return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); + } + return true; + } + + // }}} +} + +// {{{ _PEAR_call_destructors() + +function _PEAR_call_destructors() +{ + global $_PEAR_destructor_object_list; + if (is_array($_PEAR_destructor_object_list) && + sizeof($_PEAR_destructor_object_list)) + { + reset($_PEAR_destructor_object_list); + while (list($k, $objref) = each($_PEAR_destructor_object_list)) { + $classname = get_class($objref); + while ($classname) { + $destructor = "_$classname"; + if (method_exists($objref, $destructor)) { + $objref->$destructor(); + break; + } else { + $classname = get_parent_class($classname); + } + } + } + // Empty the object list to ensure that destructors are + // not called more than once. + $_PEAR_destructor_object_list = array(); + } + + // Now call the shutdown functions + if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) { + foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { + call_user_func_array($value[0], $value[1]); + } + } +} + +// }}} + +class PEAR_Error +{ + // {{{ properties + + var $error_message_prefix = ''; + var $mode = PEAR_ERROR_RETURN; + var $level = E_USER_NOTICE; + var $code = -1; + var $message = ''; + var $userinfo = ''; + var $backtrace = null; + + // }}} + // {{{ constructor + + /** + * PEAR_Error constructor + * + * @param string $message message + * + * @param int $code (optional) error code + * + * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, + * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION + * + * @param mixed $options (optional) error level, _OR_ in the case of + * PEAR_ERROR_CALLBACK, the callback function or object/method + * tuple. + * + * @param string $userinfo (optional) additional user/debug info + * + * @access public + * + */ + function PEAR_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + if ($mode === null) { + $mode = PEAR_ERROR_RETURN; + } + $this->message = $message; + $this->code = $code; + $this->mode = $mode; + $this->userinfo = $userinfo; + if (function_exists("debug_backtrace")) { + $this->backtrace = debug_backtrace(); + } + if ($mode & PEAR_ERROR_CALLBACK) { + $this->level = E_USER_NOTICE; + $this->callback = $options; + } else { + if ($options === null) { + $options = E_USER_NOTICE; + } + $this->level = $options; + $this->callback = null; + } + if ($this->mode & PEAR_ERROR_PRINT) { + if (is_null($options) || is_int($options)) { + $format = "%s"; + } else { + $format = $options; + } + printf($format, $this->getMessage()); + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + trigger_error($this->getMessage(), $this->level); + } + if ($this->mode & PEAR_ERROR_DIE) { + $msg = $this->getMessage(); + if (is_null($options) || is_int($options)) { + $format = "%s"; + if (substr($msg, -1) != "\n") { + $msg .= "\n"; + } + } else { + $format = $options; + } + die(sprintf($format, $msg)); + } + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_string($this->callback) && strlen($this->callback)) { + call_user_func($this->callback, $this); + } elseif (is_array($this->callback) && + sizeof($this->callback) == 2 && + is_object($this->callback[0]) && + is_string($this->callback[1]) && + strlen($this->callback[1])) { + @call_user_func($this->callback, $this); + } + } + if (PEAR_ZE2 && $this->mode & PEAR_ERROR_EXCEPTION) { + eval('throw $this;'); + } + } + + // }}} + // {{{ getMode() + + /** + * Get the error mode from an error object. + * + * @return int error mode + * @access public + */ + function getMode() { + return $this->mode; + } + + // }}} + // {{{ getCallback() + + /** + * Get the callback function/method from an error object. + * + * @return mixed callback function or object/method array + * @access public + */ + function getCallback() { + return $this->callback; + } + + // }}} + // {{{ getMessage() + + + /** + * Get the error message from an error object. + * + * @return string full error message + * @access public + */ + function getMessage() + { + return ($this->error_message_prefix . $this->message); + } + + + // }}} + // {{{ getCode() + + /** + * Get error code from an error object + * + * @return int error code + * @access public + */ + function getCode() + { + return $this->code; + } + + // }}} + // {{{ getType() + + /** + * Get the name of this error/exception. + * + * @return string error/exception name (type) + * @access public + */ + function getType() + { + return get_class($this); + } + + // }}} + // {{{ getUserInfo() + + /** + * Get additional user-supplied information. + * + * @return string user-supplied information + * @access public + */ + function getUserInfo() + { + return $this->userinfo; + } + + // }}} + // {{{ getDebugInfo() + + /** + * Get additional debug information supplied by the application. + * + * @return string debug information + * @access public + */ + function getDebugInfo() + { + return $this->getUserInfo(); + } + + // }}} + // {{{ getBacktrace() + + /** + * Get the call backtrace from where the error was generated. + * Supported with PHP 4.3.0 or newer. + * + * @param int $frame (optional) what frame to fetch + * @return array Backtrace, or NULL if not available. + * @access public + */ + function getBacktrace($frame = null) + { + if ($frame === null) { + return $this->backtrace; + } + return $this->backtrace[$frame]; + } + + // }}} + // {{{ addUserInfo() + + function addUserInfo($info) + { + if (empty($this->userinfo)) { + $this->userinfo = $info; + } else { + $this->userinfo .= " ** $info"; + } + } + + // }}} + // {{{ toString() + + /** + * Make a string representation of this object. + * + * @return string a string with an object summary + * @access public + */ + function toString() { + $modes = array(); + $levels = array(E_USER_NOTICE => 'notice', + E_USER_WARNING => 'warning', + E_USER_ERROR => 'error'); + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_array($this->callback)) { + $callback = get_class($this->callback[0]) . '::' . + $this->callback[1]; + } else { + $callback = $this->callback; + } + return sprintf('[%s: message="%s" code=%d mode=callback '. + 'callback=%s prefix="%s" info="%s"]', + get_class($this), $this->message, $this->code, + $callback, $this->error_message_prefix, + $this->userinfo); + } + if ($this->mode & PEAR_ERROR_PRINT) { + $modes[] = 'print'; + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + $modes[] = 'trigger'; + } + if ($this->mode & PEAR_ERROR_DIE) { + $modes[] = 'die'; + } + if ($this->mode & PEAR_ERROR_RETURN) { + $modes[] = 'return'; + } + return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. + 'prefix="%s" info="%s"]', + get_class($this), $this->message, $this->code, + implode("|", $modes), $levels[$this->level], + $this->error_message_prefix, + $this->userinfo); + } + + // }}} +} + +register_shutdown_function("_PEAR_call_destructors"); + +/* + * Local Variables: + * mode: php + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ +?> diff --git a/bundled-libs/Smarty/BUGS b/bundled-libs/Smarty/BUGS new file mode 100644 index 0000000..9f1a80f --- /dev/null +++ b/bundled-libs/Smarty/BUGS @@ -0,0 +1,7 @@ +Smarty is supported only in PHP 4.0.6 or later. + +Smarty versions previous to 2.0 require the PEAR libraries. Be sure to include +the path to the PEAR libraries in your php include_path. Config_file.class.php +uses the PEAR library for its error handling routines. PEAR comes with the PHP +distribution. Unix users check /usr/local/lib/php, windows users check +C:/php/pear. diff --git a/bundled-libs/Smarty/COPYING.lib b/bundled-libs/Smarty/COPYING.lib new file mode 100644 index 0000000..3b20440 --- /dev/null +++ b/bundled-libs/Smarty/COPYING.lib @@ -0,0 +1,458 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/bundled-libs/Smarty/ChangeLog b/bundled-libs/Smarty/ChangeLog new file mode 100644 index 0000000..2b3cf33 --- /dev/null +++ b/bundled-libs/Smarty/ChangeLog @@ -0,0 +1,6778 @@ +2004-09-11 Messju Mohr + + * libs/plugins/function.debug.php: + removed notice from {debug} + thanks to Peter Billen for pointing this one out! + +2004-09-11 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + fix more object calling syntax issues + +2004-09-10 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + added $smarty->security_settings['ALLOW_CONSTANTS'] + including test-cases for them + +2004-09-09 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + break down regex to digestable chunks, fix multiple param problem with + method calls, + add object method testing to unit_test cases + + * libs/Smarty_Compiler.class.php: + update code comment with more examples + + * libs/Smarty_Compiler.class.php: + allow objects in arbitrary param positions + + * libs/Smarty_Compiler.class.php: + fix object parameter regex, allow one level of object indirection + + * libs/Smarty_Compiler.class.php: + fix compile problem with numeric constants and math operator matching + +2004-09-07 Monte Ohrt + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + update files to 2.6.5-dev + + * (Smarty_2_6_4) + NEWS: + update NEWS file with 2.6.4 header + +2004-08-31 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + fix preg_quote + + * libs/Smarty_Compiler.class.php: + fix math in object params, clean up some regex on the way, change + preg_ delimiters to ~ to avoid character clashes with ! and % + +2004-08-30 Monte Ohrt + + * NEWS + libs/Smarty_Compiler.class.php: + add $smarty.ldelim and $smarty.rdelim to smarty special var + +2004-08-29 Messju Mohr + + * NEWS + libs/core/core.write_file.php: + tempnam() seems to be borken on many installation. + + now we try tempnam first and if that fails we generate our own + temp-filename with uniqid() + +2004-08-23 Monte Ohrt + + * libs/plugins/modifier.capitalize.php: + dont use constant, use static var instead + + * libs/plugins/modifier.capitalize.php: + implement optional param to capitalize for digit behavior + + * libs/plugins/modifier.capitalize.php: + another commit to capitalize, taking special chars into account + +2004-08-23 Messju Mohr + + * libs/Smarty_Compiler.class.php: + cleaned up attribute-handling in Smarty_Compiler::_compile_foreach_start() + +2004-08-23 Monte Ohrt + + * NEWS + libs/plugins/function.html_select_date.php + libs/plugins/modifier.capitalize.php: + fix capitalize modifier to not rely on buggy ucwords() func + +2004-08-20 Monte Ohrt + + * libs/plugins/function.html_select_date.php: + update version + + * NEWS + libs/plugins/function.html_select_date.php: + make time param work with negative timestamps, force year range to include + given date unless explicitly set + +2004-08-19 Monte Ohrt + + * NEWS + libs/plugins/function.fetch.php: + fix bug with fetch, passing user/pass in url did not work + +2004-08-13 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed handling of {foreachelse} and {sectionelse} that got borked with + the latest commit (v 1.330) + +2004-08-12 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + fixed occasional wrong error messages on mismatched tags when + {else}, {elseif}, {foreachelse} or {sectionelse} is involved + + thanks to Ooypunk for pointing me on this + +2004-08-12 Nuno Lopes + + * docs/.cvsignore + docs/Makefile.in + docs/configure.in: + enable russian PDF builds + +2004-07-30 Nuno Lopes + + * docs/configure.in: + typo + + * docs/Makefile.in + docs/README + docs/configure.in: + add make test_xml + this is usefull to detect XML problems + +2004-07-29 Nuno Lopes + + * docs/configure.in: + avoid warnings in head + + * docs/.cvsignore + docs/Makefile.in + docs/README + docs/configure.in: + build pdf files + just type make pdf + +2004-07-27 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + fixed handling of methods arguments. + + thanks to Manfred Wischin for finding this one and providing the + conceptual fix. + +2004-07-23 Messju Mohr + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php: + there was little flaw in smarty_function_html_radios() and + smarty_function_html_checkboxes(): + + the newly introduced assign-attribute was still added to the + tag-output as an extra-attribute. + + fixed. + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_image.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php + libs/plugins/function.html_select_date.php + libs/plugins/function.html_select_time.php + libs/plugins/modifier.date_format.php: + backed out renaming of _get_plugin_filepath() to get_plugin_filepath() + + we'll stick to _get_plugin_filepath() and look for a more viable + solution to be exposed to plugin-writers. + +2004-07-20 Messju Mohr + + * libs/Smarty_Compiler.class.php + libs/core/core.is_trusted.php + libs/plugins/compiler.assign.php: + Some fixes on PhpDocumentor comments. Thanks go to Ruben Vermeersch. + +2004-07-16 andreas halter + + * docs/de/bookinfo.xml + docs/de/getting-started.xml + docs/de/language-defs.ent + docs/de/language-snippets.ent + docs/de/preface.xml: + - updated for 2.6.3 + - updates for new build system + - added missing files + - corrections from users + - revcheck comments for all files + - big up to didou and nuno, brilliant work + - make test: ok + - make: ok + +2004-07-16 Nuno Lopes + + * docs/de/getting-started.xml: + fix the revision tracking tag + the revision number might not be right. just check it, please + +2004-07-16 andreas halter + + * docs/de/getting-started.xml: + - updated version (incl revcheck comment) for revcheck testing + +2004-07-14 Monte Ohrt + + * libs/Smarty.class.php: + replace " with ' where literal strings are quoted (ever so slight speedup) + +2004-07-12 Messju Mohr + + * libs/plugins/modifier.date_format.php: + changed call from $smarty->_get_plugin_filepath() to + $smarty->get_plugin_filepath() + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_image.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php + libs/plugins/function.html_select_date.php + libs/plugins/function.html_select_time.php: + renamed calls to $smarty->_get_plugin_filepath() to + $smarty->get_plugin_filepath() + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php: + renamed Smarty::_get_plugin_filepath() to Smarty::get_plugin_filepath() + + * NEWS + libs/Smarty.class.php + libs/core/core.write_compiled_include.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php: + removed touch() call. changing the timestamp of the compiled-template + to the source template's may be irritating for certain + source-code-caches. now a newly compiled template gets the current + time as timestamp. + +2004-07-02 gerald croes + + * docs/fr/getting-started.xml + docs/fr/preface.xml: + Fixed missing tags to be able to make doc again + + * docs/fr/preface.xml: + added the "is a good thing [TM]" as in en docs + + * docs/fr/getting-started.xml: + added ctags, updated screen => programm listing. + added the technical note founded on the en doc + +2004-07-02 Monte Ohrt + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php + libs/plugins/function.mailto.php: + add assign attribute to html_checkboxes and html_radios + +2004-07-01 Messju Mohr + + * NEWS + libs/Smarty.class.php: + removed use of get_include_filepath() inside + get_auto_filename(). thanks go to c960657 + + * NEWS + libs/Smarty_Compiler.class.php: + enhanced error-reporting for {foreach} + + * NEWS + libs/Smarty_Compiler.class.php: + fixed handling of digits inside tagnames. this problem slipped into + the regexps by adding support for numeric contants next to string + constants as variables. + +2004-06-27 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + fixed escaping of backslashes in Smarty_Compiler::_quote_replace() + +2004-06-23 Monte Ohrt + + * libs/plugins/modifier.date_format.php: + display date_format %e, %T and %D as expected for windows + +2004-06-17 Messju Mohr + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + changed version-number to 2.6.4-dev + +2004-06-16 Monte Ohrt + + * (Smarty_2_6_3) + NEWS: + update NEWS file with version number + +2004-06-09 Monte Ohrt + + * NEWS + libs/plugins/modifier.escape.php: + added escapement of ' + + * docs/fr/translation.xml: + Add other translators. + +2004-06-08 Messju Mohr + + * libs/Smarty.class.php: + made the correct value of "use_sub_dirs" available to the compiler. + (not worth a NEWS-entry, i think) + +2004-06-01 Messju Mohr + + * libs/plugins/function.fetch.php: + fix: proper initialistaion of $content. + thanks to Dmitry Koteroff for pointing this out. + +2004-05-29 Mehdi Achour + + * docs/fr/translation.xml: + oups :) + + * docs/fr/translation.xml: + added translation file + +2004-05-28 Nuno Lopes + + * docs/Makefile.in: + clean also file-entities.php + +2004-05-28 Messju Mohr + + * NEWS + libs/plugins/function.mailto.php: + added obfuscation of protocol-string in {mailto} when using + hex-encoding (thanks to bharat) + +2004-05-26 Messju Mohr + + * NEWS + libs/Smarty.class.php: + enhanced auto-generated filenames for templates_c and cache + + incremented Smarty::_version because the tempfiles' structure changed + a little + +2004-05-23 Mehdi Achour + + * docs/fr/bookinfo.xml + docs/fr/getting-started.xml + docs/fr/preface.xml: + WS and added revcheck + +2004-05-21 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed typo in error-messages + + * docs/de/language-snippets.ent + docs/fr/language-snippets.ent: + added empty language-snippets.ent to fix "make web" + +2004-05-12 Monte Ohrt + + * NEWS + libs/plugins/modifier.escape.php: + add 'nonstd' escape modifier + +2004-05-07 Monte Ohrt + + * NEWS + libs/plugins/block.textformat.php: + update textformat to not output wrap chars after last para + +2004-05-06 Messju Mohr + + * NEWS + libs/core/core.write_file.php: + use tempnam() instead of unqid() to create better temporary files in + smarty_core_write_file(). + + (thanks to xces for finding this race-condition and his work on + fixing it) + +2004-05-04 Messju Mohr + + * libs/Smarty.class.php: + added check if for file_exists() to Smarty::_read_file() + +2004-04-30 Monte Ohrt + + * NEWS + libs/plugins/modifier.escape.php: + add 'mail' attribute to escape modifier + +2004-04-20 Mehdi Achour + + * docs/manual.xml.in: + added the language-snippets.ent file and started using entities for notes + under en/programmers/api-functions + +2004-04-18 Mehdi Achour + + * docs/de/getting-started.xml + docs/fr/getting-started.xml: + new global entity for zend and php-accelerator + + * docs/fr/bookinfo.xml + docs/fr/getting-started.xml + docs/fr/preface.xml: + added myself as translator and added vim comments and xml tags + +2004-04-16 Messju Mohr + + * NEWS: + added entry for numeric constants + + * libs/Smarty_Compiler.class.php: + removed unused 2nd param in call to _parse_var() + + * libs/Smarty_Compiler.class.php: + added explanation for $this->_num_const_regexp + + * NEWS + libs/plugins/modifier.escape.php: + added escape type "decentity" to smarty_modifier_escape() + + * libs/Smarty_Compiler.class.php: + enabled numerical constants be parsed as statements. + (like {10} or {10|@range:12} ) + + * libs/Smarty_Compiler.class.php: + removed unused $smarty_compiler->_dvar_num_var_regexp + + * libs/Smarty.class.php: + reverted Stuff + + * libs/debug.tpl + libs/core/core.assemble_plugin_filepath.php + libs/core/core.read_cache_file.php + libs/core/core.write_file.php + libs/plugins/function.eval.php + libs/plugins/function.popup.php + libs/plugins/modifier.escape.php + libs/plugins/shared.make_timestamp.php: + reverted stuff + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/debug.tpl + libs/core/core.assemble_plugin_filepath.php + libs/core/core.read_cache_file.php + libs/core/core.write_file.php + libs/plugins/function.eval.php + libs/plugins/function.popup.php + libs/plugins/modifier.escape.php + libs/plugins/shared.make_timestamp.php: + Smarty_Compiler.class.php + +2004-04-15 Messju Mohr + + * NEWS + libs/core/core.write_compiled_include.php: + made smarty_core_write_compiled_include() php5-aware + + if someone knows a better way than patching the source with the + tokenizer, please stand up! + +2004-04-14 Nuno Lopes + + * docs/Makefile.in: + remove file-entities.ent also + + * docs/.cvsignore + docs/Makefile.in + docs/README: + allow make revcheck + +2004-04-13 Nuno Lopes + + * docs/configure.in: + do not need inipath + +2004-04-13 Mehdi Achour + + * docs/TODO: + done + + * docs/configure.in + docs/manual.xml.in: + now the files entites are generated dynamically + +2004-04-12 Messju Mohr + + * NEWS + libs/Config_File.class.php + libs/Smarty.class.php: + removed unused functionality to load a subset of lines from a file in + Smarty::_read_file() + + additionally removed a warning that is emitted since php-4.3.5 when + fread() is called on an empty file (with filesize()==0). thanks to + Andreas Streichardt who pointed this out. + + * NEWS + libs/core/core.is_secure.php: + smarty_core_is_secure() only checks the file for readability now, not + the directory where is in. + + * libs/Smarty.class.php: + removed unused security_setting 'ALLOW_CONSTANTS' + +2004-04-07 Messju Mohr + + * libs/plugins/function.assign_debug_info.php + libs/plugins/function.cycle.php + libs/plugins/function.mailto.php: + removed trailing spaces + + * libs/Smarty.class.php: + removed unused $smarty->_error_msg + +2004-04-04 Nuno Lopes + + * docs/configure.in: + fixing my crap + put build_date back on-line + +2004-04-03 Nuno Lopes + + * docs/Makefile.in + docs/configure.in + docs/manual.xml.in: + trying to fix ru problems + +2004-03-30 Monte Ohrt + + * libs/core/core.display_debug_console.php: + fix problem with debug_tpl path and security + + * NEWS + libs/core/core.display_debug_console.php: + fix problem displaying debug console when $default_resource_type is not + "file:" + +2004-03-29 Mehdi Achour + + * docs/TODO: + and finally, add a TODO here + + * docs/de/bookinfo.xml + docs/de/manual.sgml + docs/fr/bookinfo.xml + docs/fr/manual.xml: + translate bookinfo.xml and put back the translators + +2004-03-28 Mehdi Achour + + * docs/manual.xml.in: + add global.ent and define some general entities + + * docs/de/bookinfo.xml + docs/de/getting-started.xml + docs/de/language-defs.ent + docs/de/preface.xml: + add new de files + + * docs/de/appendixes.sgml + docs/de/designers.sgml + docs/de/getting-started.sgml + docs/de/html-common.dsl + docs/de/preface.sgml + docs/de/programmers.sgml: + drop old de files + + * docs/fr/bookinfo.xml + docs/fr/getting-started.xml + docs/fr/manual.xml + docs/fr/preface.xml: + add ommited files + + * docs/fr/language-defs.ent: + split the french dir + + * docs/fr/appendixes.sgml + docs/fr/designers.sgml + docs/fr/getting-started.sgml + docs/fr/html-common.dsl + docs/fr/manual.sgml + docs/fr/preface.sgml + docs/fr/programmers.sgml: + drop old french files + + * docs/manual.xml.in: + let's put the new build system + +2004-03-26 Mehdi Achour + + * docs/de/common.dsl + docs/de/html.dsl + docs/fr/common.dsl + docs/fr/html.dsl + docs/fr/php.dsl: + not needed anymore + +2004-03-24 Nuno Lopes + + * docs/Makefile.in: + updated stylesheets + highlight PHP automatically + + * docs/Makefile.in + docs/html.dsl: + remove unneeded file + +2004-03-23 Nuno Lopes + + * docs/version.ent.in: + remove this also + + * docs/getting-started.sgml: + remove this one too + + * docs/appendixes.sgml + docs/common.dsl + docs/designers.sgml + docs/html-common.dsl + docs/manual.sgml + docs/php.dsl + docs/preface.sgml + docs/programmers.sgml: + removing uneeded files + + * docs/.cvsignore: + commiting missing files for docbook + + * docs/.cvsignore + docs/Makefile.in + docs/configure.in + docs/manual.xml.in: + bundling docbook 4 + now make and make web works + +2004-03-23 Messju Mohr + + * NEWS + libs/plugins/function.config_load.php: + unrolled call to the is_compiled()-check to be able to supply the + correct resource_base_path for config_load. this avoids errors when + config-files are accessed where security is enabled. + + thanks to shuther for pointing out this bug. + +2004-03-20 Nuno Lopes + + * docs/manual.xml.in: + fix build date + +2004-03-18 Messju Mohr + + * libs/core/core.is_secure.php: + removed merging of $smarty->template_dir into $smarty->secure_dir + + the resource_base_path is considerd secure instead. this change should + have absolutely no impact on smarty's security's behaviour + +2004-03-18 Nuno Lopes + + * docs/configure.in: + correcting non-existent var + + * docs/.cvsignore + docs/Makefile.in + docs/configure.in + docs/manual.xml.in + docs/version.ent.in: + generate build date + + * docs/.cvsignore + docs/Makefile.in + docs/README + docs/configure.in + docs/manual.xml.in: + new build/test system + +2004-03-18 Messju Mohr + + * libs/Smarty.class.php: + moved setting of a default resource_base_path from + Smarty::_parse_resource_name() to Smarty::_fetch_resource_info() + + this shouldn't affect anything, since all calls to + _parse_resource_name() that are not done from within + _fetch_resource_info() all pass their own resource_base_path + +2004-03-17 Messju Mohr + + * NEWS + libs/Smarty.class.php: + removed '.' from the list of default resource_base_paths in + _parse_resource_name() + + this should only affect _parse_resource_name() for templates, not for + php-resources and not for config_files. the latter pass two their own + resource_base_path. + +2004-03-16 Mehdi Achour + + * docs/appendixes.sgml + docs/getting-started.sgml + docs/preface.sgml: + adding editor comments + + * docs/appendixes.sgml + docs/getting-started.sgml: + cleaning words spacing, killing tabulations, using roles for + programlisting.. + +2004-03-15 Messju Mohr + + * libs/Smarty.class.php: + simplified Smarty::clear_all_cache(); + +2004-03-12 boots + + * docs/programmers.sgml: + Updated is_cached prototype to indicate proper return type. (thanks to + Geoffrey Hoffman) + +2004-03-11 Messju Mohr + + * libs/core/core.assemble_plugin_filepath.php: + fixed little bug that prevented plugins filepaths that are found in + php's include_path (and not in one of the plugins_dirs) from being + cached in the internal plugins-filepath-cache + +2004-03-01 Monte Ohrt + + * docs/designers.sgml: + update include_php docs:wq + :q + + * docs/appendixes.sgml: + update componentized template example to something useful + +2004-02-24 Messju Mohr + + * NEWS + libs/Smarty.class.php: + _parse_resource_name() returned true on non-existant absolute + paths. This caused a warning on _fetch_resource_info() when used in + conjunction with template_exists(). It should be fixed now without + negative effects. + +2004-02-24 Monte Ohrt + + * docs/designers.sgml: + one more typo + + * docs/designers.sgml: + fix typo + +2004-02-24 Messju Mohr + + * NEWS + libs/core/core.is_secure.php: + smarty_resource_*_secure got &$smarty passed errornously as 3rd + parameter and not as 2nd. this is fixed. + +2004-02-23 Messju Mohr + + * NEWS: + fix handling of integer values like width and delay im + smarty_function_popup() + + * libs/plugins/function.popup.php: + fixed handling of integer-attributes + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + updated version to 2.6.3-dev + +2004-02-22 Messju Mohr + + * libs/plugins/function.html_select_date.php: + removed notice on html_select_date with the month_empty-attribute + + * libs/plugins/function.mailto.php: + removed 2 notices of undefined vars (thanks Cit) + +2004-02-17 Monte Ohrt + + * NEWS: + add header + + * (Smarty_2_6_2) + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + change some info in headers, remove fluff + +2004-02-13 Messju Mohr + + * NEWS + libs/plugins/function.html_select_date.php: + correctly handle partially empty dates (like "2004--" or "-12-"). + + * docs/programmers.sgml: + learned something about and sgml and applied this to the + use.sub.dirs-section :) + + * docs/designers.sgml: + changed attribute-name "checked" to "selected" in the docs for + html_radios and html_checkboxes. "checked" is deprecated for ages + AFAIK and selected is recommended for consistency with {html_options} + + * docs/programmers.sgml: + added note about use_sub_dirs and Smarty-2.6.2 . + fixed markup for section about clear_compiled_tpl() . + +2004-02-12 Messju Mohr + + * NEWS + libs/Config_File.class.php: + YES and NO should not be booleanized inside triple-quotes in a + config-file. this behaviour changed by accident in 2.6.1 and is now + reverted to pre-2.6.1 behaviour + +2004-02-10 Messju Mohr + + * NEWS + libs/Config_File.class.php: + fixed slurping of a the next line following a triple-quoted value in a + config-file + +2004-02-07 Messju Mohr + + * libs/Config_File.class.php: + avoid @-operator for handling empty lines in Config_File.class.php + + * libs/Smarty_Compiler.class.php: + removed two notices from Smarty_Compiler::_parse_is_expr() + (thanks shuther!) + + * NEWS + libs/Smarty.class.php: + changed default for use_sub_dirs to false + + * libs/plugins/function.mailto.php: + removed notice of undefined variable. (thanks shuther!) + +2004-01-29 Messju Mohr + + * libs/Smarty_Compiler.class.php: + added file and line-number-information to error-messages regarding + assigned objects an an error messages regarding modifiers with + security. + +2004-01-27 Messju Mohr + + * libs/Smarty_Compiler.class.php: + removed use of temporary var $_params in compiled code of block-plugins + + * NEWS + libs/plugins/function.popup.php: + fixed quoting of values in smarty_function_popup() + +2004-01-25 Messju Mohr + + * docs/programmers.sgml: + documented parameters of Smarty::clear_compiled_tpl() + + * libs/Smarty_Compiler.class.php: + Smarty_Compiler::_syntax_error() uses Smarty::_trigger_fatal_error() now + instead of the trigger_error()-function + + * libs/Smarty.class.php: + Smarty::_trigger_fatal_error() uses Smarty::trigger_error() now, + instead of the native trigger_error()-function + + * libs/Smarty_Compiler.class.php: + unrecognized custom-functions trigger an error at compile now, not at + display-time. + +2004-01-23 Monte Ohrt + + * docs/getting-started.sgml: + reword a paragraph + +2004-01-22 Messju Mohr + + * libs/plugins/function.config_load.php: + removed emission of unnecessary notices for unavailable config-files + in config_load() + + * NEWS + libs/Config_File.class.php: + fixed handling of hidden sections in Config_File + +2004-01-21 Messju Mohr + + * NEWS + libs/plugins/function.config_load.php: + added handling of resources for {config_load} + +2004-01-19 Messju Mohr + + * NEWS + libs/plugins/function.html_table.php: + fixed bug when using arrays with tr_attr and td_attr in {html_table} + +2004-01-16 Monte Ohrt + + * NEWS: + add unit testing + + * NEWS + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + update version numbers, add initial unit test directory + + * (Smarty_2_6_1) + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + update version numbers for 2.6.1 release + +2004-01-16 Messju Mohr + + * (Smarty_2_6_1) + NEWS + docs/programmers.sgml + libs/Smarty.class.php: + renamed $smarty->tpl_rror_reporting to $smarty->error_reporting + "tpl_" is a bit redundant here (it's a TemPLate-engine overall :) + +2004-01-15 Messju Mohr + + * libs/plugins/function.html_image.php: + forgot to remove duplicate is_secure()-check + + * NEWS + libs/plugins/function.html_image.php: + fix: $smarty->security is now correctly handled + + minor optimizations: + core/core.is_secure.php is only included when needed + $dpi_default is only determined when needed + +2004-01-14 Messju Mohr + + * docs/appendixes.sgml + docs/programmers.sgml: + removed suggestions to use extract() from the manual + + * docs/designers.sgml: + fixed typo + +2004-01-12 Messju Mohr + + * docs/designers.sgml: + mention SCRIPT_NAME below {$smarty} reserved variable because it got + lost in the docs for $smarty->global_assign + + * docs/designers.sgml: + added docs for {$smarty.version} special variable + + * docs/programmers.sgml: + removed docs for $global_assign + + * docs/programmers.sgml: + added docs for tpl_error_reporting + + * docs/designers.sgml: + added docs for year_empty-, month_empty- and day_emtpy-attributes of + html_select_date. maybe an example is needed to better explain empty + values in YYY-MM-DD. + +2004-01-10 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed handling of {php}-tags + +2004-01-10 Monte Ohrt + + * docs/designers.sgml: + fix html_checkboxes examples + +2004-01-08 Messju Mohr + + * NEWS + libs/core/core.assemble_plugin_filepath.php: + added caching of requested paths to smarty_core_assemble_plugin_filepath() + + * NEWS: + fix handling of comments inside {php}- and {literal}-blocks + + * libs/Smarty_Compiler.class.php: + fixed handling of comments inside {php} and {literal} + +2004-01-06 Messju Mohr + + * NEWS + libs/Config_File.class.php: + fixed bug handling triple-quotes in config-files + + * libs/Config_File.class.php: + fixed bugs with triple-quotes in config-files + thanks BRDude for finding them testing! + +2004-01-02 Messju Mohr + + * libs/Smarty.class.php: + removed unnecessary param in call to _fetch_resource_info() + +2003-12-30 Messju Mohr + + * libs/Smarty.class.php: + oops! removed tabs. + +2003-12-27 Messju Mohr + + * NEWS + libs/Smarty.class.php: + made $SCRIPT_NAME available again + changes default for request_use_auto_global to prefer autoglobals + + * libs/Smarty.class.php: + removed tabs and trailing spaces + + * NEWS + libs/Smarty_Compiler.class.php: + readded default_modifiers. who removed that? + +2003-12-23 Monte Ohrt + + * NEWS: + add portuguese docs + +2003-12-22 Monte Ohrt + + * docs/designers.sgml: + fix counter example + +2003-12-19 Monte Ohrt + + * libs/Smarty.class.php: + add debug console persistance feature + +2003-12-19 Messju Mohr + + * libs/plugins/block.textformat.php + libs/plugins/function.html_table.php + libs/plugins/function.popup.php: + removed extract(). enhanced parameter parsing. + + * libs/plugins/function.counter.php + libs/plugins/function.fetch.php + libs/plugins/function.popup_init.php + libs/plugins/modifier.capitalize.php + libs/plugins/modifier.cat.php + libs/plugins/modifier.date_format.php + libs/plugins/modifier.debug_print_var.php + libs/plugins/modifier.escape.php + libs/plugins/modifier.indent.php + libs/plugins/modifier.lower.php + libs/plugins/modifier.nl2br.php + libs/plugins/modifier.strip.php + libs/plugins/modifier.upper.php + libs/plugins/modifier.wordwrap.php + libs/plugins/outputfilter.trimwhitespace.php + libs/plugins/shared.escape_special_chars.php: + removed tabs. fixed indentiation. + + * libs/plugins/modifier.truncate.php: + removed tabs + + * libs/plugins/function.counter.php + libs/plugins/function.cycle.php: + removed extract() from parameter-parsing + +2003-12-17 Messju Mohr + + * libs/plugins/function.html_select_date.php: + fix plugin-name in error message + + * libs/plugins/function.html_select_time.php: + remove extract-call from {html_select_time} + + * NEWS + libs/plugins/function.html_select_date.php: + allow single-digit days and months without smarty_make_timestamp() + this makes dates like "1968-11-6" work correctly since no strtotime() + is involved + + add warning when unknown parameter is passed + +2003-12-16 Messju Mohr + + * NEWS + libs/Smarty.class.php: + fix headers sent erroneously with cache_modified_check and fetch() + +2003-12-12 Monte Ohrt + + * libs/plugins/function.config_load.php: + move set_path() call below the conditional bracket + + * NEWS + libs/plugins/function.config_load.php: + fix config_load filepath bug + +2003-12-12 boots + + * docs/designers.sgml: + Updated language.function.if with additional annotation and to fix error + that broke docs build process + +2003-12-11 Messju Mohr + + * libs/Smarty_Compiler.class.php: + little optimization for "is odd" and "is even" + +2003-12-11 Monte Ohrt + + * NEWS + libs/Smarty_Compiler.class.php: + fix 'is even by' and 'is odd by' logic + +2003-12-11 Messju Mohr + + * docs/designers.sgml: + update example-output of {mailto} + + * libs/plugins/function.mailto.php: + removed extract-call -> cleaner parameter-handling + + * libs/plugins/function.mailto.php: + fixed indentiation + + * TODO: + removed two done topics + +2003-12-11 boots + + * docs/designers.sgml: + Updated language.function.if to describe qualifiers (thanks andre) + +2003-12-10 Messju Mohr + + * NEWS + libs/plugins/function.html_select_date.php: + added day_empty, month_empty, year_empty and all_empty attributes + to pass an undefined date use {html_select_date time="--" ...} + + * libs/plugins/function.html_select_date.php: + removed extract()-call + + * libs/plugins/function.html_select_date.php: + fixed indetiation + +2003-12-10 boots + + * NEWS + docs/designers.sgml: + Added table to language.function.if to describe qualifiers + +2003-12-09 Messju Mohr + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_options.php: + strict comparason didn't work in all cases. use type-casting now. + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_options.php: + fix bug when comparing array-keys to "selected" in html_options and + html_checkboxes + + in_array() uses "strict" comparason now. + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php: + removed tabs, fixed indentiation + +2003-12-08 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + add better checks for correctly nested tags when compiling + +2003-12-04 Messju Mohr + + * libs/Smarty.class.php + libs/plugins/function.html_image.php: + fix: check $smarty->request_use_auto_globals at the last occurences of + HTTP_*_VARS + +2003-12-03 Messju Mohr + + * NEWS + libs/Smarty.class.php: + remove $global_assign property from Smarty and $global_assign-handling + from the constructor. the only visible change is, that $SCRIPT_NAME is + not available in the tempates anymore. $smarty.server.SCRIPT_NAME has + to be used from now. + +2003-12-03 boots + + * docs/designers.sgml: + Fixed example for count_characters + +2003-12-01 boots + + * docs/designers.sgml: + Added section "Escaping Smarty Parsing" under Basic Syntax. + +2003-12-01 Messju Mohr + + * libs/core/core.create_dir_structure.php: + thought again about my latest commit and backed it out. + + * libs/core/core.create_dir_structure.php: + fix root-dir-handling on windows filepath + +2003-11-29 boots + + * libs/plugins/function.config_load.php: + really make the fixes the last patch was supposed to do + + * libs/plugins/function.config_load.php: + removed tabs and killed trailing white-space + + * libs/plugins/function.config_load.php: + changed $smarty->_syntax_error to $smarty->trigger_error + +2003-11-27 Messju Mohr + + * NEWS + libs/plugins/modifier.debug_print_var.php: + remove warning in debug_print_var on php-resources + + * README: + fix version number + +2003-11-26 Messju Mohr + + * libs/Smarty_Compiler.class.php: + raise max_level for $smarty.config... to 3 to allow arrays of config-vars + +2003-11-25 Messju Mohr + + * libs/Smarty.class.php: + changed version-tag to indicate incompatibility to older compiled + templates + +2003-11-24 Messju Mohr + + * NEWS + libs/plugins/compiler.assign.php + libs/plugins/function.assign.php: + move function.assign.php to compiler.assign.php + + * libs/core/core.get_include_path.php: + silence occasional warnings of open_basedir- and + safe_mode-restrictions in core.get_include_path.php + +2003-11-23 Messju Mohr + + * libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php: + avoid touch()-ing of recently unlinked files by touch()-ing the + tempfile before rename instead of touch()-ing the resulting file after + rename. + + * NEWS + libs/Smarty.class.php: + add property $tpl_error_reporting + +2003-11-22 Messju Mohr + + * libs/plugins/function.assign.php: + remove use of extract() in smarty_function_assign() + + * NEWS + libs/Smarty.class.php: + remove property $undefined. "null" is used literally instead + +2003-11-21 Messju Mohr + + * libs/Smarty_Compiler.class.php: + remove two E_NOTICES + +2003-11-20 Messju Mohr + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + change version to 2.6.1-dev + +2003-11-19 Monte Ohrt + + * (Smarty_2_6_0) + NEWS: + update NEWS file + + * (Smarty_2_6_0) + docs/designers.sgml + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + change version numbers to 2.6.0 + +2003-11-19 Messju Mohr + + * docs/designers.sgml + docs/de/designers.sgml + docs/fr/designers.sgml: + fix examples of escape-modifier (in docs, docs/de and docs/fr !) + +2003-11-18 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + move Smarty::quote_replace() to Smarty_Compiler::_quote_replace() + + * libs/Smarty.class.php: + removed extract-calls from _include()- and _eval()-wrappers + variables passed with {include_php} have to accessed as members of $params + now + +2003-11-17 Messju Mohr + + * docs/designers.sgml: + fixed typo + +2003-11-13 Messju Mohr + + * libs/Config_File.class.php: + fix occasional notice + +2003-11-13 andreas halter + + * docs/de/designers.sgml: + - added cat modifier, thanks messju :-) + +2003-11-13 Monte Ohrt + + * (Smarty_2_6_0-RC3) + NEWS + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + commit RC3 tags + +2003-11-13 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + fix handling of $var.key inside [] + + * libs/Smarty.class.php: + fix unnecessary loading of core.load_resource_plugin.php + + * (Smarty_2_6_0-RC3) + docs/fr/designers.sgml: + fixed example of html_table + +2003-11-11 Messju Mohr + + * NEWS + libs/core/core.process_cached_inserts.php: + fix handling of assign inside {insert}-tags + +2003-11-06 Messju Mohr + + * libs/core/core.read_cache_file.php: + added $exp_time-parameter + + * docs/programmers.sgml: + added $exp_time to cache_handler_func-example + + * libs/Smarty.class.php + libs/core/core.write_cache_file.php: + added $exp_time-parameter of clear_cache() and clear_all_cache() to + cache_handler_func. + +2003-11-05 Messju Mohr + + * NEWS + libs/Config_File.class.php: + fix handling if [...] inside triple-quotes in config-files + +2003-11-04 Messju Mohr + + * libs/Smarty.class.php: + fixed little bug in _parse_resource_name() (jlgunter, messju) + +2003-11-03 andreas halter + + * docs/designers.sgml + docs/de/designers.sgml + docs/fr/designers.sgml: + - changed Smarty.php.class occurences to Smarty.class.php + +2003-10-29 boots + + * docs/appendixes.sgml + docs/designers.sgml + docs/manual.sgml + docs/programmers.sgml + docs/de/appendixes.sgml + docs/de/designers.sgml + docs/de/programmers.sgml + docs/fr/appendixes.sgml + docs/fr/designers.sgml + docs/fr/getting-started.sgml + docs/fr/manual.sgml + docs/fr/preface.sgml + docs/fr/programmers.sgml: + Fixes to documentation syntax so that all content can be processed used + xsltproc docbook-xsl tools. In particular, fixes unescaped entities, + broken tags, unquoted attributes. + +2003-10-27 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + fix handling of simple-math-operators inside modifiers + +2003-10-25 Messju Mohr + + * libs/Smarty_Compiler.class.php: + removed unused property _output_type + removed unused param $tag_attrs of _parse_var_props() + cleaned up alignment of class-properties + +2003-10-23 Messju Mohr + + * libs/Smarty_Compiler.class.php: + removed notice in php-tag handling in Smarty_Compiler::_compile_file() + + * libs/Smarty_Compiler.class.php: + removed two occasional E_NOTICES from + Smarty_Compiler::_compile_include_php_tag() + + * NEWS + libs/core/core.create_dir_structure.php: + fix handling of trailing-slashes in open_basedir in + smarty_core_create_dir_structure() + +2003-10-20 Messju Mohr + + * libs/Smarty_Compiler.class.php: + elements inside `` are bracketed now inside the compiled-tpl. this + fixes some issues with simple-math inside backticks. + +2003-10-16 Monte Ohrt + + * docs/designers.sgml: + update overlib docs, no working examples + +2003-10-12 Messju Mohr + + * libs/Smarty.class.php + libs/core/core.is_secure.php: + move check for template_dir in secure_dir-array into core.is_secure.php + + this makes template_exists() work correctly with security=true even if + template_dir is not inside the secure_dir-array + +2003-10-11 Messju Mohr + + * libs/plugins/shared.make_timestamp.php: + tightened check for YYYYMMDDHHMMSS-format. thanks konstantin for + pointing this out. + + removed a few tabs. + + * libs/Smarty_Compiler.class.php: + fix precedence of simple-math-operators before modifiers. + thanks dominik! + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.assign_smarty_interface.php + libs/core/core.create_dir_structure.php + libs/core/core.display_debug_console.php + libs/core/core.get_include_path.php + libs/core/core.get_microtime.php + libs/core/core.get_php_resource.php + libs/core/core.is_secure.php + libs/core/core.is_trusted.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php + libs/core/core.process_cached_inserts.php + libs/core/core.process_compiled_include.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include_php.php + libs/core/core.write_compiled_include.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php: + removed tabs from the main and the core/*.php files + +2003-10-08 Monte Ohrt + + * (Smarty_2_6_0-RC2) + NEWS + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + update version numbers to RC2 + +2003-09-18 Messju Mohr + + * docs/designers.sgml + docs/de/designers.sgml: + fixed description of cycle's advance-attribute + +2003-09-16 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + apply modifiers only once to section-loop and foreach-from attributes + +2003-09-15 Messju Mohr + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.write_cache_paths_file.php: + backed out _smarty_cached_paths-file-handling + + * libs/Smarty.class.php + libs/core/core.rm_auto.php: + fixed clear_compiled_tpl with explicit $tpl_file given + fixed return value of smarty_core_rm_auto() + Smarty::_unlink() + + * libs/Smarty.class.php: + little fix in _get_auto_filename() + +2003-09-14 Messju Mohr + + * libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php: + removed auto-filenames from path-cache. merged assemble_auto_filename + back into Smarty::_get_auto_filename() + +2003-09-12 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed quoting of modifier parameters + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.get_php_resource.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php: + remove Smarty::_plugin_implementation_exists() - use php's native + is_callable() + +2003-09-11 Messju Mohr + + * libs/Smarty.class.php: + silenced two notices acces HTTP_SERVER_VARS + +2003-09-10 andreas halter + + * docs/de/designers.sgml + docs/de/getting-started.sgml + docs/de/programmers.sgml: + - minor fixes (2 rep), slight wording changes + - jade transform problem fixed + +2003-09-08 andreas halter + + * docs/de/designers.sgml + docs/de/getting-started.sgml + docs/de/manual.sgml + docs/de/preface.sgml + docs/de/programmers.sgml: + all updated for 2.6.0 release, translated everything from 2_5_0 branch to + 20030908 + +2003-09-04 Messju Mohr + + * libs/Smarty.class.php: + proper checking for files in _fetch_resource_info() + +2003-09-02 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + ignore {strip}/{/strip) inside {strip}-blocks + + * libs/plugins/function.mailto.php: + fixed 2 notices in smarty_function_mailto() + +2003-09-01 Messju Mohr + + * libs/Smarty.class.php: + re-include cache_paths on multiple calls to fetch() to avoid + inconsistencies + at multiple calls to fetch() in one script + + * libs/Smarty_Compiler.class.php: + fixed handling of \r in {strip} + renamed $_trailing_lf to $_additional_newline + + * libs/Smarty_Compiler.class.php: + the weekly fix for {strip} :) + + * docs/designers.sgml: + fixed example for simple math. + +2003-08-29 Messju Mohr + + * libs/core/core.assign_smarty_interface.php + libs/core/core.display_debug_console.php + libs/plugins/function.assign.php + libs/plugins/function.html_options.php + libs/plugins/function.html_table.php: + fixed PHPDocumentor-comments (thanks Konstantin) + + * libs/core/core.rmdir.php: + made rmdir a bit more optimistic. especially it now removes + directories correctly that where created accidently by "safe_mode=On + && $use_sub_dirs=true" + +2003-08-27 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + fixed removal of leading/trailing newlines in {strip}-blocks + +2003-08-25 Messju Mohr + + * INSTALL: + added note emphasizing the introduction of "libs/" with 2.5.0 + + * NEWS + libs/plugins/modifier.escape.php: + fixed proper escaping of " and ' with escape:javascript + +2003-08-22 Messju Mohr + + * NEWS + libs/core/core.assemble_plugin_filepath.php: + fixed bug in traversal of $smarty->plugins_dir-array in + smarty_core_assemble_plugin_filepath(). the first matching plugin in + the path should be used, not the last one. + + * libs/core/core.read_cache_file.php: + discard $_cache_info when the cache should be regenerated + +2003-08-20 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php + libs/plugins/block.strip.php: + reverted {strip} from a block-plugin back into the compiler + + * docs/programmers.sgml: + fixed examples for register_function() and register_block() + + * libs/Smarty.class.php: + made template_exists() quiet when the template does not exist (thanks + to konstatin for pointing this out) + +2003-08-18 Monte Ohrt + + * docs/getting-started.sgml: + fix example title + + * docs/README + docs/getting-started.sgml: + change installation wording confusion + +2003-08-18 Messju Mohr + + * libs/Smarty.class.php + libs/core/core.read_cache_file.php: + fixed unnecessary load of source in template_exists() and the + compile-check of smarty_core_read_cache_file() + + * libs/Smarty_Compiler.class.php: + allow section-, array- and object-dereference in $smarty-references + +2003-08-15 Messju Mohr + + * docs/designers.sgml: + added parameter-descriptions for count_characters (thanks Konstantin + A. Pelepelin) + + fixed docs for {html_checkboxes} + +2003-08-14 Messju Mohr + + * libs/Smarty.class.php + libs/core/core.read_cache_file.php: + fixed timestamp-check of config-files in smarty_core_read_cache_file() + + * libs/Smarty.class.php: + fixed typecasting for arrays in _parse_resource_name() + + * NEWS + libs/plugins/function.config_load.php: + fixes in config_load: + - handling of section-attribute + - reusing the same config-file multiple times + - serialization of config-data for php<4.2.0 (no var_export) + + many thanks to atu for pointing this out and for testing + +2003-08-13 Messju Mohr + + * libs/Smarty.class.php + libs/core/core.smarty_include_php.php: + fixed problem with vars as attributes in {include_php} + +2003-08-13 Monte Ohrt + + * docs/README: + commit README file for documentation compiling + +2003-08-13 Messju Mohr + + * libs/debug.tpl + libs/plugins/modifier.debug_print_var.php: + removed '\r' from debug_print_vars' output + properly escape vars in javascript-version of debug.tpl + +2003-08-11 Monte Ohrt + + * (Smarty_2_6_0_RC1) + NEWS + docs/designers.sgml + docs/html.dsl + docs/php.dsl + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + get ready for 2.6.0-RC1 release + +2003-08-10 Messju Mohr + + * NEWS + libs/Smarty.class.php: + fixed status-header for cache_modified_check under cgi-sapi + +2003-08-09 Messju Mohr + + * libs/core/core.is_secure.php + libs/core/core.is_trusted.php: + synced secure_dir-checking with trusted_dir-checking + + * libs/core/core.is_secure.php: + tightenend path checking in smarty_core_is_secure() + +2003-08-08 Messju Mohr + + * libs/Smarty.class.php: + fix: proper nesting of $smarty->_cache_including flag in cascaded + cached/not-cached/fetched/inserted/foo-templates + + * libs/debug.tpl: + better escaping for $_debug_tpls[templates].filenames + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + removed redundant $smarty from Smarty::_smarty_include() + + * libs/debug.tpl: + proper escaping of filenames in debug-console (thanks to prossel). + +2003-08-07 Messju Mohr + + * docs/programmers.sgml: + added docs for block-methods of registered objects + + * docs/programmers.sgml: + fixed typo in example for registered objects + + * docs/designers.sgml: + fixed exampls of html_image and html_checkboxes + + * libs/plugins/function.debug.php: + fixed {debug} and removed tabs in function.debug.php + + * docs/programmers.sgml: + fixed example for register_object + + * docs/designers.sgml + docs/programmers.sgml: + updated docs for capture, html_table, html_image and register_object + +2003-08-07 Monte Ohrt + + * docs/designers.sgml + docs/programmers.sgml: + add math and default_resource_type to docs + + * docs/getting-started.sgml: + add core to example, add tech note + +2003-08-07 Messju Mohr + + * docs/manual.sgml + docs/fr/manual.sgml: + upd copyright in the docs + +2003-08-07 Monte Ohrt + + * docs/getting-started.sgml: + added core directory to install instructions + +2003-08-07 Messju Mohr + + * docs/designers.sgml + docs/programmers.sgml: + added docs for php-functions as modifiers + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + better caching of attributes for $cacheable=false-plugins + + * docs/programmers.sgml: + added section "caching.cacheable" to the docs, explaining the usage of + the $cacheable-flag of the register_(block|compiler|function)-functions + + * libs/Smarty_Compiler.class.php: + fixed output of custom-functions with cached attributes + + * docs/programmers.sgml: + docs update on callbacks to the register_*-functions + +2003-08-06 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.process_compiled_include.php: + added optional parameter $cache_attrs to register_function() and + register_block(). $cache_attrs is an array containing attribute- names + that should be cached on calls to functions that have $cacheable set + to false. + + * libs/Smarty.class.php: + fixed bug in _run_mod_handler + + * libs/Smarty_Compiler.class.php: + fixed bug with autoload-handling of modifiers. thanks ándre. + +2003-08-05 Messju Mohr + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + updated copyright notice + + * libs/Smarty.class.php + libs/core/core.load_plugins.php: + fixed bug that occurred when using the same not-cacheable plugin in + multiple includes + + * docs/programmers.sgml: + docs-update for plugins.writing + +2003-08-04 Messju Mohr + + * docs/designers.sgml + docs/programmers.sgml: + updated docs for register_block_function(), block-functions, + $request_use_auto_globals and html_checkboxes + +2003-07-31 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + enabled registration of class-methods as callbacks for the + register_*-functions + + use: array('classname', 'method_name')) as callback + +2003-07-29 Messju Mohr + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + modifiers are resolved at compile-time now. _run_mod_handler() is + still used for modifiers with map_array=true (== no preceeding '@') + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.smarty_include.php: + moved _smarty_include() back into Smarty.class.php + + * libs/Smarty.class.php + libs/core/core.load_plugins.php: + prevent unnecessary calls to _read_file() in _is_compiled() + converted method-call to internal function-call in + smarty_core_load_plugins() + +2003-07-28 Messju Mohr + + * libs/Smarty_Compiler.class.php: + quote smarty-header properly to prevent resource-names from escaping from + the comment + +2003-07-25 Messju Mohr + + * libs/core/core.create_dir_structure.php: + weakend race-condition and removed bogus error-message caused by that + in smarty_core_create_dir_structure(). + +2003-07-23 Messju Mohr + + * libs/Smarty.class.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_php_resource.php + libs/core/core.parse_resource_name.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/plugins/function.eval.php: + moved _fetch_resource_info and _parse_resource_name back into + Smarty.class.php + renamed smarty_include and smarty_eval wrappers to _include and _eval + +2003-07-17 Messju Mohr + + * libs/core/core.process_compiled_include.php + libs/core/core.read_cache_file.php: + improved checking of compiled_include against cached-template with + non-cached-chunks + + * libs/core/core.write_compiled_include.php: + fixed too short open-tag + + * libs/plugins/function.eval.php: + fixed assign parameter for eval (must have gotton lost on its way to 2.5.0) + cleaned up indentiation + +2003-07-03 Messju Mohr + + * libs/Smarty_Compiler.class.php: + resurrected $foo->$bar syntax + + * libs/Smarty_Compiler.class.php: + i'm so stupid. kick me. + + * libs/Smarty_Compiler.class.php: + fixed initialisation of $this->_plugins in compile_block_tag() + +2003-07-03 Monte Ohrt + + * libs/Config_File.class.php: + add preg_quote delimiter + +2003-07-03 Messju Mohr + + * libs/Smarty_Compiler.class.php: + applied fix for {$var1->p1|modifier:$var2->p2}-syntax - thanks Dominik + +2003-07-02 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed duplicate generation of arg-list in _compile_block_tag() + + * libs/Smarty_Compiler.class.php: + fixed off-by-one-error in nocache-tag-handling + +2003-06-30 Messju Mohr + + * libs/Smarty_Compiler.class.php: + backed out errornously committed support for $foo->$bar + + * libs/core/core.write_file.php: + fixed indentiation, silenced occasional warning + + * libs/plugins/function.html_image.php: + match first character of file-attribute against "/" instead of + DIRECTORY_SEPARATOR since it is a url-path and not a file-path. + + * libs/Smarty_Compiler.class.php + libs/core/core.write_file.php + libs/plugins/function.html_image.php: + libs/plugins/function.html_image.php + + * libs/Smarty_Compiler.class.php: + re-fixed cacheable_state-handling + + * libs/core/core.display_debug_console.php + libs/core/core.process_cached_inserts.php + libs/core/core.process_compiled_include.php + libs/core/core.run_insert_handler.php: + extincting $this out of smarty_core_*-functions + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + fixed handling of nocache-state + +2003-06-29 Messju Mohr + + * libs/Smarty.class.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/plugins/function.eval.php: + removed $this from smarty_include and smarty_include_php + added cleaner handling of $this to {eval} + + * libs/core/core.load_resource_plugin.php: + fixed inlude_once-call + + * docs/de/designers.sgml + docs/fr/designers.sgml: + fixed examples of html_radios and html_checkboxes in german and french docs + +2003-06-25 Monte Ohrt + + * libs/core/core.assemble_auto_filename.php + libs/core/core.write_cache_paths_file.php: + fix typo, fix write_cache_paths logic + + * libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php: + fix SMARTY_COMPILE_DIR_SEP problem, make local var + +2003-06-24 Monte Ohrt + + * libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php + libs/core/core.write_cache_paths_file.php: + fixed cache_paths bug, simplified filename assembly logic + +2003-06-24 Messju Mohr + + * libs/plugins/function.html_image.php: + added parsing of forgotton param "basedir" + + * libs/Smarty_Compiler.class.php: + fixed $smarty.get-reference + + * libs/plugins/block.textformat.php: + removed warning + + * libs/Smarty_Compiler.class.php: + fixed value of _cacheable_state on compiler-startup + +2003-06-23 Monte Ohrt + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.write_cache_paths_file.php: + make cache_path per resource, fix a couple directory path issues + +2003-06-23 Messju Mohr + + * libs/Smarty_Compiler.class.php: + removed warning when compiling empty template + + * libs/core/core.write_compiled_include.php: + fixed bug in write_compiled_include + + * libs/core/core.assemble_plugin_filepath.php: + fixed warning + +2003-06-22 Messju Mohr + + * libs/plugins/function.eval.php: + fixed propagation of $this into evald code in smarty_function_eval() + + * libs/core/core.write_cache_paths_file.php + libs/core/core.write_compiled_include.php: + fix in compiled-include-handling + + * libs/core/core.assemble_auto_filename.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.assign_smarty_interface.php + libs/core/core.create_dir_structure.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_include_path.php + libs/core/core.get_microtime.php + libs/core/core.get_php_resource.php + libs/core/core.is_secure.php + libs/core/core.is_trusted.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php + libs/core/core.parse_resource_name.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.write_cache_file.php + libs/core/core.write_cache_paths_file.php + libs/core/core.write_compiled_include.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php + libs/plugins/modifier.date_format.php: + started moving from $this to $smarty in core.*.php + +2003-06-21 Monte Ohrt + + * libs/core/core.create_dir_structure.php + libs/core/core.write_file.php + libs/plugins/function.config_load.php: + fix more dir paths + + * NEWS + libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_php_resource.php + libs/core/core.parse_resource_name.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/core/core.write_cache_file.php + libs/core/core.write_cache_paths_file.php + libs/core/core.write_compiled_include.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php + libs/plugins/function.config_load.php + libs/plugins/function.fetch.php + libs/plugins/function.html_image.php: + fix filepaths to core files to use DIRECTORY_SEPARATOR + +2003-06-21 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed {plugin|modifier} syntax + + * libs/Smarty.class.php + libs/core/core.write_compiled_include.php: + fixed compiled include handling + +2003-06-21 Monte Ohrt + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.assemble_auto_filename.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.write_cache_paths_file.php: + added filepath caching + +2003-06-20 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + update more varnames + + * libs/Smarty.class.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_file_info.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_php_resource.php + libs/core/core.parse_file_path.php + libs/core/core.parse_resource_name.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_compiled_template.php + libs/plugins/function.config_load.php: + refactored var naming to better reflect "resource" instead of "file" where + appropriate + +2003-06-19 Messju Mohr + + * libs/Smarty.class.php: + updated version-number to 2.5.0-cvs + + * libs/core/core.write_cache_file.php: + omit is-cache_dir-writable-check if a cache_handler_function is in use + + * libs/core/core.smarty_include_php.php: + fixed comments in smarty_include_php + +2003-06-19 Monte Ohrt + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.display_debug_console.php + libs/core/core.smarty_include.php + libs/plugins/function.eval.php: + split up _compile_template to _compile_file and _compile_source, fix eval + function + VS: ---------------------------------------------------------------------- + + * libs/plugins/function.config_load.php: + fix logic for _is_compiled() + +2003-06-19 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + added optional assign-attribute to {capture}-tag + + * NEWS + libs/Smarty.class.php: + added $cacheable-parameter to register_compiler_function() + +2003-06-18 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.load_plugins.php + libs/core/core.process_compiled_include.php + libs/core/core.read_cache_file.php + libs/core/core.write_cache_file.php + libs/core/core.write_compiled_include.php: + added $cacheable-parameter to register_function() and register_block() + + * libs/Smarty.class.php: + append '.php' to all compiled templates regardless of the settings of + $use_sub_dirs + + * libs/Smarty.class.php + libs/core/core.read_cache_file.php: + fixed $file_path-parameters passed to smarty_core_fetch_file_info() + +2003-06-17 Monte Ohrt + + * NEWS: + fix name + + * libs/Smarty_Compiler.class.php: + change varnames to follow coding methods + + * NEWS + libs/Smarty_Compiler.class.php: + add math patch to core + +2003-06-17 Messju Mohr + + * libs/core/core.smarty_include.php: + switched _process_template() to _is_compiled()-logic + +2003-06-17 Monte Ohrt + + * libs/Smarty.class.php: + fix _is_compiled logic + + * NEWS: + update news file + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + fix _run_mod_handler routine + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_file_info.php + libs/core/core.parse_file_path.php + libs/core/core.write_compiled_template.php + libs/plugins/function.config_load.php: + fix path problems, rename some varibles from "template" to "file" + +2003-06-16 Monte Ohrt + + * libs/core/core.fetch_file_info.php + libs/core/core.fetch_template_info.php: + rename file, commit + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.parse_file_path.php + libs/core/core.read_cache_file.php + libs/plugins/block.strip.php + libs/plugins/block.textformat.php + libs/plugins/compiler.config_load.php + libs/plugins/function.config_load.php + libs/plugins/function.eval.php + libs/plugins/function.fetch.php + libs/plugins/function.html_image.php: + fix config_load, compile fetched arrays to compile_dir, switch display + back to runtime. clean up var names and function names, split up compile + testing and compiling to separate funcs, rename some template_* functions + to + file_* functions and update logic so they can be used for file resources + other than templates. + +2003-06-16 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed little bug in _compile_custom_tag() + +2003-06-16 Monte Ohrt + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.assign_smarty_interface.php + libs/core/core.create_dir_structure.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_template_info.php + libs/core/core.get_include_path.php + libs/core/core.get_microtime.php + libs/core/core.get_php_resource.php + libs/core/core.is_secure.php + libs/core/core.is_trusted.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php + libs/core/core.parse_file_path.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/core/core.write_cache_file.php + libs/core/core.write_compiled_template.php + libs/core/core.write_file.php + libs/plugins/core.assign_smarty_interface.php + libs/plugins/core.create_dir_structure.php + libs/plugins/core.display_debug_console.php + libs/plugins/core.fetch_template_info.php + libs/plugins/core.get_include_path.php + libs/plugins/core.get_microtime.php + libs/plugins/core.get_php_resource.php + libs/plugins/core.is_secure.php + libs/plugins/core.is_trusted.php + libs/plugins/core.load_plugins.php + libs/plugins/core.load_resource_plugin.php + libs/plugins/core.parse_file_path.php + libs/plugins/core.process_cached_inserts.php + libs/plugins/core.read_cache_file.php + libs/plugins/core.rm_auto.php + libs/plugins/core.rmdir.php + libs/plugins/core.run_insert_handler.php + libs/plugins/core.smarty_include.php + libs/plugins/core.smarty_include_php.php + libs/plugins/core.write_cache_file.php + libs/plugins/core.write_compiled_template.php + libs/plugins/core.write_file.php: + move core files into their own directory under SMARTY_DIR, + remove abstraction function _execute_core_function + + * libs/Smarty_Compiler.class.php: + fix newline handling for template for all template tags + +2003-06-11 Monte Ohrt + + * libs/plugins/compiler.config_load.php: + add compiler function to cvs repository + +2003-06-11 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + added config-option "request_use_auto_globals" to make auto-globals be + used as request vars instead of HTTP_*_VARS + +2003-06-11 Monte Ohrt + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/plugins/function.config_load.php: + make config vars compile statically + +2003-06-11 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + backed out newlines patch + + * NEWS + libs/Smarty_Compiler.class.php: + removed newlines in compiled templates after closing tags + +2003-06-10 Messju Mohr + + * docs/de/designers.sgml: + fixed german note on html_image and disk-access + +2003-06-10 Monte Ohrt + + * libs/plugins/core.parse_file_path.php: + fix bug with resource_type resolving + +2003-06-09 Monte Ohrt + + * docs/designers.sgml: + replace example with more practical one + +2003-06-08 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + added block-methods for registered objects + +2003-06-07 Messju Mohr + + * docs/programmers.sgml: + fixed bug in documentation for $smarty->default_modifiers + +2003-06-06 Monte Ohrt + + * libs/plugins/core.parse_file_path.php: + fix problem with new default_resource_type changes + + * NEWS: + update NEWS file info + + * NEWS + libs/Smarty.class.php + libs/plugins/core.parse_file_path.php: + add default_resource_type, ignore 1 char resource names + + * NEWS + libs/Config_File.class.php: + fix bug where config file starts with hidden section + +2003-06-04 Monte Ohrt + + * NEWS + libs/Smarty.class.php: + -** empty log message *** + +2003-06-03 Monte Ohrt + + * libs/plugins/function.html_image.php: + fix example in code comments + +2003-06-03 Messju Mohr + + * NEWS + libs/plugins/function.counter.php: + fixed behaviour of start=... for {counter} + +2003-06-02 Messju Mohr + + * NEWS + libs/plugins/function.counter.php: + fixed assign for {counter} + +2003-05-30 Monte Ohrt + + * libs/plugins/core.write_cache_file.php + libs/plugins/core.write_compiled_template.php: + add discrete error checking pertaining to $cache_dir + and $compile_dir, their existance and writability + +2003-05-28 Messju Mohr + + * NEWS + libs/plugins/function.html_table.php: + added params vdir, hdir and inner to html_table to allow looping over + the data in various directions + +2003-05-28 Monte Ohrt + + * libs/plugins/core.compile_template.php + libs/plugins/core.display_debug_console.php: + fix problem with security and debug.tpl file + +2003-05-23 Monte Ohrt + + * NEWS: + upd NEWS file + + * libs/Smarty_Compiler.class.php: + allow spaces in literal tags + +2003-05-22 Monte Ohrt + + * docs/fr/programmers.sgml: + fix special chars + +2003-05-19 Monte Ohrt + + * NEWS + libs/Smarty_Compiler.class.php: + speed up compiled templates, hardcode plugin filepaths instead of + recalculate at runtime + +2003-05-19 Messju Mohr + + * docs/designers.sgml: + fixed example of {html_image} + + * docs/designers.sgml: + fixed typo + +2003-05-12 Messju Mohr + + * libs/Smarty.class.php + libs/plugins/core.read_cache_file.php + libs/plugins/core.smarty_include.php + libs/plugins/function.config_load.php: + fixed multiple redundant occurrences for 'config' and 'template' in + $smarty->_cache_info + +2003-05-10 Messju Mohr + + * libs/plugins/core.create_dir_structure.php: + refurbished create_dir_structure to use '/' internally + + * libs/plugins/core.create_dir_structure.php: + fixed windows absolute-paths in smarty_core_create_dir_structure() + + * libs/plugins/core.create_dir_structure.php: + fixed error-message + +2003-05-09 Messju Mohr + + * libs/Smarty_Compiler.class.php: + fixed warning due to missing param to _execute_core_function() + + * libs/Smarty_Compiler.class.php: + fixed quoting in _compile_include_php + + * libs/Smarty_Compiler.class.php: + fixed quoting of "file"-parameter in _compile_include_tag() + +2003-05-08 Monte Ohrt + + * docs/programmers.sgml: + fix typo + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/plugins/core.compile_template.php + libs/plugins/core.create_dir_structure.php + libs/plugins/core.fetch_template_info.php + libs/plugins/core.get_include_path.php + libs/plugins/core.get_microtime.php + libs/plugins/core.get_php_resource.php + libs/plugins/core.is_secure.php + libs/plugins/core.is_trusted.php + libs/plugins/core.load_plugins.php + libs/plugins/core.load_resource_plugin.php + libs/plugins/core.parse_file_path.php + libs/plugins/core.process_cached_inserts.php + libs/plugins/core.read_cache_file.php + libs/plugins/core.rm_auto.php + libs/plugins/core.rmdir.php + libs/plugins/core.run_insert_handler.php + libs/plugins/core.smarty_include.php + libs/plugins/core.smarty_include_php.php + libs/plugins/core.write_cache_file.php + libs/plugins/core.write_compiled_template.php + libs/plugins/core.write_file.php + libs/plugins/function.config_load.php + libs/plugins/function.fetch.php + libs/plugins/function.html_image.php: + abstract more private functions to plugin directory + + * libs/Config_File.class.php: + only add DIRECTORY_SEPARATOR if it isn't already present + + * libs/Config_File.class.php: + fix directory separator code, use DIRECTORY_SEPARATOR + +2003-05-08 Messju Mohr + + * docs/designers.sgml: + fixed example of html_checkboxes + + * NEWS + libs/Smarty.class.php: + fixed bug in _create_dir_structure() when used with + open_basedir-restriction and relative paths + + * docs/designers.sgml: + fixed example for html_radios + +2003-05-07 Monte Ohrt + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/plugins/core.assign_smarty_interface.php + libs/plugins/core.display_debug_console.php + libs/plugins/function.display_debug_console.php: + abstracted display_debug_console and assign_smarty_interface to plugin dir + as a test + + * libs/Smarty.class.php + libs/plugins/function.display_debug_console.php: + correct misc varnames, abstract debug console display to plugin function + + * libs/plugins/modifier.escape.php: + fix typo + +2003-05-05 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + add % to math + + * libs/Smarty.class.php: + clean up comments, formatting + + * NEWS + libs/Smarty.class.php: + keep DIR_SEP for 3rd party compatability + + * NEWS + libs/Smarty.class.php: + remove DIR_SEP, use DIRECTORY_SEPARATOR exclusively + + * libs/Smarty_Compiler.class.php: + remove ++ and -- math operators on template vars + +2003-05-04 Messju Mohr + + * libs/Smarty_Compiler.class.php: + removed unused parameter $quote from Smarty_Compiler::_parse_attrs() + + * libs/plugins/function.html_image.php: + fixed DIR_SEP in html_image-plugin + +2003-05-04 Monte Ohrt + + * NEWS + libs/Smarty.class.php: + rename DIR_SEP to SMARTY_DIR_SEP to avoid varname collisions + +2003-05-04 Messju Mohr + + * NEWS + libs/plugins/function.html_image.php: + changed "link" to "href" in html_image. "link" is still working but + deprecated + html_image always renders an alt-tag now (default alt="") + cleaned up indentiation of function.html_image.php + +2003-05-03 Monte Ohrt + + * libs/debug.tpl: + fix typo + +2003-05-02 Messju Mohr + + * NEWS + libs/plugins/function.counter.php: + fixed assign attribute for multiple counters + +2003-05-02 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + allow math on negative number + + * NEWS + libs/Smarty_Compiler.class.php: + added simple math operators to variables + +2003-05-02 Messju Mohr + + * docs/designers.sgml: + fixed typos + +2003-04-30 Monte Ohrt + + * docs/fr/appendixes.sgml + docs/fr/common.dsl + docs/fr/designers.sgml + docs/fr/getting-started.sgml + docs/fr/html-common.dsl + docs/fr/html.dsl + docs/fr/manual.sgml + docs/fr/php.dsl + docs/fr/preface.sgml + docs/fr/programmers.sgml: + add frech docs to cvs repository + +2003-04-29 Messju Mohr + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + reverted patch for case-insensitive tag-names + +2003-04-28 Messju Mohr + + * docs/programmers.sgml: + reverted back to humerous redundancy in the docs :). although we all + know we are here to generate template-based output, and not to have + fun ;-) + + * docs/getting-started.sgml: + fixed default user and group for max os x installation + + * libs/Smarty.class.php: + made $function[2] and $function[3] options for register_resource + + * libs/Smarty.class.php: + fixed issue with object-callback when fetching a php-resource + + * NEWS + libs/Smarty.class.php: + enabled array(&$obj. 'source', 'timestamp', 'secure', 'trusted') as + callback for register_resource() + + enabled array(&$obj, 'method') as callback for + $default_template_handler_func + +2003-04-27 Messju Mohr + + * docs/designers.sgml + docs/programmers.sgml: + fixed some typos, thank to mehdi + + * libs/plugins/function.counter.php: + prevent assign from overruling print-attribute in function.counter.php + + * libs/plugins/function.counter.php: + fixed problem with counter and assign + + * libs/Smarty.class.php: + fixed notice in _load_plugins() + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + made plugin-names case-insensitive. this affects + compiler/block/custom-functions and modifers. + +2003-04-26 Monte Ohrt + + * NEWS + libs/Smarty_Compiler.class.php: + remove unnecessary close/open tags from compiled templates + +2003-04-26 Messju Mohr + + * docs/designers.sgml: + added documentation for foreach.property.* + +2003-04-24 Messju Mohr + + * docs/designers.sgml: + fixed example table_attr and tr_attr in html_table-example + +2003-04-21 Greg Beaver + + * libs/Smarty.class.php: + fixed small bug in doc comments + +2003-04-21 Messju Mohr + + * NEWS + libs/plugins/function.html_image.php: + fixed errornous creation of '//' in image_path in html_image + +2003-04-21 Monte Ohrt + + * libs/plugins/modifier.debug_print_var.php: + fix htmlspecialchars() conflict + + * NEWS + libs/plugins/modifier.debug_print_var.php: + fix escapement of special chars in key values of debug console + + * NEWS + libs/plugins/function.config_load.php: + fixed debug timing logic for config_load + + * docs/designers.sgml: + fix example text + + +2003-04-20 Greg Beaver + * plugins/* + Smarty.class.php + Smarty_Compiler.class.php + Config_File.class.php: + updated all doc comments to phpDocumentor format (whew!) + +2003-04-06 Messju Mohr + + * libs/plugins/function.math.php: + allowed "_" in the name of variable-parameters to {math}-function + +2003-04-04 Monte Ohrt + + * NEWS + docs/designers.sgml + libs/Smarty_Compiler.class.php: + change backtic syntax from $`foo` to `$foo` + + * NEWS + libs/Smarty_Compiler.class.php: + recognize $foo[][] syntax in embedded quotes without backticks + +2003-04-03 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + name=123 is passed as an integer (not a string) to plugins now + +2003-04-01 Messju Mohr + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + added CVS $Id: ChangeLog,v 1.2 2004/11/19 11:05:24 garvinhicking Exp $ + +2003-03-31 Messju Mohr + + * libs/Smarty.class.php: + added missing compile_id inside Smarty_Compiler + + * libs/Smarty_Compiler.class.php: + fixed flaw when generating an error for missing postfilter + +2003-03-31 Monte Ohrt + + * docs/getting-started.sgml + docs/programmers.sgml: + fix typos + +2003-03-27 Messju Mohr + + * NEWS + libs/plugins/modifier.debug_print_var.php: + $length is now propagated to sub-values in debug_print_var + +2003-03-26 Monte Ohrt + + * NEWS: + update header + + * RELEASE_NOTES: + commit changes to release notes + + * (Smarty_2_5_0_RC2) + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + committing RC2 + +2003-03-24 Messju Mohr + + * NEWS + libs/Smarty.class.php: + made clear_cache() ignore compile_id when clearing cache_groups + + * libs/plugins/function.popup.php: + made onmouseout XHTML-compatible in function.popup.php + +2003-03-21 Messju Mohr + + * NEWS + libs/Smarty.class.php: + applied new var-names to fetch() + + * NEWS + libs/Smarty.class.php: + renamed $localvars to $_localvars in cache-file-handling-functions, + added _get_auto_id()-function + +2003-03-21 Monte Ohrt + + * libs/plugins/function.mailto.php + libs/plugins/function.popup.php: + update functions for XHTML compatability + +2003-03-21 Messju Mohr + + * libs/Smarty.class.php: + fixed wrong $auto_id in _read_cache_file() + + * NEWS + libs/Smarty.class.php: + swapped compile_id and cache_id in read_cache_file and write_cache_file + + * libs/Smarty.class.php: + reverted patch for ignoring compile-id back to -r1.364, due to problems + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php: + html_radios and html_checkboxes accept "selected" instead of "checked" + optionally now + + * NEWS + libs/Smarty.class.php: + swapped compile_id and cache_id for cache-file-handling again + +2003-03-20 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + fix notice when no parameter is passed to default + +2003-03-20 Messju Mohr + + * NEWS + libs/Smarty.class.php: + removed notice of undefined var in _rm_auto() + +2003-03-19 Monte Ohrt + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php + libs/plugins/function.html_table.php: + fix a few error messages, follow consistancy format plugin_name: errormsg + + * libs/plugins/function.html_radios.php: + update error messages + + * NEWS + libs/plugins/function.html_radios.php: + add a warning when an array is passed as the 'checked' value of html_radios + +2003-03-19 Messju Mohr + + * NEWS + libs/Smarty_Compiler.class.php: + fixed errormessage in _compile_smarty_ref() + + * NEWS + docs/designers.sgml: + updated docs for html_image + +2003-03-18 Messju Mohr + + * NEWS + libs/Smarty.class.php: + cleaned up calls to readdir() + + * libs/plugins/function.html_options.php: + fixed label for optgroup in html_options + +2003-03-18 Monte Ohrt + + * NEWS + libs/Smarty_Compiler.class.php: + fix (newly introduced) bug with passing multiple modifiers to a parameter + +2003-03-18 Messju Mohr + + * NEWS + docs/designers.sgml: + updated docs for html_checkboxes, html_options and html_radios + + * libs/plugins/function.html_options.php: + fixed wrong default-"name" in function.html_options.php + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php: + renamed "checkbox" and "radios" to "options" in {html_checkboxes} and + {html_radios} + + * libs/plugins/outputfilter.trimwhitespace.php: + tried to optimize re-replacement in outputfilter.trimwhitespace.php a + little + + * libs/plugins/outputfilter.trimwhitespace.php: + fixed greedy str_replace in outputfilter.trimwhitespace.php + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php: + html_options, html_checkboxes and html_radios now pass-thru all unknown + paramters + +2003-03-17 Messju Mohr + + * NEWS + libs/plugins/function.html_options.php: + html_options passthru all unknown paramters now + +2003-03-17 Monte Ohrt + + * NEWS + libs/plugins/function.html_image.php: + Fix link bug in html_image function, also make output XHTML compatible + + * libs/Smarty_Compiler.class.php: + fix issue of embedded var and escaped double quotes + +2003-03-15 Monte Ohrt + + * NEWS + libs/Smarty_Compiler.class.php: + back out "@" logic, apply only to default modifier special case + + * libs/Smarty_Compiler.class.php: + fix @ logic, only use upon an echo + + * NEWS + libs/Smarty_Compiler.class.php: + append "@" to template var echoes to supress possible notices + + * NEWS + libs/Smarty_Compiler.class.php: + append "@" to _run_mod_handler to supress warnings + +2003-03-14 Monte Ohrt + + * NEWS + libs/Smarty_Compiler.class.php: + fix problem with escaped double quotes + + * NEWS + libs/plugins/function.html_radios.php: + fixed html_options to not return an array + +2003-03-12 Messju Mohr + + * NEWS + libs/plugins/modifier.truncate.php: + fixed length in modifier.truncate.php + + * NEWS + libs/plugins/outputfilter.trimwhitespace.php: + fixed handling of '$'-signs in trimwhitespace outputfilter (messju) + +2003-03-12 Monte Ohrt + + * docs/programmers.sgml: + update technical explanation of assign_by_ref and append_by_ref + +2003-03-11 Monte Ohrt + + * NEWS + libs/Smarty.class.php: + fix config file recompiling code + +2003-03-07 Monte Ohrt + + * libs/plugins/function.html_image.php: + change E_USER_ERROR to E_USER_NOTICE + + * libs/plugins/function.html_image.php: + suppress warning in html_image + + * NEWS + libs/plugins/function.html_image.php: + update changes to html_image + +2003-03-06 Monte Ohrt + + * docs/designers.sgml + docs/de/appendixes.sgml + docs/de/common.dsl + docs/de/designers.sgml + docs/de/getting-started.sgml + docs/de/html-common.dsl + docs/de/html.dsl + docs/de/manual.sgml + docs/de/preface.sgml + docs/de/programmers.sgml: + add german docs to dist + + * NEWS: + update news file + + * libs/plugins/function.html_image.php: + fix width/height parameter index + + * NEWS + libs/Smarty.class.php: + get rid of unsetting name and script attributes to insert tags + +2003-03-05 Monte Ohrt + + * NEWS + RELEASE_NOTES: + update NEWS file + + * libs/plugins/modifier.string_format.php: + fix argument order, erroneously swapped a while back + + * (Smarty_2_5_0_RC1) + NEWS + README + RELEASE_NOTES + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + commit final changes for 2.5.0-RC1 + +2003-03-04 Monte Ohrt + + * docs/programmers.sgml: + remove $show_info_header and $show_info_include property vars from docs + +2003-03-03 Monte Ohrt + + * NEWS + libs/plugins/function.popup.php: + fixed PHP notice + +2003-02-28 Monte Ohrt + + * libs/Smarty_Compiler.class.php: + simplify smarty.const.foo and smarty.const.$foo logic + + * libs/Smarty_Compiler.class.php: + only allow $foo syntax in embedded quotes, unless escaped with backticks + then allow any dollar var + + * NEWS + libs/Smarty_Compiler.class.php: + fix "once" var compiling to work with new attr compiling methods for + include_php + + * FAQ + NEWS + README + docs/designers.sgml + docs/getting-started.sgml + libs/Smarty_Compiler.class.php + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_image.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php + libs/plugins/function.html_select_date.php + libs/plugins/function.html_select_time.php + libs/plugins/function.html_table.php: + fix $smarty.const.foo compiling, clean up double quoted strings, + allow full dollar var syntax in quotes again + +2003-02-27 Monte Ohrt + + * docs/designers.sgml + docs/programmers.sgml + libs/Smarty_Compiler.class.php: + update docs, fix smarty var compiling, allow any $smarty.*.$foo syntax, + add $`foobar` for embedded variables + + * libs/plugins/function.html_image.php: + update functionality + +2003-02-26 Monte Ohrt + + * NEWS + libs/plugins/modifier.nl2br.php: + add nl2br modifier + + * libs/plugins/function.html_image.php: + add link parameter + +2003-02-24 Monte Ohrt + + * libs/Smarty.class.php + libs/plugins/function.html_image.php: + fix rename problem in windows, unlink first + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_image.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php + libs/plugins/shared.escape_special_chars.php: + update functions with separate escape_special_chars routine + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php: + commit checkboxes, update radios + + * NEWS + libs/Smarty.class.php + libs/plugins/function.html_image.php: + fix bug with get_registered_object + + * NEWS + libs/plugins/modifier.cat.php: + added cat modifier to distribution + + * NEWS + libs/Smarty_Compiler.class.php: + added << >> <> support to IF statements + + * libs/plugins/function.html_radios.php: + apply patch to initial html_radios function + + * NEWS + libs/Smarty.class.php: + fix _assign_smarty_interface to not overwrite keys other than 'request' + + * NEWS + libs/plugins/function.html_radios.php: + added html_radios to distribution + + * NEWS + libs/plugins/modifier.string_format.php: + fixed arg order of string_format + + * NEWS + libs/Smarty.class.php: + use tmp file for file writes, avoid race condition + + * NEWS + libs/Smarty_Compiler.class.php: + add $smarty.config.foo var, handle embedded smarty var correctly + + * NEWS + libs/plugins/function.fetch.php: + silence warnings in fetch plugin + +2003-02-21 Monte Ohrt + + * INSTALL: + update wording + + * INSTALL: + update install instructions + + * AUTHORS + BUGS + CREDITS + QUICKSTART + README + RESOURCES + TESTIMONIALS: + remove some files already in docs or elsewhere + + * demo/index.php: + add templates_c to repository + + * index.php: + move demo files to demo directory + + * Config_File.class.php + Smarty.class.php + Smarty_Compiler.class.php + debug.tpl: + moved lib files under libs directory + +2003-02-20 Monte Ohrt + + * NEWS + Smarty.class.php: + add get_config_vars() method, update get_template_vars() functionality + + * NEWS + Smarty.class.php: + fix minor logic in _fetch_template_info() + + * NEWS + Smarty.class.php: + support merging appended vars + + * NEWS + Smarty.class.php: + fix cache groups behavior with compile_id set + +2003-02-19 Monte Ohrt + + * Smarty.class.php: + back out third parameter, extend functionality of append + + * NEWS + Smarty_Compiler.class.php: + update imbedded vars, allow special $smarty vars + + * plugins/function.html_table.php: + add plugin html_table + + * NEWS + Smarty.class.php: + support appending key=>val pairs + + * NEWS + Smarty_Compiler.class.php: + change embedded variable logic to only recognize $foo and $foo[0][bar] + syntax + + * NEWS + Smarty_Compiler.class.php: + allow null as function attribute value + +2003-02-18 Monte Ohrt + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + support foo->bar[index] syntax + + * Smarty_Compiler.class.php: + allow $foo->bar[0] syntax + +2003-02-17 Monte Ohrt + + * plugins/modifier.escape.php: + fix syntax error from previous commit + + * NEWS + Smarty.class.php: + add error msgs to get_registered_object + + * Smarty.class.php: + add function for getting reference to registered object + + * Smarty_Compiler.class.php: + back out patches for object and objref calls on $smarty var + + * NEWS + Smarty_Compiler.class.php: + treat unrecognized param attribute syntax as a string + + * NEWS + Smarty_Compiler.class.php: + support $smarty.const.$foo syntax + + * NEWS + debug.tpl + plugins/modifier.count_words.php + plugins/modifier.escape.php: + fix E_NOTICE messages + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + add @ and === to if tokens, few param cleanups + +2003-02-16 Greg Beaver + + * ChangeLog + Smarty.class.php + Smarty_Compiler.class.php: + many more phpdoc comment upgrades + +2003-02-15 Greg Beaver + * Smarty.class.php + Smarty_Compiler.class.php + continue cleaning of phpdoc comments. All that is needed is the + addition of @return tags and perhaps a bit more verbose comments + and they are finished. + +2003-02-14 Monte Ohrt + + * NEWS + Smarty.class.php: + enable config_load error messages + + * NEWS + plugins/function.html_options.php: + fix html_options to not escape already escaped entities + + * NEWS + Smarty.class.php: + send Last-Modified header on cache creation, misc tab/spacing cleanup + +2003-02-13 Monte Ohrt + + * Smarty_Compiler.class.php + docs/designers.sgml: + allow dash in plain text + + * NEWS + Smarty_Compiler.class.php: + check strict syntax of function attributes + +2003-02-12 Monte Ohrt + + * NEWS + Smarty_Compiler.class.php: + dropped support for modifiers on object parameters, + added support for objects as modifier parameters + + * NEWS + Smarty_Compiler.class.php + docs/designers.sgml: + fix bug with decimal numbers in if statements, misc doc updates + +2003-02-11 Monte Ohrt + + * (Smarty_2_4_2) + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: + update version numbers + +2003-02-10 Monte Ohrt + + * NEWS + Smarty_Compiler.class.php: + add support for $foo->$bar syntax + + * NEWS: + update NEWS file + + * NEWS + Smarty_Compiler.class.php: + support full var syntax in quoted text, fix problem with const var access, + clean up some more regex code, fix object problem with no properties + +2003-02-06 Monte Ohrt + + * (Smarty_2_4_1) + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: + committed 2.4.1 changes + + * NEWS + Smarty_Compiler.class.php: + ignore case in IF statements + +2003-02-05 Monte Ohrt + + * NEWS + Smarty_Compiler.class.php: + treat undefined constants as null + + * NEWS + Smarty.class.php: + fix problem with inserts and nested fetches + + * Smarty_Compiler.class.php: + fix "if" regex for math tokens + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs/getting-started.sgml: + added support for extracting params to include_php + +2003-02-04 Monte Ohrt + + * RELEASE_NOTES: + reformat text + +2003-02-03 Monte Ohrt + + * NEWS: + update news file + +2003-02-03 Greg Beaver + + * ChangeLog + Smarty.class.php: + begin fixing phpdoc comments in Smarty.class.php + + * ChangeLog + Config_File.class.php: + fixed phpdoc comments + +2003-02-03 Monte Ohrt + + * Smarty_Compiler.class.php: + allow $foo->bar[$x].foo syntax + + * Smarty_Compiler.class.php + index.php + configs/test.conf + templates/index.tpl: + fix accidental commit + + * index.php + configs/test.conf + templates/index.tpl: + allow $foo->bar[$j].blah type of syntax + +2003-02-02 Greg Beaver + + * Smarty.class.php + begin fixing of phpdoc comments + + * Config_File.class.php + fix phpdoc comments, add phpDocumentor docblock templates + +2003-02-02 Monte Ohrt + + * Smarty.class.php + docs/html.dsl + docs/php.dsl: + fix version number + + * (Smarty_2_4_0) + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php + docs/appendixes.sgml + docs/designers.sgml + docs/programmers.sgml: + update Smarty version numbers + +2003-01-30 Monte Ohrt + + * NEWS + Smarty_Compiler.class.php + TODO: + fix order of php tag comparisons + + * NEWS + Smarty_Compiler.class.php: + fix known php tag handling problems + +2003-01-29 Monte Ohrt + + * Smarty.class.php + Smarty_Compiler.class.php: + change comments to phpdoc style + +2003-01-28 Monte Ohrt + + * Smarty.class.php + docs/programmers.sgml: + make separate var for compiler file + + * plugins/function.fetch.php: + fix error call + +2003-01-25 Monte Ohrt + + * Smarty.class.php + Smarty_Compiler.class.php: + add support for restriction to registered methods + + * plugins/outputfilter.trimwhitespace.php: + update with textarea support + +2003-01-24 Monte Ohrt + + * Smarty_Compiler.class.php: + fix compiling problem with {foreach} tags + + * Smarty.class.php + Smarty_Compiler.class.php: + put objects in own array, add object param format support, change + object syntax from foo.bar to foo->bar + +2003-01-23 Monte Ohrt + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + add support for object registration + +2003-01-22 Monte Ohrt + + * Smarty.class.php: + add file & line number of calling error to error message + +2003-01-21 Monte Ohrt + + * Smarty_Compiler.class.php: + put php style object syntax back in + +2003-01-20 Monte Ohrt + + * Smarty.class.php: + move security settings to fetch function for template_dir + + * NEWS + Smarty.class.php: + fix debug template and security, add template_dir to secure_dir at runtime + +2003-01-17 Monte Ohrt + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + added new object support without new template syntax + +2003-01-15 Monte Ohrt + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + fix if statement syntax for negative integers, fix issue with directories + named '0' + +2003-01-08 Monte Ohrt + + * Smarty.class.php + plugins/function.counter.php + plugins/function.cycle.php + plugins/function.debug.php + plugins/function.eval.php + plugins/function.fetch.php + plugins/function.html_options.php + plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/function.mailto.php + plugins/function.math.php + plugins/function.popup.php + plugins/function.popup_init.php: + update plugins to return values instead of echo, fix config file cache + to include global config variables in cache file + + * Smarty_Compiler.class.php: + fix bug with >= tests in if statements, comment out full object support + +2003-01-06 Monte Ohrt + + * NEWS + docs/html.dsl + plugins/modifier.escape.php: + add javascript escape parameter to escape modifier + +2003-01-02 Monte Ohrt + + * templates/header.tpl: + move the title into head where it should be + +2002-12-24 Monte Ohrt + + * Smarty_Compiler.class.php: + added correct line numbers to smarty syntax error messages + + * docs/programmers.sgml: + update append documentation, make more clear on its function + + * Smarty_Compiler.class.php: + fix modifier matching regexp + +2002-12-23 Monte Ohrt + + * Smarty_Compiler.class.php: + support nested function calls in IF statements + +2002-12-20 Monte Ohrt + + * Smarty_Compiler.class.php: + few more fixes, spaces around function parameters + + * Smarty_Compiler.class.php: + fix misc syntax issues with {if} tags + +2002-12-20 Monte Ohrt + + * Smarty_Compiler.class.php: + fix misc syntax issues with {if} tags + +2002-12-19 Monte Ohrt + + * Smarty_Compiler.class.php: + commit updates, passes all smoke tests + + * NEWS: + update NEWS file + + * Smarty_Compiler.class.php: + fixed literal string not in quotes as parameters + + * NEWS + Smarty_Compiler.class.php: + fix misc syntax issues, add ability to pass modifiers to functions + +2002-12-18 Monte Ohrt + + * NEWS: + update NEWS + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + update compiler code, clean up regex, add new syntax features + +2002-12-16 Monte Ohrt + + * NEWS: + update NEWS file + + * Smarty_Compiler.class.php: + commit updates for objects + +2002-12-14 Monte Ohrt + + * Smarty.class.php + Smarty_Compiler.class.php: + fix bug with compiling config files with caching on + +2002-12-13 Monte Ohrt + + * Smarty_Compiler.class.php: + fix problem with matching single quoted strings + + * Smarty_Compiler.class.php: + update embedded variable logic, get rid of ."" at end of output + + * NEWS + docs/designers.sgml + plugins/function.html_select_date.php: + add day_value_format to html_select_date + +2002-12-12 Monte Ohrt + + * plugins/modifier.debug_print_var.php: + fix bug, double escaped values in display + + * Smarty.class.php: + move debug test back into fetch() + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + plugins/outputfilter.trimwhitespace.php: + assigned vars are no longer in global name space, few debug cleanups + +2002-12-11 Monte Ohrt + + * plugins/function.popup.php: + fix error in newline code + + * plugins/function.popup.php: + fix popup to allow newlines in text data + +2002-12-10 Monte Ohrt + + * Smarty.class.php: + fix plugin error logic + + * docs/designers.sgml + docs/programmers.sgml: + edit examples, make more verbose + + * NEWS + plugins/function.html_options.php: + escape html entities in the option values and output + + * NEWS + plugins/function.html_options.php: + fixed bug with label of html_options + +2002-12-09 Monte Ohrt + + * Smarty.class.php: + add support for var_export() + + * Config_File.class.php + Smarty.class.php: + clean up code, respect force_compile and compile_check flags + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs/designers.sgml + plugins/function.mailto.php: + add caching feature to config loading, document update, add mailto plugin + +2002-12-08 Monte Ohrt + + * plugins/function.fetch.php: + fix query part of URL + +2002-12-05 Monte Ohrt + + * docs/designers.sgml: + fix typos + +2002-11-22 Monte Ohrt + + * Smarty_Compiler.class.php: + patch for warning message + +2002-11-21 Monte Ohrt + + * RELEASE_NOTES + Smarty.class.php: + get rid of testing for a set value with assign function, just set to + whatever is passed into the template + + * docs/programmers.sgml: + fix typo + +2002-11-19 Monte Ohrt + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: + commit changes, ready for 2.3.1 release + +2002-11-01 Monte Ohrt + + * plugins/function.html_options.php: + added label attribute to all option outputs, cover w3c spec. + + * NEWS: update NEWS file + + * docs/designers.sgml: update docs for optgroup output + + * plugins/function.html_options.php: + make html_options work with optgroup, make func modular and recursive. + +2002-10-29 Monte Ohrt + + * NEWS + Smarty.class.php: set mtime on compile files so they match source files + +2002-10-18 Monte Ohrt + + * NEWS + Smarty.class.php: added proper support for open_basedir setting + + * docs/designers.sgml: clear up docs on index, iteration and rownum + +2002-10-16 Monte Ohrt + + * plugins/modifier.default.php: fix warning message in default modifier + +2002-09-25 Monte Ohrt + + * docs/designers.sgml + plugins/modifier.strip.php + NEWS: added strip variable modifier + +2002-09-24 Andrei Zmievski + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: + Fix to be able to use $smarty.x variables as arrays. + +2002-09-23 Monte Ohrt + + * Config_File.class.php: + add support for mac/dos formatted config files (fix newlines) + + * docs/programmers.sgml: add optional tags to clear_cache parameters + + * docs/designers.sgml: + fix error with include_php description, add $this to description + +2002-09-20 Monte Ohrt + + * NEWS + docs/getting-started.sgml: fixed errors with example setup docs + +2002-09-16 Monte Ohrt + + * plugins/block.textformat.php + docs/designers.sgml + NEWS: add textformat block function + +2002-09-10 Monte Ohrt + + * docs/designers.sgml: + add assign attribute to cycle function documentation + + * docs/designers.sgml + docs/programmers.sgml: fix typos + +2002-09-09 Monte Ohrt + + * plugins/function.debug.php + templates/header.tpl: + fix header in debug template, fix typo in header.tpl example + +2002-08-15 mohrt + + * docs/programmers.sgml: fix typos + +2002-08-08 mohrt + + * RELEASE_NOTES + Smarty.class.php: + supress warnings from unlink() and is_dir(), let error handler deal with it + +2002-08-07 mohrt + + * docs/appendixes.sgml + docs/designers.sgml + docs/programmers.sgml + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: update files with new version numbers + +2002-08-02 mohrt + + * NEWS: update NEWS file with credits + + * NEWS + Smarty.class.php: added assign_by_ref() and append_by_ref() functions + +2002-08-01 mohrt + + * TODO + NEWS + Smarty.class.php: + changed default warning type for plugin errors from E_USER_WARNING to E_USER_ERROR + +2002-07-29 mohrt + + * plugins/function.html_select_time.php + docs/designers.sgml + NEWS: added paramters to html_select_time plugin + +2002-07-25 Andrei Zmievski + + * TODO: *** empty log message *** + +2002-07-24 mohrt + + * QUICKSTART: update QUICKSTART guide + + * NEWS + debug.tpl + plugins/modifier.debug_print_var.php: + update debug console to show objects, fix warning in debug.tpl + +2002-07-23 mohrt + + * docs/programmers.sgml: fix load_filter examples + + * Config_File.class.php + NEWS: fix error when there are no sections in config file + +2002-07-19 mohrt + + * docs/getting-started.sgml: fix error in install guide + +2002-07-18 mohrt + + * Smarty_Compiler.class.php: + correct the expression match for smarty:nodefaults + +2002-07-17 mohrt + + * Smarty_Compiler.class.php: fix default modifier to work with config vars + + * Smarty_Compiler.class.php: got args to strstr backwards... + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + change default modifiers to array instead of string + + * Smarty_Compiler.class.php + docs/designers.sgml + Smarty.class.php: add default modifier logic, minor doc updates + + * NEWS + Smarty.class.php + plugins/function.popup_init.php: + make popup_init xhtml compliant, minor variable name changes for consistancy + +2002-07-16 mohrt + + * NEWS: update NEWS file + + * plugins/function.debug.php + Smarty.class.php + debug.tpl + NEWS: + fix problem with filenames on windows, add ability to supply expire time in seconds when clearing cache or compiled files + +2002-07-15 mohrt + + * Smarty.class.php: + fixed problem with insert tags when loading function from script attribute + and caching enabled (Monte) + +2002-07-14 mohrt + + * NEWS + Smarty.class.php: fix bug with debug_tpl file path for Windows + +2002-07-12 Monte Ohrt + + * Smarty.class.php: fix append function with array/string issue + +2002-07-11 Monte Ohrt + + * RELEASE_NOTES: update release notes + + * NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php + Config_File.class.php: update files to 2.2.0 tags, get ready for release + +2002-07-09 Monte Ohrt + + * NEWS + Smarty.class.php: make debug.tpl work with any delimiter + + * NEWS + Smarty.class.php: + change tests in append and assign to != '' instead of empty(), which is more accurate + +2002-07-08 Monte Ohrt + + * docs/designers.sgml: minor doc update + + * Smarty.class.php: + cast var as an array, simplify and get rid of PHP warning messages + +2002-07-03 Monte Ohrt + + * Smarty.class.php: one more N + + * Smarty.class.php: + prepend "N" to filenames to avoid possible OS issues with dir names starting with "-" + + * Smarty.class.php: only set $debug_tpl in constructor if empty + + * Smarty.class.php + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml: + make use_sub_dirs go back to crc32 for subdir separation + +2002-06-29 Monte Ohrt + + * plugins/function.eval.php: do nothing if $val is empty + + * TODO + plugins/function.eval.php + plugins/function.popup_init.php: + add zindex to popup init, fix error message for eval. + +2002-06-27 Monte Ohrt + + * Smarty.class.php: + only loop through relative paths for PHP include_path, remove $_relative variable + + * Smarty_Compiler.class.php: added {$smarty.version} variable + +2002-06-26 Monte Ohrt + + * docs/appendixes.sgml + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml + Smarty.class.php: + update plugin loading logic, look in SMARTY_DIR, then cwd. If all fail, then retry all with include_path + + * templates/header.tpl + Smarty.class.php: update get_include_path, get _path_array only once + + * Smarty.class.php: fix get_include_path function for windows + + * Smarty.class.php: update plugin search logic + + * Smarty.class.php: only search include_path if relative path + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php + Smarty_Compiler.class.php + NEWS + Smarty.class.php: allow plugins_dir to be an array of directories + +2002-06-25 Monte Ohrt + + * docs/programmers.sgml + docs/getting-started.sgml: update installation docs + + * debug.tpl + docs/getting-started.sgml + templates/debug.tpl + NEWS + Smarty.class.php: move debug.tpl to SMARTY_DIR, add to constructor + +2002-06-24 Monte Ohrt + + * plugins/function.assign_debug_info.php + NEWS: fixed warning message in function.assign_debug_info + + * Smarty.class.php: update include_path fixes + + * NEWS: + fixed $template_dir, $compile_dir, $cache_dir, $config_dir to respect include_path + +2002-06-23 Monte Ohrt + + * plugins/shared.make_timestamp.php: + update timestamp plugin to work when passed a timestamp + +2002-06-19 Monte Ohrt + + * NEWS: update NEWS file + + * plugins/modifier.date_format.php + docs/designers.sgml: + update date_format, allow optional 2nd paramater as default date if passed date is empty. update docs. + + * plugins/modifier.date_format.php: + fix date_format modifier, return nothing if given empty string + +2002-06-18 Monte Ohrt + + * NEWS + plugins/function.cycle.php: + gave $reset a default value in cycle function + + * plugins/function.html_select_date.php + plugins/shared.make_timestamp.php + NEWS: + corrected warnings in html_select_time function, made make timestamp always return a timestamp + +2002-06-17 Monte Ohrt + + * Smarty.class.php: swapped around cache_id and compile_id order + +2002-06-14 Monte Ohrt + + * docs/programmers.sgml + plugins/function.popup_init.php + Smarty.class.php: + change directory delimiter to "^" for cache and compile files + +2002-06-13 Andrei Zmievski + + * TODO: done. + + * Smarty_Compiler.class.php: + Optimize the calculation of section 'total' property. + +2002-06-11 Monte Ohrt + + * NEWS + Smarty.class.php: + added support for subdir exclusion, deletion by full or partial cache_id and compile_id, change file format to urlencoded values instead of crc32 + +2002-06-07 Monte Ohrt + + * Smarty.class.php: fix bug with last_modified_check code + + * NEWS + Smarty.class.php: + updated $GLOBALS refererence for HTTP_IF_MODIFIED_SINCE + +2002-06-06 Monte Ohrt + + * docs/designers.sgml + overlib.js: + remove overlib.js file from distribution, update plugin and docs + +2002-06-05 Monte Ohrt + + * docs/designers.sgml + NEWS + Smarty.class.php: fix 304 Not Modified, don't send content + +2002-06-03 Monte Ohrt + + * plugins/function.cycle.php: update version number + + * plugins/function.cycle.php + NEWS: + fixed cycle function to respect delimiter setting after initial setting + + * Smarty.class.php + NEWS: + update $GLOBALS references to work properly with track_globals settings + + * plugins/function.math.php: fixed bug with call $assign + + * docs/appendixes.sgml + docs/designers.sgml + plugins/function.html_options.php + plugins/function.html_select_time.php + NEWS + Smarty.class.php + Smarty_Compiler.class.php: + optimized for loops with count() function calls + +2002-06-01 Andrei Zmievski + + * TODO: *** empty log message *** + +2002-05-21 Monte Ohrt + + * NEWS: update NEWS file + + * plugins/function.html_select_date.php + RESOURCES + docs/designers.sgml + Config_File.class.php: + update html_select_date with month_value_format attribute for controlling the format of the month values. + +2002-05-17 Andrei Zmievski + + * NEWS + Smarty_Compiler.class.php: + Made it possible to use simple variables inside [] for indexing. + +2002-05-16 Monte Ohrt + + * docs/designers.sgml + docs/getting-started.sgml + NEWS + Smarty.class.php + Smarty_Compiler.class.php + TESTIMONIALS: add "once" attribute to php_include, update docs + +2002-05-09 Andrei Zmievski + + * NEWS + TODO: *** empty log message *** + +2002-05-07 Monte Ohrt + + * plugins/function.cycle.php: remove \n from cycle function + + * docs/designers.sgml + plugins/function.cycle.php + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php + NEWS: + update cycle function to handle array as input, update files to 2.1.1 + +2002-05-06 Monte Ohrt + + * plugins/function.fetch.php: + update fetch function with more error checking + +2002-05-03 Monte Ohrt + + * docs/designers.sgml + plugins/function.counter.php: + update counter to use name instead of id (id still works though) + + * plugins/function.cycle.php + docs/designers.sgml: rename id to name for cycle function + + * plugins/function.cycle.php: + update cycle function to allow blank values parameter after initialized + + * plugins/function.cycle.php: fix syntax error + +2002-05-02 Monte Ohrt + + * plugins/function.cycle.php: ugh, another typo + + * plugins/function.cycle.php: update comments + + * docs/designers.sgml + plugins/function.cycle.php + NEWS: added function cycle + + * FAQ + Smarty.class.php: fix register_outputfilter function + +2002-05-01 Monte Ohrt + + * docs/designers.sgml + NEWS + Smarty.class.php: fixed bug with resource testing and include_path + +2002-04-30 Monte Ohrt + + * NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: update files for 2.1.0 release + +2002-04-30 Andrei Zmievski + + * plugins/function.fetch.php + docs/programmers.sgml + Smarty.class.php: Fix. + +2002-04-29 Andrei Zmievski + + * docs/programmers.sgml + docs/designers.sgml: A whole bunch of docs. + +2002-04-26 Monte Ohrt + + * FAQ + QUICKSTART + docs/programmers.sgml: update FAQ, QUICKSTART, small doc syntax fix + +2002-04-24 Monte Ohrt + + * docs/programmers.sgml + templates/debug.tpl + Smarty.class.php: changed doc structure a bit + +2002-04-16 Andrei Zmievski + + * Smarty.class.php: Add register/unregister API for output filters. + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + TODO: + Changed the way filters are loaded, which now has to be done explicitly, + either through load_filter() API or by filling in $autoload_filters variable. + Also renamed internal variable to avoid namespace pollution. + +2002-04-15 Andrei Zmievski + + * Smarty.class.php: + Fixed _get_php_resource() to take include_path into account. + +2002-04-15 Monte Ohrt + + * docs/designers.sgml: + update docs, get modifiers and functions into index for easy access + + * docs/programmers.sgml + NEWS + Smarty.class.php: update caching documentation + +2002-04-15 Andrei Zmievski + + * NEWS: *** empty log message *** + + * Smarty.class.php: Only turn down error notices if $debugging is false. + +2002-04-15 Monte Ohrt + + * NEWS: update NEWS file + + * plugins/function.html_select_date.php: + fixed logic so this works right when field_separator = "/" + + * plugins/function.html_select_date.php: + fix regular expression for matching date + +2002-04-13 Monte Ohrt + + * docs/designers.sgml: updated html_select_date docs to reflect changes + + * NEWS + plugins/function.html_select_date.php: + added YYYY-MM-DD support to html_select_date + +2002-04-12 Andrei Zmievski + + * TESTIMONIALS: New entry. + +2002-04-12 Monte Ohrt + + * plugins/modifier.strip_tags.php: back out changes to strip_tags + + * docs/programmers.sgml: update docs regarding cache_lifetime + + * plugins/modifier.strip_tags.php + Smarty.class.php: + update cache_lifetime logic: -1 = never expire, 0 = always expire + +2002-04-11 Andrei Zmievski + + * BUGS + FAQ + INSTALL + NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs/getting-started.sgml: + Fixed directory separtor issue. Requiring PHP 4.0.6 now. + + * NEWS + Smarty_Compiler.class.php: + Added ability to use simple variables for array indices or object properties. + + * TESTIMONIALS: Another one. + + * TESTIMONIALS: Adding one from Mark P. + +2002-04-05 Andrei Zmievski + + * Smarty_Compiler.class.php + NEWS + Smarty.class.php: Make it possible to unregister pre/postfilter plugins. + +2002-04-05 Monte Ohrt + + * INSTALL: Remove addons file from INSTALL instructions + +2002-04-04 Monte Ohrt + + * docs/designers.sgml: update doc error + + * docs/designers.sgml + plugins/modifier.escape.php + NEWS + Smarty.class.php: added htmlall attribute to escape modifier + +2002-04-03 Andrei Zmievski + + * Smarty_Compiler.class.php: Fixed undefined offset warning in {if} tag. + + * Smarty.class.php + NEWS: Added template_exists() API. + + * Smarty.class.php + Smarty_Compiler.class.php + NEWS: + - Added $smarty.template variable. + - Fixed {include_php} tag when dynamic values were used for 'file' attribute. + + * Config_File.class.php: Separator setting fix. + +2002-03-28 Monte Ohrt + + * FAQ + README: add digest address + + * FAQ + README + Smarty.class.php: update mailing list addresses + +2002-03-28 Andrei Zmievski + + * NEWS: *** empty log message *** + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: + Fix for when plugins directory is not the default one. + +2002-03-28 Andrei Zmievski + + * NEWS: *** empty log message *** + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: + Fix for when plugins directory is not the default one. + +2002-03-27 Monte Ohrt + + * FAQ: update FAQ page + +2002-03-26 Andrei Zmievski + + * CREDITS + NEWS + Smarty.class.php + Smarty_Compiler.class.php + TODO: Block functions changes. + + * Config_File.class.php: *** empty log message *** + +2002-03-25 Andrei Zmievski + + * Smarty.class.php + Smarty_Compiler.class.php: Initial implementation of block functions. + +2002-03-22 Monte Ohrt + + * docs/designers.sgml: fix documentation error in capture + +2002-03-22 Andrei Zmievski + + * Smarty.class.php: *** empty log message *** + + * Smarty.class.php: Turn off notices. + +2002-03-21 Andrei Zmievski + + * Smarty_Compiler.class.php: Make _current_file available to prefilters. + + * NEWS + Smarty.class.php: + Made is possible to assign variables in pre/postfilters. + +2002-03-20 Andrei Zmievski + + * plugins/function.html_select_date.php: Fixed +/- functionality. + + * NEWS: *** empty log message *** + +2002-03-20 Monte Ohrt + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: update version numbers + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: + move .make_timestamp.php to shared.make_timestamp.php + + * NEWS + Smarty.class.php + docs/designers.sgml + plugins/function.fetch.php + plugins/function.html_select_date.php: + update file generation, replace crc32() '-' with 'N' + +2002-03-20 Andrei Zmievski + + * Smarty_Compiler.class.php: *** empty log message *** + +2002-03-19 Andrei Zmievski + + * NEWS: *** empty log message *** + + * Smarty.class.php + Smarty_Compiler.class.php: + Fix plugin behavior for inserts with script attribute. + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: Fix bug with $smarty.cookies. + + * TESTIMONIALS: *** empty log message *** + +2002-03-15 Monte Ohrt + + * NEWS + docs/designers.sgml: update Changelog + + * plugins/modifier.indent.php + plugins/modifier.wordwrap.php: add wordwrap and indent to repository + +2002-03-14 Monte Ohrt + + * Smarty.class.php: + remove show_info_include and show_info_header functions + +2002-03-13 Monte Ohrt + + * plugins/function.fetch.php: update fetch function + + * plugins/function.fetch.php: update fetch function with new parameters + +2002-03-12 Monte Ohrt + + * docs/designers.sgml: update doc tables + + * docs/designers.sgml: update docs columns + + * docs/getting-started.sgml + docs/appendixes.sgml: update docs + + * TESTIMONIALS + docs/appendixes.sgml: update syntax error in docs, add to testimonials + +2002-03-04 Monte Ohrt + + * FAQ + README: update FAQ, README with digest mode info + +2002-03-02 Monte Ohrt + + * QUICKSTART: update quickstart + + * Smarty.class.php: + change behavior so cache_lifetime = 0 never expires (instead of always regenerate) + +2002-03-01 Monte Ohrt + + * docs/designers.sgml: update doc example + +2002-03-01 Andrei Zmievski + + * CREDITS + RELEASE_NOTES + TODO + NEWS: *** empty log message *** + +2002-03-01 Monte Ohrt + + * docs/appendixes.sgml + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml: update document id tags + + * docs.sgml: remove docs.sgml + + * RESOURCES + Smarty.class.php: update resources + +2002-02-28 Andrei Zmievski + + * TESTIMONIALS + docs/appendixes.sgml + docs/designers.sgml + docs/programmers.sgml: *** empty log message *** + +2002-02-27 Andrei Zmievski + + * plugins/function.eval.php + docs/designers.sgml: *** empty log message *** + +2002-02-27 Monte Ohrt + + * plugins/function.eval.php: added eval function to plugin dir + +2002-02-27 Andrei Zmievski + + * NEWS: *** empty log message *** + +2002-02-27 Monte Ohrt + + * docs/designers.sgml: fix syntax error + + * docs/appendixes.sgml + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml: convert technical notes to docbook format + + * NEWS + docs/designers.sgml: added "eval" plugin docs + +2002-02-26 Andrei Zmievski + + * docs/programmers.sgml + docs/designers.sgml + docs/appendixes.sgml + docs/getting-started.sgml + docs/html-common.dsl + docs/.cvsignore: *** empty log message *** + + * docs/appendixes.sgml + docs/common.dsl + docs/designers.sgml + docs/getting-started.sgml + docs/html-common.dsl + docs/html.dsl + docs/manual.sgml + docs/preface.sgml + docs/programmers.sgml: Split up docs. + +2002-02-25 Andrei Zmievski + + * docs.sgml: *** empty log message *** + +2002-02-22 Monte Ohrt + + * docs.sgml: update docs + +2002-02-22 Andrei Zmievski + + * docs.sgml + AUTHORS + NEWS: *** empty log message *** + +2002-02-21 Monte Ohrt + + * Config_File.class.php + NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: update misc changes + +2002-02-21 Andrei Zmievski + + * docs.sgml: *** empty log message *** + +2002-02-20 Monte Ohrt + + * docs.sgml: misc updates + +2002-02-20 Andrei Zmievski + + * docs.sgml: *** empty log message *** + + * Smarty.class.php + plugins/function.assign.php + plugins/function.assign_debug_info.php + plugins/function.counter.php + plugins/function.fetch.php + plugins/function.math.php + plugins/function.popup.php + plugins/function.popup_init.php + plugins/modifier.escape.php: Fixup some naming. + +2002-02-20 Monte Ohrt + + * docs.sgml: update docs + +2002-02-20 Andrei Zmievski + + * docs.sgml: *** empty log message *** + +2002-02-20 Monte Ohrt + + * NEWS + docs.sgml + plugins/modifier.escape.php: + removed global vars from fetch function, added attrs to escape modifier + + * docs.sgml: add plugin chapter outline + +2002-02-19 Monte Ohrt + + * README + RELEASE_NOTES + RESOURCES + Smarty.class.php + docs.sgml + BUGS + FAQ + INSTALL + QUICKSTART: update docs + +2002-02-19 Andrei Zmievski + + * docs.sgml: Updated resources docs. + + * README: *** empty log message *** + + * docs.sgml: Updated description of {$smarty} variable. + + * BUGS + FAQ + INSTALL + QUICKSTART + RELEASE_NOTES + docs.sgml: Remove PEAR notes. + +2002-02-18 Andrei Zmievski + + * Config_File.class.php + NEWS: Removed dependency on PEAR. + +2002-02-18 Monte Ohrt + + * NEWS + docs.sgml + plugins/function.popup_init.php: add src attribute to popup_init + +2002-02-15 Andrei Zmievski + + * Smarty_Compiler.class.php + plugins/modifier.debug_print_var.php + NEWS + Smarty.class.php: Performance enhancements. + +2002-02-06 Andrei Zmievski + + * plugins/function.html_options.php: + Fix html_options output to be XHTML compatible. + +2002-02-05 Andrei Zmievski + + * Smarty.class.php + Smarty_Compiler.class.php: Fix up plugin inclusion. + + * Smarty.class.php + Smarty_Compiler.class.php + TODO + plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: Fix plugin directory access. + +2002-02-04 Andrei Zmievski + + * .cvsignore + Smarty_Compiler.class.php: *** empty log message *** + +2002-01-31 Andrei Zmievski + + * NEWS: *** empty log message *** + + * Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + TODO + plugins/function.assign.php + plugins/function.assign_debug_info.php + plugins/function.counter.php + plugins/function.fetch.php + plugins/function.html_options.php + plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/function.math.php + plugins/function.popup.php + plugins/function.popup_init.php + plugins/modifier.capitalize.php + plugins/modifier.count_characters.php + plugins/modifier.count_paragraphs.php + plugins/modifier.count_sentences.php + plugins/modifier.count_words.php + plugins/modifier.date_format.php + plugins/modifier.debug_print_var.php + plugins/modifier.default.php + plugins/modifier.escape.php + plugins/modifier.lower.php + plugins/modifier.regex_replace.php + plugins/modifier.replace.php + plugins/modifier.spacify.php + plugins/modifier.string_format.php + plugins/modifier.strip_tags.php + plugins/modifier.truncate.php + plugins/modifier.upper.php + plugins/shared.make_timestamp.php + templates/index.tpl + AUTHORS + CREDITS + Config_File.class.php + README: Implemented plugin architecture. + + * NEWS: *** empty log message *** + +2002-01-30 Monte Ohrt + + * NEWS + Smarty.addons.php + Smarty.class.php + docs.sgml: added modifiers wordwrap and indent + +2002-01-28 Monte Ohrt + + * Smarty.class.php + docs.sgml: + add support for is-modified-since headers, adjust a doc example + +2002-01-24 Monte Ohrt + + * Smarty.class.php: cleanup formatting + + * NEWS + Smarty.class.php + docs.sgml: update ChangeLog, remove insert_tag_check parameter + +2002-01-24 Andrei Zmievski + + * plugins/standard.plugin.php: *** empty log message *** + +2002-01-24 Monte Ohrt + + * Smarty.class.php: fix syntax error + + * Smarty.class.php: removed unneccesary test from fetch() + +2002-01-23 Monte Ohrt + + * Smarty.addons.php: update overlib fixes + + * NEWS: update changelog + + * FAQ + NEWS + RESOURCES + Smarty.addons.php: updated overlib fixes + +2001-12-31 Andrei Zmievski + + * NEWS + Smarty.class.php: Fixed compile_id problem. + +2001-12-28 Monte Ohrt + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + fixed problem with using assigned var with include_php filepath + +2001-12-21 Monte Ohrt + + * RESOURCES: update RESOURCES + +2001-12-20 Monte Ohrt + + * FAQ + README: update FAQ + +2001-12-18 Monte Ohrt + + * Smarty_Compiler.class.php + docs.sgml + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php: update version numbers + +2001-12-18 Andrei Zmievski + + * NEWS + Smarty.class.php: Fixed clear_cache(). + +2001-12-14 Monte Ohrt + + * NEWS + Smarty.addons.php: + fixed bug in smarty_make_timestamp introduced in PHP 4.1.0 + +2001-12-13 Monte Ohrt + + * NEWS + Smarty.class.php + docs.sgml: update default function args, fix cached insert debug timing + +2001-12-12 Monte Ohrt + + * docs.sgml: fix syntax error in documentation + + * Smarty.class.php: update default template handling functionality + +2001-12-11 Monte Ohrt + + * Smarty.class.php + Smarty_Compiler.class.php: update file fetching logic + +2001-12-11 Andrei Zmievski + + * NEWS + Smarty.class.php: Added 'script' attribute to {insert..}. + +2001-12-10 Monte Ohrt + + * NEWS + Smarty.class.php: added default template function handler + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update version numbers in files to 1.5.1 + +2001-12-10 Andrei Zmievski + + * NEWS + Smarty.class.php: Removed error message from the _read_file() method. + + * Smarty.class.php: Fix check for compile and cache IDs. + +2001-12-06 Monte Ohrt + + * QUICKSTART: fix spelling error in QUICKSTART + + * docs.sgml: fixed spelling errors in documenation + + * Smarty_Compiler.class.php + docs.sgml + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php: commit 1.5.0 release + + * RESOURCES + docs.sgml: added RESOURCES file + +2001-12-05 Andrei Zmievski + + * Smarty_Compiler.class.php: Refactor. + +2001-12-05 Monte Ohrt + + * NEWS + Smarty_Compiler.class.php + docs.sgml: added assign to include and php_include + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: *** empty log message *** + +2001-12-04 Andrei Zmievski + + * NEWS + Smarty_Compiler.class.php: Formatting. + +2001-12-04 Monte Ohrt + + * Smarty_Compiler.class.php + NEWS + Smarty.class.php: update ChangeLog + +2001-12-04 Andrei Zmievski + + * NEWS + Smarty.class.php: Formatting. + +2001-12-04 Monte Ohrt + + * Smarty.class.php: removed SMARTY_DIR setting in constructor + + * Smarty.class.php: fix Smarty.class.php indention error + + * Smarty.class.php: update trusted logic + +2001-12-03 Monte Ohrt + + * Smarty.class.php: + fix up is_secure, is_trusted, make _parse_tpl_path function + + * Smarty.class.php: fix problem with testing SMARTY_DIR as empty + + * NEWS + docs.sgml: update documentation, change log + + * Smarty.class.php: + update constructor to check for SMARTY_DIR before assigning + +2001-12-03 Andrei Zmievski + + * NEWS + Smarty.class.php: *** empty log message *** + +2001-12-03 Monte Ohrt + + * FAQ + INSTALL + RELEASE_NOTES: update a few files + + * NEWS + QUICKSTART + Smarty.class.php + docs.sgml: added trusted_dir functionality, cleaned up secure_dir logic + +2001-12-03 Andrei Zmievski + + * NEWS: *** empty log message *** + + * NEWS + Smarty.class.php: - Introduced $compile_id class variable. + - Fixed a situation where if $cache_id and $compile_id were both null + they were passed to auto functions as empty string instead of null. + +2001-11-30 Monte Ohrt + + * NEWS + Smarty.class.php: + change variable names in fetch() fuction to smarty_* to avoid namespace conflicts + + * NEWS + Smarty.class.php: fixed bug in _rm_auto with catenated null values + +2001-11-29 Andrei Zmievski + + * NEWS + Smarty_Compiler.class.php: Added $smarty.section.* syntax. + + * Smarty_Compiler.class.php: Made 'name' attribute optional for {foreach}. + +2001-11-29 Monte Ohrt + + * Smarty.class.php + index.php: remove assign "now" in index.tpl + +2001-11-29 Andrei Zmievski + + * NEWS + Smarty.addons.php + Smarty.class.php: Fix formatting. + +2001-11-28 Monte Ohrt + + * NEWS + Smarty.class.php + docs.sgml: + removed return statements from _read_cache_file (how did they get in there?) + +2001-11-27 Monte Ohrt + + * docs.sgml + NEWS + Smarty.addons.php + Smarty.class.php: + fixed bugs and added assign attribute to several functions + +2001-11-27 Andrei Zmievski + + * NEWS: Some rewording. + + * Smarty_Compiler.class.php: Fix $smarty.capture access. + + * TODO: *** empty log message *** + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + Made {config_load ..} merge globals from each config file only once per scope. + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: - Added {foreach ...}. + - Made certain $smarty.* references handled at compilation time. + +2001-11-26 Monte Ohrt + + * Config_File.class.php + NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: commit cache handler functionality + +2001-11-20 Andrei Zmievski + + * NEWS + Smarty.addons.php + Smarty_Compiler.class.php: Various fixes and additions. + + * NEWS + index.php: *** empty log message *** + +2001-11-05 Monte Ohrt + + * Smarty.class.php: changed _read_file parameter from $end to $lines + + * NEWS + Smarty.class.php: fixed is_cache, make cache reading more efficient + +2001-11-02 Monte Ohrt + + * FAQ + NEWS: update FAQ with mailing list Reply-To header FAQ + + * NEWS + Smarty.class.php + index.php: supress fopen errors, return false if cache file won't load + +2001-11-01 Monte Ohrt + + * QUICKSTART + docs.sgml + index.php: update QUICKSTART guide with index key example + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: commit all updates for 1.4.6 + +2001-11-01 Andrei Zmievski + + * NEWS: *** empty log message *** + +2001-10-30 Monte Ohrt + + * Smarty.addons.php: fix assign function problem with empty value passed + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + templates/debug.tpl: + fixed bug in assign function when passing an empty value + +2001-10-26 Monte Ohrt + + * Smarty.addons.php + Smarty.class.php + index.php: fix minor typo in debug code + +2001-10-26 Andrei Zmievski + + * Smarty.class.php: Typo. + +2001-10-26 Monte Ohrt + + * Smarty.addons.php: + update debug console output, handle html encoding correctly + +2001-10-26 Andrei Zmievski + + * Smarty.addons.php + templates/debug.tpl: Debug formatting. + + * Smarty.class.php: Disable rmdir warning. + +2001-10-26 Monte Ohrt + + * Smarty.addons.php + Smarty.class.php + templates/debug.tpl: update debugging to expand array variables + + * Smarty.class.php + docs.sgml: + update docs for fetching only timestamp with custom template source functions + + * Smarty.addons.php: fix debug console error + +2001-10-26 Andrei Zmievski + + * docs.sgml: Typos. + + * Smarty.addons.php: Cleanup whitespace. + + * Smarty_Compiler.class.php: Clean up whitespace. + + * Smarty.class.php: Cleaning up code, formatting mostly. + + * NEWS: *** empty log message *** + +2001-10-25 Monte Ohrt + + * NEWS + docs.sgml: update documentation to current version + + * NEWS + Smarty.addons.php: + updated fetch to give proper warning when fetching unreadable or nonexistant files + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + fixed problem with newline at the end of compiled templates + + * NEWS + Smarty.class.php: recompile cache if config file gets modified too. + + * NEWS + Smarty.class.php: + added feature to regenerate cache if compile_check is enabled and an + involved template is modified + +2001-10-23 Monte Ohrt + + * Smarty.class.php: fix indent for insert tags in debug console + + * templates/debug.tpl: update debug.tpl file format + + * NEWS + Smarty.addons.php + Smarty.class.php + templates/debug.tpl: + update execution time debugging, move into include list + +2001-10-10 Monte Ohrt + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: + fixed up execution time output in debug console + +2001-10-09 Andrei Zmievski + + * Config_File.class.php + NEWS + Smarty.class.php + TODO: Added support for hidden config vars. + +2001-10-04 Monte Ohrt + + * NEWS + Smarty.addons.php + Smarty.class.php + templates/debug.tpl: added execution times to debug console + +2001-10-02 Andrei Zmievski + + * Smarty_Compiler.class.php: Add space. + +2001-10-01 Andrei Zmievski + + * Smarty.class.php: Fix reference to compile_id. + +2001-09-28 Andrei Zmievski + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: Added postfilter functions. + +2001-09-26 Andrei Zmievski + + * NEWS + Smarty.class.php + docs.sgml: Rename to clear_compiled_tpl(). + +2001-09-25 Andrei Zmievski + + * NEWS + Smarty_Compiler.class.php: + Fixed line number reporting when removing comments. + +2001-09-20 Monte Ohrt + + * NEWS + RELEASE_NOTES + Smarty.addons.php: made html_options output xhtml compatible + +2001-09-19 Monte Ohrt + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + templates/debug.tpl: updated version numbers + +2001-09-16 Monte Ohrt + + * FAQ + NEWS + docs.sgml: fix doc error with insert function + +2001-09-06 Andrei Zmievski + + * NEWS: *** empty log message *** + +2001-08-31 Monte Ohrt + + * NEWS: update ChangeLog + + * overlib.js + Smarty.addons.php + Smarty.class.php + docs.sgml: + update overlib to 3.50, adjust addon code so that the overlib.js file isn't modified + +2001-08-31 Andrei Zmievski + + * Smarty.class.php: - compile_id changes + + * NEWS + Smarty.addons.php: - compile_id support + - new options for html_select_date + +2001-08-23 Andrei Zmievski + + * TODO: *** empty log message *** + +2001-08-10 Andrei Zmievski + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: + Modified to pass Smarty object as second parameter to insert functions. + Also moved _smarty_mod_handler() and _smarty_insert_handler() into the class. + + * NEWS + Smarty_Compiler.class.php: + Passing Smarty as second parameter to prefilter functions. + +2001-08-09 Andrei Zmievski + + * NEWS: *** empty log message *** + +2001-08-09 Monte Ohrt + + * templates/index.tpl + Smarty.class.php: add smarty.now variable to template + +2001-08-06 Monte Ohrt + + * templates/index.tpl: change config_load section back to setup + +2001-08-06 Andrei Zmievski + + * Smarty.addons.php: Optimize a bit. + +2001-08-04 Monte Ohrt + + * docs.sgml: update capture documentation + +2001-08-03 Monte Ohrt + + * FAQ + NEWS + Smarty.class.php: + fix bug with URL controlled debugging, works now (Monte) + +2001-08-01 Andrei Zmievski + + * Config_File.class.php: *** empty log message *** + + * Smarty_Compiler.class.php + Smarty.class.php: - Fixed some E_NOTICE stuff in compiler. + - Generalized assign_smarty_interface() a bit. + +2001-07-24 Andrei Zmievski + + * NEWS + Smarty_Compiler.class.php + TODO: See ChangeLog for details. + +2001-07-20 Andrei Zmievski + + * Config_File.class.php: Booleanize case-insensitively. + +2001-07-17 Monte Ohrt + + * NEWS: update ChangeLog + + * Smarty.class.php + docs.sgml: put SMARTY_DIR on Config_File require + +2001-07-11 Monte Ohrt + + * docs.sgml + FAQ + NEWS + Smarty.class.php: + updated security to not include insecure docs, only warning + +2001-07-10 Andrei Zmievski + + * Smarty.class.php: Adding 'sizeof' as an allowed {if} function. + +2001-07-06 Andrei Zmievski + + * NEWS: *** empty log message *** + +2001-07-06 Monte Ohrt + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update version number to 1.4.4 + + * NEWS + Smarty.addons.php + Smarty_Compiler.class.php + docs.sgml + templates/header.tpl + templates/index.tpl: update documenatation, template examples + +2001-07-03 Andrei Zmievski + + * NEWS + Smarty.class.php: Implemented access to request vars via $smarty var. + + * NEWS + Smarty_Compiler.class.php: + Fixed a bug with parsing function arguments in {if} tags. + +2001-06-30 Monte Ohrt + + * NEWS: update ChangeLog + +2001-06-29 Monte Ohrt + + * Smarty.addons.php + Smarty.class.php + docs.sgml + overlib.js: + moved overlib to separate file, added SMARTY_DIR, documented. added much documentation + +2001-06-29 Andrei Zmievski + + * NEWS + RELEASE_NOTES + TODO: *** empty log message *** + +2001-06-29 Monte Ohrt + + * NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + docs.sgml + index.php + templates/debug.tpl + templates/header.tpl + templates/index.tpl: update release notes + +2001-06-27 Andrei Zmievski + + * Smarty_Compiler.class.php: *** empty log message *** + + * NEWS + Smarty_Compiler.class.php: Implemented 'step' section attribute. + + * Smarty_Compiler.class.php: Negative values of 'max' will mean no max. + + * AUTHORS + NEWS: *** empty log message *** + +2001-06-26 Andrei Zmievski + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + index.php: Added 'max' and 'start' section attributes. + Added 'total' and 'iteration' section properties. + +2001-06-25 Andrei Zmievski + + * Config_File.class.php + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: Update version numbers. + +2001-06-23 Andrei Zmievski + + * TODO: *** empty log message *** + +2001-06-21 Andrei Zmievski + + * Config_File.class.php + NEWS: Fixed booleanization bug. + +2001-06-20 Monte Ohrt + + * docs.sgml: + update documents to reflect changes to cached content & debugging + +2001-06-20 Andrei Zmievski + + * Smarty.addons.php + Smarty.class.php: Remove debug output for cached and fetched cases. + +2001-06-20 Monte Ohrt + + * Smarty.class.php: update include_info to false + + * Smarty.class.php + docs.sgml + index.php + templates/footer.tpl: + moved debug logic into Smarty completely, created flags for it + +2001-06-19 Andrei Zmievski + + * Smarty.addons.php + Smarty.class.php + templates/debug.tpl: *** empty log message *** + + * NEWS + Smarty.class.php: Remove unneeded debug functions. + +2001-06-19 Monte Ohrt + + * NEWS + Smarty.addons.php + Smarty.class.php + docs.sgml + templates/debug.tpl + templates/footer.tpl: commit updates, add debug template + +2001-06-19 Andrei Zmievski + + * Smarty.class.php + Smarty_Compiler.class.php + TODO: + Moved config loading code inside main class, the compiled template now + simply calls that method. + +2001-06-15 Andrei Zmievski + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + templates/index.tpl: * moved config array into class itself + * added 'scope' attribute for config_load + + * Smarty_Compiler.class.php + Smarty.addons.php + Smarty.class.php: Finishing up secure mode. + +2001-06-15 Monte Ohrt + + * NEWS: update ChangeLog + + * Smarty_Compiler.class.php: cleaned up logic of if statement security + + * Smarty_Compiler.class.php: update if logic to cover more situations + + * Smarty_Compiler.class.php + docs.sgml: update if statement security feature + +2001-06-14 Andrei Zmievski + + * Smarty.addons.php + Smarty.class.php: *** empty log message *** + + * NEWS + Smarty_Compiler.class.php: + Fixed a bug with quoted strings inside if statements. + +2001-06-13 Monte Ohrt + + * Smarty.addons.php + Smarty.class.php: added secure_dir array for multiple secure directories + + * Smarty.addons.php: update fetch funtion to respect security setting + + * NEWS + Smarty.addons.php + Smarty.class.php + docs.sgml: update documentation, changelog + + * Smarty.addons.php + Smarty.class.php: moved _extract setting to assign functions + + * Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: + added assign/unassign custom functions, ability to re-extract tpl_vars + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + index.php: commit security features + +2001-06-11 Andrei Zmievski + + * Smarty.class.php: Version variable typo. + +2001-06-05 Andrei Zmievski + + * Smarty.class.php: + Create config object in fetch() or just set the config path if it already + exists. + +2001-06-04 Andrei Zmievski + + * Smarty.class.php: *** empty log message *** + + * NEWS + Smarty_Compiler.class.php: + Fixed a problem with $ inside strip tags. + +2001-05-31 Andrei Zmievski + + * NEWS: *** empty log message *** + + * Config_File.class.php: Allow empty config_path. + +2001-05-29 Monte Ohrt + + * Smarty_Compiler.class.php + docs.sgml + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php: update version numbers + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: moved version variable to internal variable + +2001-05-22 Andrei Zmievski + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + Moved $_smarty_sections and $_smarty_conf_obj into Smarty class. + +2001-05-18 Monte Ohrt + + * NEWS: update ChangeLog + + * FAQ + QUICKSTART: update FAQ, QUICKSTART for windows include_path setup + + * configs/test.conf: added configs directory to cvs + +2001-05-18 Andrei Zmievski + + * Smarty.class.php: Use compiler_class for including the file. + +2001-05-18 Monte Ohrt + + * docs.sgml: fix typo + +2001-05-16 Monte Ohrt + + * README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update files to version 1.4.1 + + * NEWS: update ChangeLog + +2001-05-15 Andrei Zmievski + + * NEWS: *** empty log message *** + + * index.php: forget that! + + * NEWS + Smarty_Compiler.class.php + index.php: Fixed a few E_NOTICE warnings. + +2001-05-09 Monte Ohrt + + * NEWS + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + docs.sgml: update dates versions + +2001-05-09 Andrei Zmievski + + * NEWS: *** empty log message *** + + * Smarty.class.php: + Use absolute paths when requiring/including Smart components. + + * NEWS: *** empty log message *** + + * Smarty.class.php: Use write mode instead of append. + +2001-05-02 Andrei Zmievski + + * NEWS + Smarty_Compiler.class.php: Fix indexing by section properties. + +2001-05-02 Monte Ohrt + + * NEWS: update changelog + + * Smarty.class.php: remove period from syntax error + +2001-05-02 Andrei Zmievski + + * Smarty_Compiler.class.php: Double-quote the attribute values by default. + +2001-04-30 Monte Ohrt + + * Smarty_Compiler.class.php + NEWS: added simple {capture} logic + +2001-04-30 Andrei Zmievski + + * TODO: *** empty log message *** + + * Smarty_Compiler.class.php + Smarty.class.php: Fix passing config vars to included files. + + * Smarty.class.php + Smarty_Compiler.class.php: Fix inclusion again. + +2001-04-30 Monte Ohrt + + * FAQ + RELEASE_NOTES + Smarty.class.php + misc/fix_vars.php + NEWS: update paths for windows (c:) + +2001-04-28 Andrei Zmievski + + * Smarty.class.php + Smarty_Compiler.class.php: Fix passing variables to included files. + + * templates/index.tpl: *** empty log message *** + +2001-04-27 Andrei Zmievski + + * Smarty_Compiler.class.php: Fix includes. + +2001-04-26 Andrei Zmievski + + * Smarty_Compiler.class.php + docs.sgml + Smarty.class.php: Formatting mostly. + + * Smarty_Compiler.class.php + Config_File.class.php: *** empty log message *** + +2001-04-26 Monte Ohrt + + * Smarty_Compiler.class.php + docs.sgml + FAQ + NEWS + QUICKSTART + RELEASE_NOTES + Smarty.class.php: update docs with new changes + +2001-04-26 Andrei Zmievski + + * RELEASE_NOTES: *** empty log message *** + + * docs.sgml + templates/index.tpl + NEWS + Smarty_Compiler.class.php: Added ability to reference object properties. + +2001-04-25 Andrei Zmievski + + * README + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + AUTHORS + Config_File.class.php + CREDITS + RELEASE_NOTES + NEWS: *** empty log message *** + + * docs.sgml: Docs on new parameter to custom functions. + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: + Changing the way tpl vars are referenced and passing smarty object + to custom functions. + + * RELEASE_NOTES + docs.sgml: Fixing docs a bit. + +2001-04-24 Andrei Zmievski + + * docs.sgml: Docs for $compiler_class and compiler functions. + + * templates/index.tpl: *** empty log message *** + + * Smarty_Compiler.class.php: Remove debugging. + +2001-04-24 Monte Ohrt + + * docs.sgml: update compiler function docs + +2001-04-24 Andrei Zmievski + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + templates/index.tpl: Added compiler function support. + +2001-04-24 Monte Ohrt + + * RELEASE_NOTES + Smarty.class.php: + update notes, change show_info_header to false by default + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + CREDITS + FAQ + NEWS + README + RELEASE_NOTES: update documenation, bug fixes + +2001-04-24 Andrei Zmievski + + * misc/fix_vars.php: Hopefully fix for sure. + +2001-04-23 Monte Ohrt + + * misc/fix_vars.php: uncomment copy/unlink + +2001-04-23 Andrei Zmievski + + * misc/fix_vars.php: Do it more thoroughly. + + * misc/fix_vars.php: check for } + +2001-04-22 Andrei Zmievski + + * misc/fix_vars.php: Fix variable parsing. + +2001-04-20 Monte Ohrt + + * misc/fix_vars.php: fix problem with 4.0.5-dev and preg_replace_callback + +2001-04-19 Monte Ohrt + + * Smarty_Compiler.class.php + docs.sgml + misc/fix_vars.php + NEWS + RELEASE_NOTES + Smarty.class.php: update notes/documentation + + * NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: update files for 1.4.0 release + +2001-04-16 Andrei Zmievski + + * misc/fix_vars.php: Added fix_vars.php script. + +2001-04-16 Monte Ohrt + + * QUICKSTART + RELEASE_NOTES + docs.sgml + templates/index.tpl: + update RELEASE_NOTES & scripts with new section var syntax + +2001-04-13 Andrei Zmievski + + * Smarty_Compiler.class.php: * Implement new variable format parser. + * Optimizing config load a bit. + +2001-04-13 Monte Ohrt + + * FAQ + NEWS + RELEASE_NOTES + Smarty.class.php: + added $check_cached_insert_tags to speed up cached pages if + {insert ...} is not used (Monte) + +2001-04-12 Andrei Zmievski + + * NEWS + Smarty.class.php + RELEASE_NOTES: *** empty log message *** + + * Smarty_Compiler.class.php: Remove redundant functions. + + * Smarty.class.php: Formatting. + +2001-04-12 Monte Ohrt + + * Smarty.class.php: update file: parsing + + * Smarty.class.php + docs.sgml: update documentation + +2001-04-12 Andrei Zmievski + + * Smarty.class.php + Smarty_Compiler.class.php + TODO: *** empty log message *** + +2001-04-11 Monte Ohrt + + * FAQ + QUICKSTART + RELEASE_NOTES: added RELEASE_NOTES file to cvs + + * NEWS + docs.sgml: update ChangeLog, update documentation + + * Smarty.class.php + Smarty_Compiler.class.php + templates/index.tpl: + update Smarty to compile at run-time. added ability to get files from + absolute paths, added work around for LOCK_EX and windows, changed a few + file permissions to be more secure. + +2001-03-29 Monte Ohrt + + * NEWS + Smarty.addons.php: + allow arbitrary date strings instead of just timestamps + +2001-03-28 Monte Ohrt + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + FAQ + NEWS + README + Smarty.addons.php: + update version in class, update docs for count_ and new vars + + * templates/index.tpl + docs.sgml: update docs, example template + +2001-03-28 Andrei Zmievski + + * Smarty_Compiler.class.php: Some variable renaming. + +2001-03-23 Andrei Zmievski + + * Smarty_Compiler.class.php + NEWS: Fixed nested include infinite repeat bug. + +2001-03-23 Monte Ohrt + + * Smarty.class.php: fix version number + + * Smarty.class.php + NEWS: added optional HTML header to output + +2001-03-22 Andrei Zmievski + + * Smarty_Compiler.class.php: Fixed inclusion of dynamic files. + +2001-03-16 Andrei Zmievski + + * Smarty_Compiler.class.php: Fixing the config_load scoping. + + * Smarty_Compiler.class.php: making config variables global for now. + +2001-03-15 Andrei Zmievski + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: + * Includes are now always done via generated function call to protect + namespace. + * config_load now always uses global config object to improve + performance. + +2001-03-13 Monte Ohrt + + * docs.sgml: update math documentation with format attribute + +2001-03-11 Monte Ohrt + + * docs.sgml + NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update math function with format attribute + +2001-03-10 Andrei Zmievski + + * Smarty.addons.php: *** empty log message *** + + * NEWS + Smarty.addons.php + Smarty.class.php: Added html_select_time custom function. + +2001-03-08 Monte Ohrt + + * Smarty.class.php + Smarty_Compiler.class.php + NEWS + README + Smarty.addons.php: rename 1.3.1b to 1.3.1pl1 + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update version numbers, changelog + + * Smarty.class.php + Smarty_Compiler.class.php: + moved _syntax_error to Smarty_Compiler.class.php + + * Smarty.class.php + docs.sgml: + missing _syntax_error function recovered. fixed minor syntax in docs + +2001-03-07 Monte Ohrt + + * QUICKSTART + README + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + BUGS + INSTALL + NEWS: update everything to 1.3.1 + +2001-03-03 Monte Ohrt + + * Smarty_Compiler.class.php + Smarty.class.php: fixed bug with cached insert tags + +2001-03-02 Monte Ohrt + + * Smarty.class.php + Smarty_Compiler.class.php: + fix cache fuctions with separated compiled class + + * FAQ + NEWS + docs.sgml: update changelog + +2001-03-02 Andrei Zmievski + + * NEWS + Smarty_Compiler.class.php: Added 'first' and 'last' section properties. + +2001-03-02 Monte Ohrt + + * TODO: remove compiling separation TODO + + * Smarty_Compiler.class.php + Smarty.addons.php + Smarty.class.php: update function headers + + * templates/index.tpl + NEWS + Smarty.class.php + Smarty_Compiler.class.php + index.php: split out compiling code for faster execution + + * Smarty.class.php: fixed a few warning messages + + * Smarty.addons.php + Smarty.class.php + docs.sgml + NEWS: added fetch, unregister mod/fun, updated docs + +2001-03-01 Monte Ohrt + + * Smarty.addons.php: added "int" to available list + + * docs.sgml + FAQ + Smarty.class.php: update FAQ, add math functions & update documetation + + * index.php + Smarty.addons.php + Smarty.class.php + docs.sgml: fixed literal tags and other optional delimiters + +2001-02-26 Andrei Zmievski + + * NEWS + Smarty.class.php: + Added index_prev, index_next section properties and ability to + index by them. + + * NEWS + Smarty.addons.php + Smarty.class.php: Reverting the plugins patch - needs more thought. + + * Smarty.class.php: Fixing plugin loading. + +2001-02-23 Andrei Zmievski + + * Smarty.addons.php + Smarty.class.php + plugins/standard.plugin.php + NEWS: Added plugin functionality. + +2001-02-22 Monte Ohrt + + * docs.sgml + templates/index.tpl + NEWS + README + Smarty.class.php: fixed issue with php tags executed in literal blocks + +2001-02-21 Monte Ohrt + + * NEWS: update changelog for LGPL change + + * Smarty.class.php + docs.sgml + README + Smarty.addons.php: updated version numbers to 1.3.0 + + * NEWS + templates/index.tpl: update changelog, rearrange index.tpl file + +2001-02-21 Andrei Zmievski + + * NEWS + Smarty.class.php: *** empty log message *** + +2001-02-21 Monte Ohrt + + * docs.sgml: update parameters for is_cached and fetch + +2001-02-21 Andrei Zmievski + + * NEWS + Smarty.class.php: *** empty log message *** + +2001-02-21 Monte Ohrt + + * NEWS + Smarty.addons.php + docs.sgml: update docs, remove header function from addons + +2001-02-20 Monte Ohrt + + * FAQ + NEWS: update changelog + + * TODO: update todo + + * TODO: update todo list + + * Smarty.class.php: update php tag handling logic + +2001-02-19 Monte Ohrt + + * index.php + Config_File.class.php + FAQ + Smarty.class.php + docs.sgml: fixed + + * Smarty.addons.php: *** empty log message *** + +2001-02-13 Andrei Zmievski + + * TODO: *** empty log message *** + +2001-02-12 Andrei Zmievski + + * templates/index.tpl + Smarty.class.php: *** empty log message *** + +2001-02-10 Monte Ohrt + + * Smarty.class.php: remove unneeded preg_match + + * Smarty.class.php: remove comment + + * Smarty.class.php: updated php escape to handle +{/if} diff --git a/bundled-libs/Smarty/libs/internals/core.assemble_plugin_filepath.php b/bundled-libs/Smarty/libs/internals/core.assemble_plugin_filepath.php new file mode 100644 index 0000000..690d3dd --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.assemble_plugin_filepath.php @@ -0,0 +1,67 @@ +plugins_dir as $_plugin_dir) { + + $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; + + // see if path is relative + if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) { + $_relative_paths[] = $_plugin_dir; + // relative path, see if it is in the SMARTY_DIR + if (@is_readable(SMARTY_DIR . $_plugin_filepath)) { + $_return = SMARTY_DIR . $_plugin_filepath; + break; + } + } + // try relative to cwd (or absolute) + if (@is_readable($_plugin_filepath)) { + $_return = $_plugin_filepath; + break; + } + } + + if($_return === false) { + // still not found, try PHP include_path + if(isset($_relative_paths)) { + foreach ((array)$_relative_paths as $_plugin_dir) { + + $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; + + $_params = array('file_path' => $_plugin_filepath); + require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $smarty)) { + $_return = $_params['new_file_path']; + break; + } + } + } + } + $_filepaths_cache[$_plugin_filename] = $_return; + return $_return; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.assign_smarty_interface.php b/bundled-libs/Smarty/libs/internals/core.assign_smarty_interface.php new file mode 100644 index 0000000..7e65a73 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.assign_smarty_interface.php @@ -0,0 +1,43 @@ + + * Name: assign_smarty_interface
+ * Purpose: assign the $smarty interface variable + * @param array Format: null + * @param Smarty + */ +function smarty_core_assign_smarty_interface($params, &$smarty) +{ + if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) { + return; + } + + $_globals_map = array('g' => 'HTTP_GET_VARS', + 'p' => 'HTTP_POST_VARS', + 'c' => 'HTTP_COOKIE_VARS', + 's' => 'HTTP_SERVER_VARS', + 'e' => 'HTTP_ENV_VARS'); + + $_smarty_vars_request = array(); + + foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) { + if (isset($_globals_map[$_c])) { + $_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]); + } + } + $_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']); + + $smarty->_smarty_vars['request'] = $_smarty_vars_request; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.create_dir_structure.php b/bundled-libs/Smarty/libs/internals/core.create_dir_structure.php new file mode 100644 index 0000000..999cf59 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.create_dir_structure.php @@ -0,0 +1,79 @@ +_dir_perms) && !is_dir($_new_dir)) { + $smarty->trigger_error("problem creating directory '" . $_new_dir . "'"); + return false; + } + $_new_dir .= '/'; + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.display_debug_console.php b/bundled-libs/Smarty/libs/internals/core.display_debug_console.php new file mode 100644 index 0000000..a5d7291 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.display_debug_console.php @@ -0,0 +1,61 @@ + + * Name: display_debug_console
+ * Purpose: display the javascript debug console window + * @param array Format: null + * @param Smarty + */ +function smarty_core_display_debug_console($params, &$smarty) +{ + // we must force compile the debug template in case the environment + // changed between separate applications. + + if(empty($smarty->debug_tpl)) { + // set path to debug template from SMARTY_DIR + $smarty->debug_tpl = SMARTY_DIR . 'debug.tpl'; + if($smarty->security && is_file($smarty->debug_tpl)) { + $smarty->secure_dir[] = dirname(realpath($smarty->debug_tpl)); + } + $smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl'; + } + + $_ldelim_orig = $smarty->left_delimiter; + $_rdelim_orig = $smarty->right_delimiter; + + $smarty->left_delimiter = '{'; + $smarty->right_delimiter = '}'; + + $_compile_id_orig = $smarty->_compile_id; + $smarty->_compile_id = null; + + $_compile_path = $smarty->_get_compile_path($smarty->debug_tpl); + if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path)) + { + ob_start(); + $smarty->_include($_compile_path); + $_results = ob_get_contents(); + ob_end_clean(); + } else { + $_results = ''; + } + + $smarty->_compile_id = $_compile_id_orig; + + $smarty->left_delimiter = $_ldelim_orig; + $smarty->right_delimiter = $_rdelim_orig; + + return $_results; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.get_include_path.php b/bundled-libs/Smarty/libs/internals/core.get_include_path.php new file mode 100644 index 0000000..4343241 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.get_include_path.php @@ -0,0 +1,44 @@ + diff --git a/bundled-libs/Smarty/libs/internals/core.get_microtime.php b/bundled-libs/Smarty/libs/internals/core.get_microtime.php new file mode 100644 index 0000000..f1a28e0 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.get_microtime.php @@ -0,0 +1,23 @@ + diff --git a/bundled-libs/Smarty/libs/internals/core.get_php_resource.php b/bundled-libs/Smarty/libs/internals/core.get_php_resource.php new file mode 100644 index 0000000..786d4e7 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.get_php_resource.php @@ -0,0 +1,80 @@ +trusted_dir; + $smarty->_parse_resource_name($params, $smarty); + + /* + * Find out if the resource exists. + */ + + if ($params['resource_type'] == 'file') { + $_readable = false; + if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) { + $_readable = true; + } else { + // test for file in include_path + $_params = array('file_path' => $params['resource_name']); + require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $smarty)) { + $_include_path = $_params['new_file_path']; + $_readable = true; + } + } + } else if ($params['resource_type'] != 'file') { + $_template_source = null; + $_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0]) + && call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0], + array($params['resource_name'], &$_template_source, &$smarty)); + } + + /* + * Set the error function, depending on which class calls us. + */ + if (method_exists($smarty, '_syntax_error')) { + $_error_funcc = '_syntax_error'; + } else { + $_error_funcc = 'trigger_error'; + } + + if ($_readable) { + if ($smarty->security) { + require_once(SMARTY_CORE_DIR . 'core.is_trusted.php'); + if (!smarty_core_is_trusted($params, $smarty)) { + $smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted'); + return false; + } + } + } else { + $smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable'); + return false; + } + + if ($params['resource_type'] == 'file') { + $params['php_resource'] = $params['resource_name']; + } else { + $params['php_resource'] = $_template_source; + } + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.is_secure.php b/bundled-libs/Smarty/libs/internals/core.is_secure.php new file mode 100644 index 0000000..342f3af --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.is_secure.php @@ -0,0 +1,56 @@ +security || $smarty->security_settings['INCLUDE_ANY']) { + return true; + } + + if ($params['resource_type'] == 'file') { + $_rp = realpath($params['resource_name']); + if (isset($params['resource_base_path'])) { + foreach ((array)$params['resource_base_path'] as $curr_dir) { + if ( ($_cd = realpath($curr_dir)) !== false && + strncmp($_rp, $_cd, strlen($_cd)) == 0 && + $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { + return true; + } + } + } + if (!empty($smarty->secure_dir)) { + foreach ((array)$smarty->secure_dir as $curr_dir) { + if ( ($_cd = realpath($curr_dir)) !== false && + strncmp($_rp, $_cd, strlen($_cd)) == 0 && + $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { + return true; + } + } + } + } else { + // resource is not on local file system + return call_user_func_array( + $smarty->_plugins['resource'][$params['resource_type']][0][2], + array($params['resource_name'], &$smarty)); + } + + return false; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.is_trusted.php b/bundled-libs/Smarty/libs/internals/core.is_trusted.php new file mode 100644 index 0000000..f0bd2fb --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.is_trusted.php @@ -0,0 +1,47 @@ +trusted_dir)) { + $_rp = realpath($params['resource_name']); + foreach ((array)$smarty->trusted_dir as $curr_dir) { + if (!empty($curr_dir) && is_readable ($curr_dir)) { + $_cd = realpath($curr_dir); + if (strncmp($_rp, $_cd, strlen($_cd)) == 0 + && $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { + $_smarty_trusted = true; + break; + } + } + } + } + + } else { + // resource is not on local file system + $_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3], + array($params['resource_name'], $smarty)); + } + + return $_smarty_trusted; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.load_plugins.php b/bundled-libs/Smarty/libs/internals/core.load_plugins.php new file mode 100644 index 0000000..6db1dc5 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.load_plugins.php @@ -0,0 +1,125 @@ +_plugins[$_type][$_name]; + + /* + * We do not load plugin more than once for each instance of Smarty. + * The following code checks for that. The plugin can also be + * registered dynamically at runtime, in which case template file + * and line number will be unknown, so we fill them in. + * + * The final element of the info array is a flag that indicates + * whether the dynamically registered plugin function has been + * checked for existence yet or not. + */ + if (isset($_plugin)) { + if (empty($_plugin[3])) { + if (!is_callable($_plugin[0])) { + $smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__); + } else { + $_plugin[1] = $_tpl_file; + $_plugin[2] = $_tpl_line; + $_plugin[3] = true; + if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */ + } + } + continue; + } else if ($_type == 'insert') { + /* + * For backwards compatibility, we check for insert functions in + * the symbol table before trying to load them as a plugin. + */ + $_plugin_func = 'insert_' . $_name; + if (function_exists($_plugin_func)) { + $_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false); + continue; + } + } + + $_plugin_file = $smarty->_get_plugin_filepath($_type, $_name); + + if (! $_found = ($_plugin_file != false)) { + $_message = "could not load plugin file '$_type.$_name.php'\n"; + } + + /* + * If plugin file is found, it -must- provide the properly named + * plugin function. In case it doesn't, simply output the error and + * do not fall back on any other method. + */ + if ($_found) { + include_once $_plugin_file; + + $_plugin_func = 'smarty_' . $_type . '_' . $_name; + if (!function_exists($_plugin_func)) { + $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__); + continue; + } + } + /* + * In case of insert plugins, their code may be loaded later via + * 'script' attribute. + */ + else if ($_type == 'insert' && $_delayed_loading) { + $_plugin_func = 'smarty_' . $_type . '_' . $_name; + $_found = true; + } + + /* + * Plugin specific processing and error checking. + */ + if (!$_found) { + if ($_type == 'modifier') { + /* + * In case modifier falls back on using PHP functions + * directly, we only allow those specified in the security + * context. + */ + if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) { + $_message = "(secure mode) modifier '$_name' is not allowed"; + } else { + if (!function_exists($_name)) { + $_message = "modifier '$_name' is not implemented"; + } else { + $_plugin_func = $_name; + $_found = true; + } + } + } else if ($_type == 'function') { + /* + * This is a catch-all situation. + */ + $_message = "unknown tag - '$_name'"; + } + } + + if ($_found) { + $smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true); + } else { + // output error + $smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__); + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.load_resource_plugin.php b/bundled-libs/Smarty/libs/internals/core.load_resource_plugin.php new file mode 100644 index 0000000..a7d37d1 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.load_resource_plugin.php @@ -0,0 +1,74 @@ +_plugins['resource'][$params['type']]; + if (isset($_plugin)) { + if (!$_plugin[1] && count($_plugin[0])) { + $_plugin[1] = true; + foreach ($_plugin[0] as $_plugin_func) { + if (!is_callable($_plugin_func)) { + $_plugin[1] = false; + break; + } + } + } + + if (!$_plugin[1]) { + $smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__); + } + + return; + } + + $_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']); + $_found = ($_plugin_file != false); + + if ($_found) { /* + * If the plugin file is found, it -must- provide the properly named + * plugin functions. + */ + include_once($_plugin_file); + + /* + * Locate functions that we require the plugin to provide. + */ + $_resource_ops = array('source', 'timestamp', 'secure', 'trusted'); + $_resource_funcs = array(); + foreach ($_resource_ops as $_op) { + $_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op; + if (!function_exists($_plugin_func)) { + $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__); + return; + } else { + $_resource_funcs[] = $_plugin_func; + } + } + + $smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true); + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.process_cached_inserts.php b/bundled-libs/Smarty/libs/internals/core.process_cached_inserts.php new file mode 100644 index 0000000..29cb007 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.process_cached_inserts.php @@ -0,0 +1,71 @@ +_smarty_md5.'{insert_cache (.*)}'.$smarty->_smarty_md5.'!Uis', + $params['results'], $match); + list($cached_inserts, $insert_args) = $match; + + for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) { + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + $args = unserialize($insert_args[$i]); + $name = $args['name']; + + if (isset($args['script'])) { + $_params = array('resource_name' => $smarty->_dequote($args['script'])); + require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); + if(!smarty_core_get_php_resource($_params, $smarty)) { + return false; + } + $resource_type = $_params['resource_type']; + $php_resource = $_params['php_resource']; + + + if ($resource_type == 'file') { + $smarty->_include($php_resource, true); + } else { + $smarty->_eval($php_resource); + } + } + + $function_name = $smarty->_plugins['insert'][$name][0]; + if (empty($args['assign'])) { + $replace = $function_name($args, $smarty); + } else { + $smarty->assign($args['assign'], $function_name($args, $smarty)); + $replace = ''; + } + + $params['results'] = str_replace($cached_inserts[$i], $replace, $params['results']); + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'insert', + 'filename' => 'insert_'.$name, + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time); + } + } + + return $params['results']; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.process_compiled_include.php b/bundled-libs/Smarty/libs/internals/core.process_compiled_include.php new file mode 100644 index 0000000..3e1d4c1 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.process_compiled_include.php @@ -0,0 +1,32 @@ +_cache_including; + $smarty->_cache_including = true; + + $_return = $params['results']; + foreach ($smarty->_cache_serials as $_include_file_path=>$_cache_serial) { + $_return = preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s', + array(&$smarty, '_process_compiled_include_callback'), + $_return); + } + $smarty->_cache_including = $_cache_including; + return $_return; +} + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.read_cache_file.php b/bundled-libs/Smarty/libs/internals/core.read_cache_file.php new file mode 100644 index 0000000..ecb1470 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.read_cache_file.php @@ -0,0 +1,111 @@ +force_compile) { + // force compile enabled, always regenerate + return false; + } + + if (isset($content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']])) { + list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']]; + return true; + } + + if (!empty($smarty->cache_handler_func)) { + // use cache_handler function + call_user_func_array($smarty->cache_handler_func, + array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); + } else { + // use local cache file + $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); + $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); + $params['results'] = $smarty->_read_file($_cache_file); + } + + if (empty($params['results'])) { + // nothing to parse (error?), regenerate cache + return false; + } + + $_contents = $params['results']; + $_info_start = strpos($_contents, "\n") + 1; + $_info_len = (int)substr($_contents, 0, $_info_start - 1); + $_cache_info = unserialize(substr($_contents, $_info_start, $_info_len)); + $params['results'] = substr($_contents, $_info_start + $_info_len); + + if ($smarty->caching == 2 && isset ($_cache_info['expires'])){ + // caching by expiration time + if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) { + // cache expired, regenerate + return false; + } + } else { + // caching by lifetime + if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) { + // cache expired, regenerate + return false; + } + } + + if ($smarty->compile_check) { + $_params = array('get_source' => false, 'quiet'=>true); + foreach (array_keys($_cache_info['template']) as $_template_dep) { + $_params['resource_name'] = $_template_dep; + if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { + // template file has changed, regenerate cache + return false; + } + } + + if (isset($_cache_info['config'])) { + $_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet'=>true); + foreach (array_keys($_cache_info['config']) as $_config_dep) { + $_params['resource_name'] = $_config_dep; + if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { + // config file has changed, regenerate cache + return false; + } + } + } + } + + foreach ($_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) { + if (empty($smarty->_cache_serials[$_include_file_path])) { + $smarty->_include($_include_file_path, true); + } + + if ($smarty->_cache_serials[$_include_file_path] != $_cache_serial) { + /* regenerate */ + return false; + } + } + $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']] = array($params['results'], $_cache_info); + + $smarty->_cache_info = $_cache_info; + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.rm_auto.php b/bundled-libs/Smarty/libs/internals/core.rm_auto.php new file mode 100644 index 0000000..b251f64 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.rm_auto.php @@ -0,0 +1,71 @@ + $params['auto_base'], + 'level' => 0, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); + $_res = smarty_core_rmdir($_params, $smarty); + } else { + $_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']); + + if(isset($params['auto_source'])) { + if (isset($params['extensions'])) { + $_res = false; + foreach ((array)$params['extensions'] as $_extension) + $_res |= $smarty->_unlink($_tname.$_extension, $params['exp_time']); + } else { + $_res = $smarty->_unlink($_tname, $params['exp_time']); + } + } elseif ($smarty->use_sub_dirs) { + $_params = array( + 'dirname' => $_tname, + 'level' => 1, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); + $_res = smarty_core_rmdir($_params, $smarty); + } else { + // remove matching file names + $_handle = opendir($params['auto_base']); + $_res = true; + while (false !== ($_filename = readdir($_handle))) { + if($_filename == '.' || $_filename == '..') { + continue; + } elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) { + $_res &= (bool)$smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']); + } + } + } + } + + return $_res; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.rmdir.php b/bundled-libs/Smarty/libs/internals/core.rmdir.php new file mode 100644 index 0000000..4fdbccc --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.rmdir.php @@ -0,0 +1,55 @@ + keep root) + * WARNING: no tests, it will try to remove what you tell it! + * + * @param string $dirname + * @param integer $level + * @param integer $exp_time + * @return boolean + */ + +// $dirname, $level = 1, $exp_time = null + +function smarty_core_rmdir($params, &$smarty) +{ + if(!isset($params['level'])) { $params['level'] = 1; } + if(!isset($params['exp_time'])) { $params['exp_time'] = null; } + + if($_handle = @opendir($params['dirname'])) { + + while (false !== ($_entry = readdir($_handle))) { + if ($_entry != '.' && $_entry != '..') { + if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) { + $_params = array( + 'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry, + 'level' => $params['level'] + 1, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); + smarty_core_rmdir($_params, $smarty); + } + else { + $smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']); + } + } + } + closedir($_handle); + } + + if ($params['level']) { + return @rmdir($params['dirname']); + } + return (bool)$_handle; + +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.run_insert_handler.php b/bundled-libs/Smarty/libs/internals/core.run_insert_handler.php new file mode 100644 index 0000000..71c3845 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.run_insert_handler.php @@ -0,0 +1,71 @@ +debugging) { + $_params = array(); + $_debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + if ($smarty->caching) { + $_arg_string = serialize($params['args']); + $_name = $params['args']['name']; + if (!isset($smarty->_cache_info['insert_tags'][$_name])) { + $smarty->_cache_info['insert_tags'][$_name] = array('insert', + $_name, + $smarty->_plugins['insert'][$_name][1], + $smarty->_plugins['insert'][$_name][2], + !empty($params['args']['script']) ? true : false); + } + return $smarty->_smarty_md5."{insert_cache $_arg_string}".$smarty->_smarty_md5; + } else { + if (isset($params['args']['script'])) { + $_params = array('resource_name' => $smarty->_dequote($params['args']['script'])); + require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); + if(!smarty_core_get_php_resource($_params, $smarty)) { + return false; + } + + if ($_params['resource_type'] == 'file') { + $smarty->_include($_params['php_resource'], true); + } else { + $smarty->_eval($_params['php_resource']); + } + unset($params['args']['script']); + } + + $_funcname = $smarty->_plugins['insert'][$params['args']['name']][0]; + $_content = $_funcname($params['args'], $smarty); + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'insert', + 'filename' => 'insert_'.$params['args']['name'], + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); + } + + if (!empty($params['args']["assign"])) { + $smarty->assign($params['args']["assign"], $_content); + } else { + return $_content; + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.smarty_include_php.php b/bundled-libs/Smarty/libs/internals/core.smarty_include_php.php new file mode 100644 index 0000000..30c6e76 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.smarty_include_php.php @@ -0,0 +1,50 @@ + $params['smarty_file']); + require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); + smarty_core_get_php_resource($_params, $smarty); + $_smarty_resource_type = $_params['resource_type']; + $_smarty_php_resource = $_params['php_resource']; + + if (!empty($params['smarty_assign'])) { + ob_start(); + if ($_smarty_resource_type == 'file') { + $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); + } else { + $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); + } + $smarty->assign($params['smarty_assign'], ob_get_contents()); + ob_end_clean(); + } else { + if ($_smarty_resource_type == 'file') { + $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); + } else { + $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); + } + } +} + + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.write_cache_file.php b/bundled-libs/Smarty/libs/internals/core.write_cache_file.php new file mode 100644 index 0000000..72f785b --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.write_cache_file.php @@ -0,0 +1,96 @@ +_cache_info['timestamp'] = time(); + if ($smarty->cache_lifetime > -1){ + // expiration set + $smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime; + } else { + // cache will never expire + $smarty->_cache_info['expires'] = -1; + } + + // collapse nocache.../nocache-tags + if (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!', $params['results'], $match, PREG_PATTERN_ORDER)) { + // remove everything between every pair of outermost noache.../nocache-tags + // and replace it by a single nocache-tag + // this new nocache-tag will be replaced by dynamic contents in + // smarty_core_process_compiled_includes() on a cache-read + + $match_count = count($match[0]); + $results = preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!', $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE); + + $level = 0; + $j = 0; + for ($i=0, $results_count = count($results); $i < $results_count && $j < $match_count; $i++) { + if ($results[$i] == $match[0][$j]) { + // nocache tag + if ($match[1][$j]) { // closing tag + $level--; + unset($results[$i]); + } else { // opening tag + if ($level++ > 0) unset($results[$i]); + } + $j++; + } elseif ($level > 0) { + unset($results[$i]); + } + } + $params['results'] = implode('', $results); + } + $smarty->_cache_info['cache_serials'] = $smarty->_cache_serials; + + // prepend the cache header info into cache file + $_cache_info = serialize($smarty->_cache_info); + $params['results'] = strlen($_cache_info) . "\n" . $_cache_info . $params['results']; + + if (!empty($smarty->cache_handler_func)) { + // use cache_handler function + call_user_func_array($smarty->cache_handler_func, + array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); + } else { + // use local cache file + + if(!@is_writable($smarty->cache_dir)) { + // cache_dir not writable, see if it exists + if(!@is_dir($smarty->cache_dir)) { + $smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); + return false; + } + $smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR); + return false; + } + + $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); + $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); + $_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true); + require_once(SMARTY_CORE_DIR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.write_compiled_include.php b/bundled-libs/Smarty/libs/internals/core.write_compiled_include.php new file mode 100644 index 0000000..5e0b2e0 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.write_compiled_include.php @@ -0,0 +1,91 @@ +caching && \!\$this->_cache_including\) \{ echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\';\}'; + $_tag_end = 'if \(\$this->caching && \!\$this->_cache_including\) \{ echo \'\{/nocache\:(\\2)#(\\3)\}\';\}'; + + preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us', + $params['compiled_content'], $_match_source, PREG_SET_ORDER); + + // no nocache-parts found: done + if (count($_match_source)==0) return; + + // convert the matched php-code to functions + $_include_compiled = "_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; + $_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F'=>'/', '%3A'=>':')) . " */\n\n"; + + $_compile_path = $params['include_file_path']; + + $smarty->_cache_serials[$_compile_path] = $params['cache_serial']; + $_include_compiled .= "\$this->_cache_serials['".$_compile_path."'] = '".$params['cache_serial']."';\n\n?>"; + + $_include_compiled .= $params['plugins_code']; + $_include_compiled .= "= 5.0) ? '_smarty' : 'this'; + for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) { + $_match =& $_match_source[$_i]; + $source = $_match[4]; + if ($this_varname == '_smarty') { + /* rename $this to $_smarty in the sourcecode */ + $tokens = token_get_all('\n"; + + $_params = array('filename' => $_compile_path, + 'contents' => $_include_compiled, 'create_dirs' => true); + + require_once(SMARTY_CORE_DIR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; +} + + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.write_compiled_resource.php b/bundled-libs/Smarty/libs/internals/core.write_compiled_resource.php new file mode 100644 index 0000000..b902eff --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.write_compiled_resource.php @@ -0,0 +1,35 @@ +compile_dir)) { + // compile_dir not writable, see if it exists + if(!@is_dir($smarty->compile_dir)) { + $smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); + return false; + } + $smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR); + return false; + } + + $_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true); + require_once(SMARTY_CORE_DIR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/internals/core.write_file.php b/bundled-libs/Smarty/libs/internals/core.write_file.php new file mode 100644 index 0000000..09e1698 --- /dev/null +++ b/bundled-libs/Smarty/libs/internals/core.write_file.php @@ -0,0 +1,54 @@ + $_dirname); + require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php'); + smarty_core_create_dir_structure($_params, $smarty); + } + + // write to tmp file, then rename it to avoid + // file locking race condition + $_tmp_file = tempnam($_dirname, 'wrt'); + + if (!($fd = @fopen($_tmp_file, 'wb'))) { + $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt'); + if (!($fd = @fopen($_tmp_file, 'wb'))) { + $smarty->trigger_error("problem writing temporary file '$_tmp_file'"); + return false; + } + } + + fwrite($fd, $params['contents']); + fclose($fd); + + // Delete the file if it allready exists (this is needed on Win, + // because it cannot overwrite files with rename() + if (file_exists($params['filename'])) { + @unlink($params['filename']); + } + @rename($_tmp_file, $params['filename']); + @chmod($params['filename'], $smarty->_file_perms); + + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/block.textformat.php b/bundled-libs/Smarty/libs/plugins/block.textformat.php new file mode 100644 index 0000000..aaebab2 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/block.textformat.php @@ -0,0 +1,102 @@ + + * Name: textformat
+ * Purpose: format text a certain way with preset styles + * or custom wrap/indent settings
+ * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} + * (Smarty online manual) + * @param array + *
+ * Params:   style: string (email)
+ *           indent: integer (0)
+ *           wrap: integer (80)
+ *           wrap_char string ("\n")
+ *           indent_char: string (" ")
+ *           wrap_boundary: boolean (true)
+ * 
+ * @param string contents of the block + * @param Smarty clever simulation of a method + * @return string string $content re-formatted + */ +function smarty_block_textformat($params, $content, &$smarty) +{ + if (is_null($content)) { + return; + } + + $style = null; + $indent = 0; + $indent_first = 0; + $indent_char = ' '; + $wrap = 80; + $wrap_char = "\n"; + $wrap_cut = false; + $assign = null; + + foreach ($params as $_key => $_val) { + switch ($_key) { + case 'style': + case 'indent_char': + case 'wrap_char': + case 'assign': + $$_key = (string)$_val; + break; + + case 'indent': + case 'indent_first': + case 'wrap': + $$_key = (int)$_val; + break; + + case 'wrap_cut': + $$_key = (bool)$_val; + break; + + default: + $smarty->trigger_error("textformat: unknown attribute '$_key'"); + } + } + + if ($style == 'email') { + $wrap = 72; + } + + // split into paragraphs + $_paragraphs = preg_split('![\r\n][\r\n]!',$content); + $_output = ''; + + for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { + if ($_paragraphs[$_x] == '') { + continue; + } + // convert mult. spaces & special chars to single space + $_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]); + // indent first line + if($indent_first > 0) { + $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; + } + // wordwrap sentences + $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); + // indent lines + if($indent > 0) { + $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); + } + } + $_output = implode($wrap_char . $wrap_char, $_paragraphs); + + return $assign ? $smarty->assign($assign, $_output) : $_output; + +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/compiler.assign.php b/bundled-libs/Smarty/libs/plugins/compiler.assign.php new file mode 100644 index 0000000..2e02017 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/compiler.assign.php @@ -0,0 +1,38 @@ + + * Name: assign
+ * Purpose: assign a value to a template variable + * @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign} + * (Smarty online manual) + * @param string containing var-attribute and value-attribute + * @param Smarty_Compiler + */ +function smarty_compiler_assign($tag_attrs, &$compiler) +{ + $_params = $compiler->_parse_attrs($tag_attrs); + + if (!isset($_params['var'])) { + $compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING); + return; + } + + if (!isset($_params['value'])) { + $compiler->_syntax_error("assign: missing 'value' parameter", E_USER_WARNING); + return; + } + + return "\$this->assign({$_params['var']}, {$_params['value']});"; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.assign_debug_info.php b/bundled-libs/Smarty/libs/plugins/function.assign_debug_info.php new file mode 100644 index 0000000..8015624 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.assign_debug_info.php @@ -0,0 +1,39 @@ + + * Name: assign_debug_info
+ * Purpose: assign debug info to the template
+ * @param array unused in this plugin, this plugin uses {@link Smarty::$_config}, + * {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info} + * @param Smarty + */ +function smarty_function_assign_debug_info($params, &$smarty) +{ + $assigned_vars = $smarty->_tpl_vars; + ksort($assigned_vars); + if (@is_array($smarty->_config[0])) { + $config_vars = $smarty->_config[0]; + ksort($config_vars); + $smarty->assign("_debug_config_keys", array_keys($config_vars)); + $smarty->assign("_debug_config_vals", array_values($config_vars)); + } + + $included_templates = $smarty->_smarty_debug_info; + + $smarty->assign("_debug_keys", array_keys($assigned_vars)); + $smarty->assign("_debug_vals", array_values($assigned_vars)); + + $smarty->assign("_debug_tpls", $included_templates); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.config_load.php b/bundled-libs/Smarty/libs/plugins/function.config_load.php new file mode 100644 index 0000000..db7f8f6 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.config_load.php @@ -0,0 +1,140 @@ + + * Name: config_load
+ * Purpose: load config file vars + * @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load} + * (Smarty online manual) + * @param array Format: + *
+ * array('file' => required config file name,
+ *       'section' => optional config file section to load
+ *       'scope' => local/parent/global
+ *       'global' => overrides scope, setting to parent if true)
+ * 
+ * @param Smarty + */ +function smarty_function_config_load($params, &$smarty) +{ + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $_debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + $_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null; + $_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null; + $_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global'; + $_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false; + + if (!isset($_file) || strlen($_file) == 0) { + $smarty->trigger_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__); + } + + if (isset($_scope)) { + if ($_scope != 'local' && + $_scope != 'parent' && + $_scope != 'global') { + $smarty->trigger_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__); + } + } else { + if ($_global) { + $_scope = 'parent'; + } else { + $_scope = 'local'; + } + } + + $_params = array('resource_name' => $_file, + 'resource_base_path' => $smarty->config_dir, + 'get_source' => false); + $smarty->_parse_resource_name($_params); + $_file_path = $_params['resource_type'] . ':' . $_params['resource_name']; + if (isset($_section)) + $_compile_file = $smarty->_get_compile_path($_file_path.'|'.$_section); + else + $_compile_file = $smarty->_get_compile_path($_file_path); + + if($smarty->force_compile || !file_exists($_compile_file)) { + $_compile = true; + } elseif ($smarty->compile_check) { + $_params = array('resource_name' => $_file, + 'resource_base_path' => $smarty->config_dir, + 'get_source' => false); + $_compile = $smarty->_fetch_resource_info($_params) && + $_params['resource_timestamp'] > filemtime($_compile_file); + } else { + $_compile = false; + } + + if($_compile) { + // compile config file + if(!is_object($smarty->_conf_obj)) { + require_once SMARTY_DIR . $smarty->config_class . '.class.php'; + $smarty->_conf_obj = new $smarty->config_class(); + $smarty->_conf_obj->overwrite = $smarty->config_overwrite; + $smarty->_conf_obj->booleanize = $smarty->config_booleanize; + $smarty->_conf_obj->read_hidden = $smarty->config_read_hidden; + $smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines; + } + + $_params = array('resource_name' => $_file, + 'resource_base_path' => $smarty->config_dir, + $_params['get_source'] = true); + if (!$smarty->_fetch_resource_info($_params)) { + return; + } + $smarty->_conf_obj->set_file_contents($_file, $_params['source_content']); + $_config_vars = array_merge($smarty->_conf_obj->get($_file), + $smarty->_conf_obj->get($_file, $_section)); + if(function_exists('var_export')) { + $_output = ''; + } else { + $_output = ''\\\'', '\\'=>'\\\\')) . '\'); ?>'; + } + $_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => $_params['resource_timestamp'])); + require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); + smarty_core_write_compiled_resource($_params, $smarty); + } else { + include($_compile_file); + } + + if ($smarty->caching) { + $smarty->_cache_info['config'][$_file] = true; + } + + $smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars); + $smarty->_config[0]['files'][$_file] = true; + + if ($_scope == 'parent') { + $smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars); + $smarty->_config[1]['files'][$_file] = true; + } else if ($_scope == 'global') { + for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) { + $smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars); + $smarty->_config[$i]['files'][$_file] = true; + } + } + + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'config', + 'filename' => $_file.' ['.$_section.'] '.$_scope, + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); + } + +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.counter.php b/bundled-libs/Smarty/libs/plugins/function.counter.php new file mode 100644 index 0000000..cfe5dd8 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.counter.php @@ -0,0 +1,79 @@ + + * Name: counter
+ * Purpose: print out a counter value + * @link http://smarty.php.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * @param array parameters + * @param Smarty + * @return string|null + */ +function smarty_function_counter($params, &$smarty) +{ + static $counters = array(); + + $name = (isset($params['name'])) ? $params['name'] : 'default'; + if (!isset($counters[$name])) { + $counters[$name] = array( + 'start'=>1, + 'skip'=>1, + 'direction'=>'up', + 'count'=>1 + ); + } + $counter =& $counters[$name]; + + if (isset($params['start'])) { + $counter['start'] = $counter['count'] = (int)$params['start']; + } + + if (!empty($params['assign'])) { + $counter['assign'] = $params['assign']; + } + + if (isset($counter['assign'])) { + $smarty->assign($counter['assign'], $counter['count']); + } + + if (isset($params['print'])) { + $print = (bool)$params['print']; + } else { + $print = empty($counter['assign']); + } + + if ($print) { + $retval = $counter['count']; + } else { + $retval = null; + } + + if (isset($params['skip'])) { + $counter['skip'] = $params['skip']; + } + + if (isset($params['direction'])) { + $counter['direction'] = $params['direction']; + } + + if ($counter['direction'] == "down") + $counter['count'] -= $counter['skip']; + else + $counter['count'] += $counter['skip']; + + return $retval; + +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.cycle.php b/bundled-libs/Smarty/libs/plugins/function.cycle.php new file mode 100644 index 0000000..fe78bb8 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.cycle.php @@ -0,0 +1,102 @@ + + * Name: cycle
+ * Date: May 3, 2002
+ * Purpose: cycle through given values
+ * Input: + * - name = name of cycle (optional) + * - values = comma separated list of values to cycle, + * or an array of values to cycle + * (this can be left out for subsequent calls) + * - reset = boolean - resets given var to true + * - print = boolean - print var or not. default is true + * - advance = boolean - whether or not to advance the cycle + * - delimiter = the value delimiter, default is "," + * - assign = boolean, assigns to template var instead of + * printed. + * + * Examples:
+ *
+ * {cycle values="#eeeeee,#d0d0d0d"}
+ * {cycle name=row values="one,two,three" reset=true}
+ * {cycle name=row}
+ * 
+ * @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle} + * (Smarty online manual) + * @author Monte Ohrt + * @author credit to Mark Priatel + * @author credit to Gerard + * @author credit to Jason Sweat + * @version 1.3 + * @param array + * @param Smarty + * @return string|null + */ +function smarty_function_cycle($params, &$smarty) +{ + static $cycle_vars; + + $name = (empty($params['name'])) ? 'default' : $params['name']; + $print = (isset($params['print'])) ? (bool)$params['print'] : true; + $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true; + $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false; + + if (!in_array('values', array_keys($params))) { + if(!isset($cycle_vars[$name]['values'])) { + $smarty->trigger_error("cycle: missing 'values' parameter"); + return; + } + } else { + if(isset($cycle_vars[$name]['values']) + && $cycle_vars[$name]['values'] != $params['values'] ) { + $cycle_vars[$name]['index'] = 0; + } + $cycle_vars[$name]['values'] = $params['values']; + } + + $cycle_vars[$name]['delimiter'] = (isset($params['delimiter'])) ? $params['delimiter'] : ','; + + if(is_array($cycle_vars[$name]['values'])) { + $cycle_array = $cycle_vars[$name]['values']; + } else { + $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); + } + + if(!isset($cycle_vars[$name]['index']) || $reset ) { + $cycle_vars[$name]['index'] = 0; + } + + if (isset($params['assign'])) { + $print = false; + $smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); + } + + if($print) { + $retval = $cycle_array[$cycle_vars[$name]['index']]; + } else { + $retval = null; + } + + if($advance) { + if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { + $cycle_vars[$name]['index'] = 0; + } else { + $cycle_vars[$name]['index']++; + } + } + + return $retval; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.debug.php b/bundled-libs/Smarty/libs/plugins/function.debug.php new file mode 100644 index 0000000..4345230 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.debug.php @@ -0,0 +1,35 @@ + + * Name: debug
+ * Date: July 1, 2002
+ * Purpose: popup debug window + * @link http://smarty.php.net/manual/en/language.function.debug.php {debug} + * (Smarty online manual) + * @author Monte Ohrt + * @version 1.0 + * @param array + * @param Smarty + * @return string output from {@link Smarty::_generate_debug_output()} + */ +function smarty_function_debug($params, &$smarty) +{ + if (isset($params['output'])) { + $smarty->assign('_smarty_debug_output', $params['output']); + } + require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); + return smarty_core_display_debug_console(null, $smarty); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.eval.php b/bundled-libs/Smarty/libs/plugins/function.eval.php new file mode 100644 index 0000000..3a4b8b2 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.eval.php @@ -0,0 +1,48 @@ + + * Name: eval
+ * Purpose: evaluate a template variable as a template
+ * @link http://smarty.php.net/manual/en/language.function.eval.php {eval} + * (Smarty online manual) + * @param array + * @param Smarty + */ +function smarty_function_eval($params, &$smarty) +{ + + if (!isset($params['var'])) { + $smarty->trigger_error("eval: missing 'var' parameter"); + return; + } + + if($params['var'] == '') { + return; + } + + $smarty->_compile_source('evaluated template', $params['var'], $_var_compiled); + + ob_start(); + $smarty->_eval('?>' . $_var_compiled); + $_contents = ob_get_contents(); + ob_end_clean(); + + if (!empty($params['assign'])) { + $smarty->assign($params['assign'], $_contents); + } else { + return $_contents; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.fetch.php b/bundled-libs/Smarty/libs/plugins/function.fetch.php new file mode 100644 index 0000000..f5a6987 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.fetch.php @@ -0,0 +1,220 @@ + + * Name: fetch
+ * Purpose: fetch file, web or ftp data and display results + * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string|null if the assign parameter is passed, Smarty assigns the + * result to a template variable + */ +function smarty_function_fetch($params, &$smarty) +{ + if (empty($params['file'])) { + $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty"); + return; + } + + $content = ''; + if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { + $_params = array('resource_type' => 'file', 'resource_name' => $params['file']); + require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); + if(!smarty_core_is_secure($_params, $smarty)) { + $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed'); + return; + } + + // fetch the file + if($fp = @fopen($params['file'],'r')) { + while(!feof($fp)) { + $content .= fgets ($fp,4096); + } + fclose($fp); + } else { + $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); + return; + } + } else { + // not a local file + if(preg_match('!^http://!i',$params['file'])) { + // http fetch + if($uri_parts = parse_url($params['file'])) { + // set defaults + $host = $server_name = $uri_parts['host']; + $timeout = 30; + $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; + $agent = "Smarty Template Engine ".$smarty->_version; + $referer = ""; + $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; + $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; + $_is_proxy = false; + if(empty($uri_parts['port'])) { + $port = 80; + } else { + $port = $uri_parts['port']; + } + if(!empty($uri_parts['user'])) { + $user = $uri_parts['user']; + } + if(!empty($uri_parts['pass'])) { + $pass = $uri_parts['pass']; + } + // loop through parameters, setup headers + foreach($params as $param_key => $param_value) { + switch($param_key) { + case "file": + case "assign": + case "assign_headers": + break; + case "user": + if(!empty($param_value)) { + $user = $param_value; + } + break; + case "pass": + if(!empty($param_value)) { + $pass = $param_value; + } + break; + case "accept": + if(!empty($param_value)) { + $accept = $param_value; + } + break; + case "header": + if(!empty($param_value)) { + if(!preg_match('![\w\d-]+: .+!',$param_value)) { + $smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'"); + return; + } else { + $extra_headers[] = $param_value; + } + } + break; + case "proxy_host": + if(!empty($param_value)) { + $proxy_host = $param_value; + } + break; + case "proxy_port": + if(!preg_match('!\D!', $param_value)) { + $proxy_port = (int) $param_value; + } else { + $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); + return; + } + break; + case "agent": + if(!empty($param_value)) { + $agent = $param_value; + } + break; + case "referer": + if(!empty($param_value)) { + $referer = $param_value; + } + break; + case "timeout": + if(!preg_match('!\D!', $param_value)) { + $timeout = (int) $param_value; + } else { + $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); + return; + } + break; + default: + $smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'"); + return; + } + } + if(!empty($proxy_host) && !empty($proxy_port)) { + $_is_proxy = true; + $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); + } else { + $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); + } + + if(!$fp) { + $smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)"); + return; + } else { + if($_is_proxy) { + fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); + } else { + fputs($fp, "GET $uri HTTP/1.0\r\n"); + } + if(!empty($host)) { + fputs($fp, "Host: $host\r\n"); + } + if(!empty($accept)) { + fputs($fp, "Accept: $accept\r\n"); + } + if(!empty($agent)) { + fputs($fp, "User-Agent: $agent\r\n"); + } + if(!empty($referer)) { + fputs($fp, "Referer: $referer\r\n"); + } + if(isset($extra_headers) && is_array($extra_headers)) { + foreach($extra_headers as $curr_header) { + fputs($fp, $curr_header."\r\n"); + } + } + if(!empty($user) && !empty($pass)) { + fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); + } + + fputs($fp, "\r\n"); + while(!feof($fp)) { + $content .= fgets($fp,4096); + } + fclose($fp); + $csplit = split("\r\n\r\n",$content,2); + + $content = $csplit[1]; + + if(!empty($params['assign_headers'])) { + $smarty->assign($params['assign_headers'],split("\r\n",$csplit[0])); + } + } + } else { + $smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax"); + return; + } + } else { + // ftp fetch + if($fp = @fopen($params['file'],'r')) { + while(!feof($fp)) { + $content .= fgets ($fp,4096); + } + fclose($fp); + } else { + $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\''); + return; + } + } + + } + + + if (!empty($params['assign'])) { + $smarty->assign($params['assign'],$content); + } else { + return $content; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.html_checkboxes.php b/bundled-libs/Smarty/libs/plugins/function.html_checkboxes.php new file mode 100644 index 0000000..ed8ad7f --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.html_checkboxes.php @@ -0,0 +1,143 @@ + + * Type: function
+ * Name: html_checkboxes
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of checkbox input types
+ * Input:
+ * - name (optional) - string default "checkbox" + * - values (required) - array + * - options (optional) - associative array + * - checked (optional) - array default not set + * - separator (optional) - ie
or   + * - output (optional) - the output next to each checkbox + * - assign (optional) - assign the output as an array to this variable + * Examples: + *
+ * {html_checkboxes values=$ids output=$names}
+ * {html_checkboxes values=$ids name='box' separator='
' output=$names} + * {html_checkboxes values=$ids checked=$checked separator='
' output=$names} + *
+ * @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} + * (Smarty online manual) + * @author Christopher Kvarme + * @author credits to Monte Ohrt + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_checkboxes($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $name = 'checkbox'; + $values = null; + $options = null; + $selected = null; + $separator = ''; + $labels = true; + $output = null; + + $extra = ''; + + foreach($params as $_key => $_val) { + switch($_key) { + case 'name': + case 'separator': + $$_key = $_val; + break; + + case 'labels': + $$_key = (bool)$_val; + break; + + case 'options': + $$_key = (array)$_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array)$_val); + break; + + case 'checked': + case 'selected': + $selected = array_map('strval', array_values((array)$_val)); + break; + + case 'checkboxes': + $smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); + $options = (array)$_val; + break; + + case 'assign': + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) + return ''; /* raise error here? */ + + settype($selected, 'array'); + $_html_result = array(); + + if (isset($options)) { + + foreach ($options as $_key=>$_val) + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + + + } else { + foreach ($values as $_i=>$_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + } + + } + + if(!empty($params['assign'])) { + $smarty->assign($params['assign'], $_html_result); + } else { + return implode("\n",$_html_result); + } + +} + +function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) { + $_output = ''; + if ($labels) $_output .= ''; + $_output .= $separator; + + return $_output; +} + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.html_image.php b/bundled-libs/Smarty/libs/plugins/function.html_image.php new file mode 100644 index 0000000..c62b0fe --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.html_image.php @@ -0,0 +1,139 @@ + + * Name: html_image
+ * Date: Feb 24, 2003
+ * Purpose: format HTML tags for the image
+ * Input:
+ * - file = file (and path) of image (required) + * - height = image height (optional, default actual height) + * - width = image width (optional, default actual width) + * - basedir = base directory for absolute paths, default + * is environment variable DOCUMENT_ROOT + * + * Examples: {html_image file="images/masthead.gif"} + * Output: + * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} + * (Smarty online manual) + * @author Monte Ohrt + * @author credits to Duda - wrote first image function + * in repository, helped with lots of functionality + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_image($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $alt = ''; + $file = ''; + $height = ''; + $width = ''; + $extra = ''; + $prefix = ''; + $suffix = ''; + $server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; + $basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : ''; + foreach($params as $_key => $_val) { + switch($_key) { + case 'file': + case 'height': + case 'width': + case 'dpi': + case 'basedir': + $$_key = $_val; + break; + + case 'alt': + if(!is_array($_val)) { + $$_key = smarty_function_escape_special_chars($_val); + } else { + $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + + case 'link': + case 'href': + $prefix = ''; + $suffix = ''; + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (empty($file)) { + $smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); + return; + } + + if (substr($file,0,1) == '/') { + $_image_path = $basedir . $file; + } else { + $_image_path = $file; + } + + if(!isset($params['width']) || !isset($params['height'])) { + if ($smarty->security && + ($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) && + (require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) && + (!smarty_core_is_secure($_params, $smarty)) ) { + $smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE); + + } elseif (!$_image_data = @getimagesize($_image_path)) { + if(!file_exists($_image_path)) { + $smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); + return; + } else if(!is_readable($_image_path)) { + $smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); + return; + } else { + $smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); + return; + } + } + + if(!isset($params['width'])) { + $width = $_image_data[0]; + } + if(!isset($params['height'])) { + $height = $_image_data[1]; + } + + } + + if(isset($params['dpi'])) { + if(strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) { + $dpi_default = 72; + } else { + $dpi_default = 96; + } + $_resize = $dpi_default/$params['dpi']; + $width = round($width * $_resize); + $height = round($height * $_resize); + } + + return $prefix . ''.$alt.'' . $suffix; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.html_options.php b/bundled-libs/Smarty/libs/plugins/function.html_options.php new file mode 100644 index 0000000..ae864f7 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.html_options.php @@ -0,0 +1,121 @@ + + * Name: html_options
+ * Input:
+ * - name (optional) - string default "select" + * - values (required if no options supplied) - array + * - options (required if no values supplied) - associative array + * - selected (optional) - string default not set + * - output (required if not options supplied) - array + * Purpose: Prints the list of ' . "\n"; + foreach ($values as $key => $value) { + $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected); + } + $optgroup_html .= "\n"; + return $optgroup_html; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.html_radios.php b/bundled-libs/Smarty/libs/plugins/function.html_radios.php new file mode 100644 index 0000000..dc7baee --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.html_radios.php @@ -0,0 +1,150 @@ + + * Type: function
+ * Name: html_radios
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of radio input types
+ * Input:
+ * - name (optional) - string default "radio" + * - values (required) - array + * - options (optional) - associative array + * - checked (optional) - array default not set + * - separator (optional) - ie
or   + * - output (optional) - the output next to each radio button + * - assign (optional) - assign the output as an array to this variable + * Examples: + *
+ * {html_radios values=$ids output=$names}
+ * {html_radios values=$ids name='box' separator='
' output=$names} + * {html_radios values=$ids checked=$checked separator='
' output=$names} + *
+ * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} + * (Smarty online manual) + * @author Christopher Kvarme + * @author credits to Monte Ohrt + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_radios($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $name = 'radio'; + $values = null; + $options = null; + $selected = null; + $separator = ''; + $labels = true; + $output = null; + $extra = ''; + + foreach($params as $_key => $_val) { + switch($_key) { + case 'name': + case 'separator': + $$_key = (string)$_val; + break; + + case 'checked': + case 'selected': + if(is_array($_val)) { + $smarty->trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); + } else { + $selected = (string)$_val; + } + break; + + case 'labels': + $$_key = (bool)$_val; + break; + + case 'options': + $$_key = (array)$_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array)$_val); + break; + + case 'radios': + $smarty->trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); + $options = (array)$_val; + break; + + case 'assign': + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) + return ''; /* raise error here? */ + + $_html_result = array(); + + if (isset($options)) { + + foreach ($options as $_key=>$_val) + $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + + } else { + + foreach ($values as $_i=>$_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + } + + } + + if(!empty($params['assign'])) { + $smarty->assign($params['assign'], $_html_result); + } else { + return implode("\n",$_html_result); + } + +} + +function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels) { + $_output = ''; + if ($labels) { + $_id = smarty_function_escape_special_chars($name . '_' . $value); + $_output .= ''; + $_output .= $separator; + + return $_output; +} + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.html_select_date.php b/bundled-libs/Smarty/libs/plugins/function.html_select_date.php new file mode 100644 index 0000000..fc2d449 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.html_select_date.php @@ -0,0 +1,316 @@ + + * Name: html_select_date
+ * Purpose: Prints the dropdowns for date selection. + * + * ChangeLog:
+ * - 1.0 initial release + * - 1.1 added support for +/- N syntax for begin + * and end year values. (Monte) + * - 1.2 added support for yyyy-mm-dd syntax for + * time value. (Jan Rosier) + * - 1.3 added support for choosing format for + * month values (Gary Loescher) + * - 1.3.1 added support for choosing format for + * day values (Marcus Bointon) + * - 1.3.2 suppport negative timestamps, force year + * dropdown to include given date unless explicitly set (Monte) + * @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date} + * (Smarty online manual) + * @version 1.3.2 + * @author Andrei Zmievski + * @param array + * @param Smarty + * @return string + */ +function smarty_function_html_select_date($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); + require_once $smarty->_get_plugin_filepath('function','html_options'); + /* Default values. */ + $prefix = "Date_"; + $start_year = strftime("%Y"); + $end_year = $start_year; + $display_days = true; + $display_months = true; + $display_years = true; + $month_format = "%B"; + /* Write months as numbers by default GL */ + $month_value_format = "%m"; + $day_format = "%02d"; + /* Write day values using this format MB */ + $day_value_format = "%d"; + $year_as_text = false; + /* Display years in reverse order? Ie. 2000,1999,.... */ + $reverse_years = false; + /* Should the select boxes be part of an array when returned from PHP? + e.g. setting it to "birthday", would create "birthday[Day]", + "birthday[Month]" & "birthday[Year]". Can be combined with prefix */ + $field_array = null; + /* tags. + If not set, uses default dropdown. */ + $day_size = null; + $month_size = null; + $year_size = null; + /* Unparsed attributes common to *ALL* the tags. + An example might be in the template: all_extra ='class ="foo"'. */ + $all_extra = null; + /* Separate attributes for the tags. */ + $day_extra = null; + $month_extra = null; + $year_extra = null; + /* Order in which to display the fields. + "D" -> day, "M" -> month, "Y" -> year. */ + $field_order = 'MDY'; + /* String printed between the different fields. */ + $field_separator = "\n"; + $time = time(); + $all_empty = null; + $day_empty = null; + $month_empty = null; + $year_empty = null; + + foreach ($params as $_key=>$_value) { + switch ($_key) { + case 'prefix': + case 'time': + case 'start_year': + case 'end_year': + case 'month_format': + case 'day_format': + case 'day_value_format': + case 'field_array': + case 'day_size': + case 'month_size': + case 'year_size': + case 'all_extra': + case 'day_extra': + case 'month_extra': + case 'year_extra': + case 'field_order': + case 'field_separator': + case 'month_value_format': + case 'month_empty': + case 'day_empty': + case 'year_empty': + $$_key = (string)$_value; + break; + + case 'all_empty': + $$_key = (string)$_value; + $day_empty = $month_empty = $year_empty = $all_empty; + break; + + case 'display_days': + case 'display_months': + case 'display_years': + case 'year_as_text': + case 'reverse_years': + $$_key = (bool)$_value; + break; + + default: + $smarty->trigger_error("[html_select_date] unknown parameter $_key", E_USER_WARNING); + + } + } + + if(preg_match('!^-\d+$!',$time)) { + // negative timestamp, use date() + $time = date('Y-m-d',$time); + } + // If $time is not in format yyyy-mm-dd + if (!preg_match('/^\d{0,4}-\d{0,2}-\d{0,2}$/', $time)) { + // use smarty_make_timestamp to get an unix timestamp and + // strftime to make yyyy-mm-dd + $time = strftime('%Y-%m-%d', smarty_make_timestamp($time)); + } + // Now split this in pieces, which later can be used to set the select + $time = explode("-", $time); + + // make syntax "+N" or "-N" work with start_year and end_year + if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) { + if ($match[1] == '+') { + $end_year = strftime('%Y') + $match[2]; + } else { + $end_year = strftime('%Y') - $match[2]; + } + } + if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) { + if ($match[1] == '+') { + $start_year = strftime('%Y') + $match[2]; + } else { + $start_year = strftime('%Y') - $match[2]; + } + } + if (strlen($time[0]) > 0) { + if ($start_year > $time[0] && !isset($params['start_year'])) { + // force start year to include given date if not explicitly set + $start_year = $time[0]; + } + if($end_year < $time[0] && !isset($params['end_year'])) { + // force end year to include given date if not explicitly set + $end_year = $time[0]; + } + } + + $field_order = strtoupper($field_order); + + $html_result = $month_result = $day_result = $year_result = ""; + + if ($display_months) { + $month_names = array(); + $month_values = array(); + if(isset($month_empty)) { + $month_names[''] = $month_empty; + $month_values[''] = ''; + } + for ($i = 1; $i <= 12; $i++) { + $month_names[$i] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000)); + $month_values[$i] = strftime($month_value_format, mktime(0, 0, 0, $i, 1, 2000)); + } + + $month_result .= ''; + } + + if ($display_days) { + $days = array(); + if (isset($day_empty)) { + $days[''] = $day_empty; + $day_values[''] = ''; + } + for ($i = 1; $i <= 31; $i++) { + $days[] = sprintf($day_format, $i); + $day_values[] = sprintf($day_value_format, $i); + } + + $day_result .= ''; + } + + if ($display_years) { + if (null !== $field_array){ + $year_name = $field_array . '[' . $prefix . 'Year]'; + } else { + $year_name = $prefix . 'Year'; + } + if ($year_as_text) { + $year_result .= ' $years, + 'values' => $yearvals, + 'selected' => $time[0], + 'print_result' => false), + $smarty); + $year_result .= ''; + } + } + + // Loop thru the field_order field + for ($i = 0; $i <= 2; $i++){ + $c = substr($field_order, $i, 1); + switch ($c){ + case 'D': + $html_result .= $day_result; + break; + + case 'M': + $html_result .= $month_result; + break; + + case 'Y': + $html_result .= $year_result; + break; + } + // Add the field seperator + if($i != 2) { + $html_result .= $field_separator; + } + } + + return $html_result; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.html_select_time.php b/bundled-libs/Smarty/libs/plugins/function.html_select_time.php new file mode 100644 index 0000000..00cd1ae --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.html_select_time.php @@ -0,0 +1,192 @@ + + * Name: html_select_time
+ * Purpose: Prints the dropdowns for time selection + * @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + * @uses smarty_make_timestamp() + */ +function smarty_function_html_select_time($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); + require_once $smarty->_get_plugin_filepath('function','html_options'); + /* Default values. */ + $prefix = "Time_"; + $time = time(); + $display_hours = true; + $display_minutes = true; + $display_seconds = true; + $display_meridian = true; + $use_24_hours = true; + $minute_interval = 1; + $second_interval = 1; + /* Should the select boxes be part of an array when returned from PHP? + e.g. setting it to "birthday", would create "birthday[Hour]", + "birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]". + Can be combined with prefix. */ + $field_array = null; + $all_extra = null; + $hour_extra = null; + $minute_extra = null; + $second_extra = null; + $meridian_extra = null; + + foreach ($params as $_key=>$_value) { + switch ($_key) { + case 'prefix': + case 'time': + case 'field_array': + case 'all_extra': + case 'hour_extra': + case 'minute_extra': + case 'second_extra': + case 'meridian_extra': + $$_key = (string)$_value; + break; + + case 'display_hours': + case 'display_minutes': + case 'display_seconds': + case 'display_meridian': + case 'use_24_hours': + $$_key = (bool)$_value; + break; + + case 'minute_interval': + case 'second_interval': + $$_key = (int)$_value; + break; + + default: + $smarty->trigger_error("[html_select_time] unknown parameter $_key", E_USER_WARNING); + } + } + + $time = smarty_make_timestamp($time); + + $html_result = ''; + + if ($display_hours) { + $hours = $use_24_hours ? range(0, 23) : range(1, 12); + $hour_fmt = $use_24_hours ? '%H' : '%I'; + for ($i = 0, $for_max = count($hours); $i < $for_max; $i++) + $hours[$i] = sprintf('%02d', $hours[$i]); + $html_result .= '\n"; + } + + if ($display_minutes) { + $all_minutes = range(0, 59); + for ($i = 0, $for_max = count($all_minutes); $i < $for_max; $i+= $minute_interval) + $minutes[] = sprintf('%02d', $all_minutes[$i]); + $selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval); + $html_result .= '\n"; + } + + if ($display_seconds) { + $all_seconds = range(0, 59); + for ($i = 0, $for_max = count($all_seconds); $i < $for_max; $i+= $second_interval) + $seconds[] = sprintf('%02d', $all_seconds[$i]); + $selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval); + $html_result .= '\n"; + } + + if ($display_meridian && !$use_24_hours) { + $html_result .= '\n"; + } + + return $html_result; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.html_table.php b/bundled-libs/Smarty/libs/plugins/function.html_table.php new file mode 100644 index 0000000..62d7410 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.html_table.php @@ -0,0 +1,137 @@ + + * Name: html_table
+ * Date: Feb 17, 2003
+ * Purpose: make an html table from an array of data
+ * Input:
+ * - loop = array to loop through + * - cols = number of columns + * - rows = number of rows + * - table_attr = table attributes + * - tr_attr = table row attributes (arrays are cycled) + * - td_attr = table cell attributes (arrays are cycled) + * - trailpad = value to pad trailing cells with + * - vdir = vertical direction (default: "down", means top-to-bottom) + * - hdir = horizontal direction (default: "right", means left-to-right) + * - inner = inner loop (default "cols": print $loop line by line, + * $loop will be printed column by column otherwise) + * + * + * Examples: + *
+ * {table loop=$data}
+ * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
+ * {table loop=$data cols=4 tr_attr=$colors}
+ * 
+ * @author Monte Ohrt + * @version 1.0 + * @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_html_table($params, &$smarty) +{ + $table_attr = 'border="1"'; + $tr_attr = ''; + $td_attr = ''; + $cols = 3; + $rows = 3; + $trailpad = ' '; + $vdir = 'down'; + $hdir = 'right'; + $inner = 'cols'; + + if (!isset($params['loop'])) { + $smarty->trigger_error("html_table: missing 'loop' parameter"); + return; + } + + foreach ($params as $_key=>$_value) { + switch ($_key) { + case 'loop': + $$_key = (array)$_value; + break; + + case 'cols': + case 'rows': + $$_key = (int)$_value; + break; + + case 'table_attr': + case 'trailpad': + case 'hdir': + case 'vdir': + case 'inner': + $$_key = (string)$_value; + break; + + case 'tr_attr': + case 'td_attr': + $$_key = $_value; + break; + } + } + + $loop_count = count($loop); + if (empty($params['rows'])) { + /* no rows specified */ + $rows = ceil($loop_count/$cols); + } elseif (empty($params['cols'])) { + if (!empty($params['rows'])) { + /* no cols specified, but rows */ + $cols = ceil($loop_count/$rows); + } + } + + $output = "\n"; + + for ($r=0; $r<$rows; $r++) { + $output .= "\n"; + $rx = ($vdir == 'down') ? $r*$cols : ($rows-1-$r)*$cols; + + for ($c=0; $c<$cols; $c++) { + $x = ($hdir == 'right') ? $rx+$c : $rx+$cols-1-$c; + if ($inner!='cols') { + /* shuffle x to loop over rows*/ + $x = floor($x/$cols) + ($x%$cols)*$rows; + } + + if ($x<$loop_count) { + $output .= "" . $loop[$x] . "\n"; + } else { + $output .= "$trailpad\n"; + } + } + $output .= "\n"; + } + $output .= "
\n"; + + return $output; +} + +function smarty_function_html_table_cycle($name, $var, $no) { + if(!is_array($var)) { + $ret = $var; + } else { + $ret = $var[$no % count($var)]; + } + + return ($ret) ? ' '.$ret : ''; +} + + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.mailto.php b/bundled-libs/Smarty/libs/plugins/function.mailto.php new file mode 100644 index 0000000..64c122c --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.mailto.php @@ -0,0 +1,163 @@ + + * Name: mailto
+ * Date: May 21, 2002 + * Purpose: automate mailto address link creation, and optionally + * encode them.
+ * Input:
+ * - address = e-mail address + * - text = (optional) text to display, default is address + * - encode = (optional) can be one of: + * * none : no encoding (default) + * * javascript : encode with javascript + * * javascript_charcode : encode with javascript charcode + * * hex : encode with hexidecimal (no javascript) + * - cc = (optional) address(es) to carbon copy + * - bcc = (optional) address(es) to blind carbon copy + * - subject = (optional) e-mail subject + * - newsgroups = (optional) newsgroup(s) to post to + * - followupto = (optional) address(es) to follow up to + * - extra = (optional) extra tags for the href link + * + * Examples: + *
+ * {mailto address="me@domain.com"}
+ * {mailto address="me@domain.com" encode="javascript"}
+ * {mailto address="me@domain.com" encode="hex"}
+ * {mailto address="me@domain.com" subject="Hello to you!"}
+ * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
+ * {mailto address="me@domain.com" extra='class="mailto"'}
+ * 
+ * @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto} + * (Smarty online manual) + * @version 1.2 + * @author Monte Ohrt + * @author credits to Jason Sweat (added cc, bcc and subject functionality) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_mailto($params, &$smarty) +{ + $extra = ''; + + if (empty($params['address'])) { + $smarty->trigger_error("mailto: missing 'address' parameter"); + return; + } else { + $address = $params['address']; + } + + $text = $address; + + // netscape and mozilla do not decode %40 (@) in BCC field (bug?) + // so, don't encode it. + $mail_parms = array(); + foreach ($params as $var=>$value) { + switch ($var) { + case 'cc': + case 'bcc': + case 'followupto': + if (!empty($value)) + $mail_parms[] = $var.'='.str_replace('%40','@',rawurlencode($value)); + break; + + case 'subject': + case 'newsgroups': + $mail_parms[] = $var.'='.rawurlencode($value); + break; + + case 'extra': + case 'text': + $$var = $value; + + default: + } + } + + $mail_parm_vals = ''; + for ($i=0; $itrigger_error("mailto: 'encode' parameter must be none, javascript or hex"); + return; + } + + if ($encode == 'javascript' ) { + $string = 'document.write(\''.$text.'\');'; + + $js_encode = ''; + for ($x=0; $x < strlen($string); $x++) { + $js_encode .= '%' . bin2hex($string[$x]); + } + + return ''; + + } elseif ($encode == 'javascript_charcode' ) { + $string = ''.$text.''; + + for($x = 0, $y = strlen($string); $x < $y; $x++ ) { + $ord[] = ord($string[$x]); + } + + $_ret = "\n"; + + return $_ret; + + + } elseif ($encode == 'hex') { + + preg_match('!^(.*)(\?.*)$!',$address,$match); + if(!empty($match[2])) { + $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript."); + return; + } + $address_encode = ''; + for ($x=0; $x < strlen($address); $x++) { + if(preg_match('!\w!',$address[$x])) { + $address_encode .= '%' . bin2hex($address[$x]); + } else { + $address_encode .= $address[$x]; + } + } + $text_encode = ''; + for ($x=0; $x < strlen($text); $x++) { + $text_encode .= '&#x' . bin2hex($text[$x]).';'; + } + + $mailto = "mailto:"; + return ''.$text_encode.''; + + } else { + // no encoding + return ''.$text.''; + + } + +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.math.php b/bundled-libs/Smarty/libs/plugins/function.math.php new file mode 100644 index 0000000..0439107 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.math.php @@ -0,0 +1,83 @@ + + * Name: math
+ * Purpose: handle math computations in template
+ * @link http://smarty.php.net/manual/en/language.function.math.php {math} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_math($params, &$smarty) +{ + // be sure equation parameter is present + if (empty($params['equation'])) { + $smarty->trigger_error("math: missing equation parameter"); + return; + } + + $equation = $params['equation']; + + // make sure parenthesis are balanced + if (substr_count($equation,"(") != substr_count($equation,")")) { + $smarty->trigger_error("math: unbalanced parenthesis"); + return; + } + + // match all vars in equation, make sure all are passed + preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]+)!",$equation, $match); + $allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10', + 'max','min','pi','pow','rand','round','sin','sqrt','srand','tan'); + + foreach($match[1] as $curr_var) { + if ($curr_var && !in_array($curr_var, array_keys($params)) && !in_array($curr_var, $allowed_funcs)) { + $smarty->trigger_error("math: function call $curr_var not allowed"); + return; + } + } + + foreach($params as $key => $val) { + if ($key != "equation" && $key != "format" && $key != "assign") { + // make sure value is not empty + if (strlen($val)==0) { + $smarty->trigger_error("math: parameter $key is empty"); + return; + } + if (!is_numeric($val)) { + $smarty->trigger_error("math: parameter $key: is not numeric"); + return; + } + $equation = preg_replace("/\b$key\b/",$val, $equation); + } + } + + eval("\$smarty_math_result = ".$equation.";"); + + if (empty($params['format'])) { + if (empty($params['assign'])) { + return $smarty_math_result; + } else { + $smarty->assign($params['assign'],$smarty_math_result); + } + } else { + if (empty($params['assign'])){ + printf($params['format'],$smarty_math_result); + } else { + $smarty->assign($params['assign'],sprintf($params['format'],$smarty_math_result)); + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.popup.php b/bundled-libs/Smarty/libs/plugins/function.popup.php new file mode 100644 index 0000000..2ba54de --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.popup.php @@ -0,0 +1,117 @@ + + * Name: popup
+ * Purpose: make text pop up in windows via overlib + * @link http://smarty.php.net/manual/en/language.function.popup.php {popup} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_popup($params, &$smarty) +{ + $append = ''; + foreach ($params as $_key=>$_value) { + switch ($_key) { + case 'text': + case 'trigger': + case 'function': + case 'inarray': + $$_key = (string)$_value; + if ($_key == 'function' || $_key == 'inarray') + $append .= ',' . strtoupper($_key) . ",'$_value'"; + break; + + case 'caption': + case 'closetext': + case 'status': + $append .= ',' . strtoupper($_key) . ",'" . str_replace("'","\'",$_value) . "'"; + break; + + case 'fgcolor': + case 'bgcolor': + case 'textcolor': + case 'capcolor': + case 'closecolor': + case 'textfont': + case 'captionfont': + case 'closefont': + case 'fgbackground': + case 'bgbackground': + case 'caparray': + case 'capicon': + case 'background': + case 'frame': + $append .= ',' . strtoupper($_key) . ",'$_value'"; + break; + + case 'textsize': + case 'captionsize': + case 'closesize': + case 'width': + case 'height': + case 'border': + case 'offsetx': + case 'offsety': + case 'snapx': + case 'snapy': + case 'fixx': + case 'fixy': + case 'padx': + case 'pady': + case 'timeout': + case 'delay': + $append .= ',' . strtoupper($_key) . ",$_value"; + break; + + case 'sticky': + case 'left': + case 'right': + case 'center': + case 'above': + case 'below': + case 'noclose': + case 'autostatus': + case 'autostatuscap': + case 'fullhtml': + case 'hauto': + case 'vauto': + case 'mouseoff': + case 'followmouse': + if ($_value) $append .= ',' . strtoupper($_key); + break; + + default: + $smarty->trigger_error("[popup] unknown parameter $_key", E_USER_WARNING); + } + } + + if (empty($text) && !isset($inarray) && empty($function)) { + $smarty->trigger_error("overlib: attribute 'text' or 'inarray' or 'function' required"); + return false; + } + + if (empty($trigger)) { $trigger = "onmouseover"; } + + $retval = $trigger . '="return overlib(\''.preg_replace(array("!'!","![\r\n]!"),array("\'",'\r'),$text).'\''; + $retval .= $append . ');"'; + if ($trigger == 'onmouseover') + $retval .= ' onmouseout="nd();"'; + + + return $retval; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/function.popup_init.php b/bundled-libs/Smarty/libs/plugins/function.popup_init.php new file mode 100644 index 0000000..f62c33c --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/function.popup_init.php @@ -0,0 +1,39 @@ + + * Name: popup_init
+ * Purpose: initialize overlib + * @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_popup_init($params, &$smarty) +{ + $zindex = 1000; + + if (!empty($params['zindex'])) { + $zindex = $params['zindex']; + } + + if (!empty($params['src'])) { + return '' . "\n" + . '' . "\n"; + } else { + $smarty->trigger_error("popup_init: missing src parameter"); + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.capitalize.php b/bundled-libs/Smarty/libs/plugins/modifier.capitalize.php new file mode 100644 index 0000000..2b9169c --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.capitalize.php @@ -0,0 +1,42 @@ + + * Name: capitalize
+ * Purpose: capitalize words in the string + * @link http://smarty.php.net/manual/en/language.modifiers.php#LANGUAGE.MODIFIER.CAPITALIZE + * capitalize (Smarty online manual) + * @param string + * @return string + */ +function smarty_modifier_capitalize($string, $uc_digits = false) +{ + smarty_modifier_capitalize_ucfirst(null, $uc_digits); + return preg_replace_callback('!\b\w+\b!', 'smarty_modifier_capitalize_ucfirst', $string); +} + +function smarty_modifier_capitalize_ucfirst($string, $uc_digits = null) +{ + static $_uc_digits = false; + + if(isset($uc_digits)) { + $_uc_digits = $uc_digits; + return; + } + + if(!preg_match('!\d!',$string[0]) || $_uc_digits) + return ucfirst($string[0]); + else + return $string[0]; +} + + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.cat.php b/bundled-libs/Smarty/libs/plugins/modifier.cat.php new file mode 100644 index 0000000..2e37940 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.cat.php @@ -0,0 +1,33 @@ + + * Name: cat
+ * Date: Feb 24, 2003 + * Purpose: catenate a value to a variable + * Input: string to catenate + * Example: {$var|cat:"foo"} + * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat + * (Smarty online manual) + * @author Monte Ohrt + * @version 1.0 + * @param string + * @param string + * @return string + */ +function smarty_modifier_cat($string, $cat) +{ + return $string . $cat; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.count_characters.php b/bundled-libs/Smarty/libs/plugins/modifier.count_characters.php new file mode 100644 index 0000000..49ce655 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.count_characters.php @@ -0,0 +1,31 @@ + + * Name: count_characteres
+ * Purpose: count the number of characters in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.characters.php + * count_characters (Smarty online manual) + * @param string + * @param boolean include whitespace in the character count + * @return integer + */ +function smarty_modifier_count_characters($string, $include_spaces = false) +{ + if ($include_spaces) + return(strlen($string)); + + return preg_match_all("/[^\s]/",$string, $match); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.count_paragraphs.php b/bundled-libs/Smarty/libs/plugins/modifier.count_paragraphs.php new file mode 100644 index 0000000..6a9833c --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.count_paragraphs.php @@ -0,0 +1,28 @@ + + * Name: count_paragraphs
+ * Purpose: count the number of paragraphs in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php + * count_paragraphs (Smarty online manual) + * @param string + * @return integer + */ +function smarty_modifier_count_paragraphs($string) +{ + // count \r or \n characters + return count(preg_split('/[\r\n]+/', $string)); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.count_sentences.php b/bundled-libs/Smarty/libs/plugins/modifier.count_sentences.php new file mode 100644 index 0000000..0c210f0 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.count_sentences.php @@ -0,0 +1,28 @@ + + * Name: count_sentences + * Purpose: count the number of sentences in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php + * count_sentences (Smarty online manual) + * @param string + * @return integer + */ +function smarty_modifier_count_sentences($string) +{ + // find periods with a word before but not after. + return preg_match_all('/[^\s]\.(?!\w)/', $string, $match); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.count_words.php b/bundled-libs/Smarty/libs/plugins/modifier.count_words.php new file mode 100644 index 0000000..42c8a74 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.count_words.php @@ -0,0 +1,32 @@ + + * Name: count_words
+ * Purpose: count the number of words in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.words.php + * count_words (Smarty online manual) + * @param string + * @return integer + */ +function smarty_modifier_count_words($string) +{ + // split text by ' ',\r,\n,\f,\t + $split_array = preg_split('/\s+/',$string); + // count matches that contain alphanumerics + $word_count = preg_grep('/[a-zA-Z0-9\\x80-\\xff]/', $split_array); + + return count($word_count); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.date_format.php b/bundled-libs/Smarty/libs/plugins/modifier.date_format.php new file mode 100644 index 0000000..2f36b3b --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.date_format.php @@ -0,0 +1,48 @@ +_get_plugin_filepath('shared','make_timestamp'); +/** + * Smarty date_format modifier plugin + * + * Type: modifier
+ * Name: date_format
+ * Purpose: format datestamps via strftime
+ * Input:
+ * - string: input date string + * - format: strftime format for output + * - default_date: default date if $string is empty + * @link http://smarty.php.net/manual/en/language.modifier.date.format.php + * date_format (Smarty online manual) + * @param string + * @param string + * @param string + * @return string|void + * @uses smarty_make_timestamp() + */ +function smarty_modifier_date_format($string, $format="%b %e, %Y", $default_date=null) +{ + if (substr(PHP_OS,0,3) == 'WIN') { + $_win_from = array ('%e', '%T', '%D'); + $_win_to = array ('%#d', '%H:%M:%S', '%m/%d/%y'); + $format = str_replace($_win_from, $_win_to, $format); + } + if($string != '') { + return strftime($format, smarty_make_timestamp($string)); + } elseif (isset($default_date) && $default_date != '') { + return strftime($format, smarty_make_timestamp($default_date)); + } else { + return; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.debug_print_var.php b/bundled-libs/Smarty/libs/plugins/modifier.debug_print_var.php new file mode 100644 index 0000000..b9bb184 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.debug_print_var.php @@ -0,0 +1,56 @@ + + * Name: debug_print_var
+ * Purpose: formats variable contents for display in the console + * @link http://smarty.php.net/manual/en/language.modifier.debug.print.var.php + * debug_print_var (Smarty online manual) + * @param array|object + * @param integer + * @param integer + * @return string + */ +function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40) +{ + $_replace = array("\n"=>'\n', "\r"=>'\r', "\t"=>'\t'); + if (is_array($var)) { + $results = "Array (".count($var).")"; + foreach ($var as $curr_key => $curr_val) { + $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length); + $results .= "
".str_repeat(' ', $depth*2)."".strtr($curr_key, $_replace)." => $return"; + } + } else if (is_object($var)) { + $object_vars = get_object_vars($var); + $results = "".get_class($var)." Object (".count($object_vars).")"; + foreach ($object_vars as $curr_key => $curr_val) { + $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length); + $results .= "
".str_repeat(' ', $depth*2)."$curr_key => $return"; + } + } else if (is_resource($var)) { + $results = ''.(string)$var.''; + } else if (empty($var) && $var != "0") { + $results = 'empty'; + } else { + if (strlen($var) > $length ) { + $results = substr($var, 0, $length-3).'...'; + } else { + $results = $var; + } + $results = htmlspecialchars($results); + $results = strtr($results, $_replace); + } + return $results; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.default.php b/bundled-libs/Smarty/libs/plugins/modifier.default.php new file mode 100644 index 0000000..8268e39 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.default.php @@ -0,0 +1,31 @@ + + * Name: default
+ * Purpose: designate default value for empty variables + * @link http://smarty.php.net/manual/en/language.modifier.default.php + * default (Smarty online manual) + * @param string + * @param string + * @return string + */ +function smarty_modifier_default($string, $default = '') +{ + if (!isset($string) || $string === '') + return $default; + else + return $string; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.escape.php b/bundled-libs/Smarty/libs/plugins/modifier.escape.php new file mode 100644 index 0000000..a32a876 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.escape.php @@ -0,0 +1,89 @@ + + * Name: escape
+ * Purpose: Escape the string according to escapement type + * @link http://smarty.php.net/manual/en/language.modifier.escape.php + * escape (Smarty online manual) + * @param string + * @param html|htmlall|url|quotes|hex|hexentity|javascript + * @return string + */ +function smarty_modifier_escape($string, $esc_type = 'html') +{ + switch ($esc_type) { + case 'html': + return htmlspecialchars($string, ENT_QUOTES); + + case 'htmlall': + return htmlentities($string, ENT_QUOTES); + + case 'url': + return rawurlencode($string); + + case 'quotes': + // escape unescaped single quotes + return preg_replace("%(?'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n',''<\/')); + + case 'mail': + // safe way to display e-mail address on a web page + return str_replace(array('@', '.'),array(' [AT] ', ' [DOT] '), $string); + + case 'nonstd': + // escape non-standard chars, such as ms document quotes + $_res = ''; + for($_i = 0, $_len = strlen($string); $_i < $_len; $_i++) { + $_ord = ord($string{$_i}); + // non-standard char, escape it + if($_ord >= 126){ + $_res .= '&#' . $_ord . ';'; + } + else { + $_res .= $string{$_i}; + } + } + return $_res; + + default: + return $string; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.indent.php b/bundled-libs/Smarty/libs/plugins/modifier.indent.php new file mode 100644 index 0000000..1642bac --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.indent.php @@ -0,0 +1,27 @@ + + * Name: indent
+ * Purpose: indent lines of text + * @link http://smarty.php.net/manual/en/language.modifier.indent.php + * indent (Smarty online manual) + * @param string + * @param integer + * @param string + * @return string + */ +function smarty_modifier_indent($string,$chars=4,$char=" ") +{ + return preg_replace('!^!m',str_repeat($char,$chars),$string); +} + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.lower.php b/bundled-libs/Smarty/libs/plugins/modifier.lower.php new file mode 100644 index 0000000..0b4d151 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.lower.php @@ -0,0 +1,25 @@ + + * Name: lower
+ * Purpose: convert string to lowercase + * @link http://smarty.php.net/manual/en/language.modifier.lower.php + * lower (Smarty online manual) + * @param string + * @return string + */ +function smarty_modifier_lower($string) +{ + return strtolower($string); +} + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.nl2br.php b/bundled-libs/Smarty/libs/plugins/modifier.nl2br.php new file mode 100644 index 0000000..d6fabff --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.nl2br.php @@ -0,0 +1,35 @@ + + * Name: nl2br
+ * Date: Feb 26, 2003 + * Purpose: convert \r\n, \r or \n to <
> + * Input:
+ * - contents = contents to replace + * - preceed_test = if true, includes preceeding break tags + * in replacement + * Example: {$text|nl2br} + * @link http://smarty.php.net/manual/en/language.modifier.nl2br.php + * nl2br (Smarty online manual) + * @version 1.0 + * @author Monte Ohrt + * @param string + * @return string + */ +function smarty_modifier_nl2br($string) +{ + return nl2br($string); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.regex_replace.php b/bundled-libs/Smarty/libs/plugins/modifier.regex_replace.php new file mode 100644 index 0000000..7eee497 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.regex_replace.php @@ -0,0 +1,33 @@ + + * Name: regex_replace
+ * Purpose: regular epxression search/replace + * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php + * regex_replace (Smarty online manual) + * @param string + * @param string|array + * @param string|array + * @return string + */ +function smarty_modifier_regex_replace($string, $search, $replace) +{ + if (preg_match('!\W(\w+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) { + /* remove eval-modifier from $search */ + $search = substr($search, 0, -strlen($match[1])) . str_replace('e', '', $match[1]); + } + return preg_replace($search, $replace, $string); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.replace.php b/bundled-libs/Smarty/libs/plugins/modifier.replace.php new file mode 100644 index 0000000..2a43515 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.replace.php @@ -0,0 +1,29 @@ + + * Name: replace
+ * Purpose: simple search/replace + * @link http://smarty.php.net/manual/en/language.modifier.replace.php + * replace (Smarty online manual) + * @param string + * @param string + * @param string + * @return string + */ +function smarty_modifier_replace($string, $search, $replace) +{ + return str_replace($search, $replace, $string); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.spacify.php b/bundled-libs/Smarty/libs/plugins/modifier.spacify.php new file mode 100644 index 0000000..dad057f --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.spacify.php @@ -0,0 +1,29 @@ + + * Name: spacify
+ * Purpose: add spaces between characters in a string + * @link http://smarty.php.net/manual/en/language.modifier.spacify.php + * spacify (Smarty online manual) + * @param string + * @param string + * @return string + */ +function smarty_modifier_spacify($string, $spacify_char = ' ') +{ + return implode($spacify_char, + preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY)); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.string_format.php b/bundled-libs/Smarty/libs/plugins/modifier.string_format.php new file mode 100644 index 0000000..efd6215 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.string_format.php @@ -0,0 +1,28 @@ + + * Name: string_format
+ * Purpose: format strings via sprintf + * @link http://smarty.php.net/manual/en/language.modifier.string.format.php + * string_format (Smarty online manual) + * @param string + * @param string + * @return string + */ +function smarty_modifier_string_format($string, $format) +{ + return sprintf($format, $string); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.strip.php b/bundled-libs/Smarty/libs/plugins/modifier.strip.php new file mode 100644 index 0000000..cc5c453 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.strip.php @@ -0,0 +1,33 @@ + + * Name: strip
+ * Purpose: Replace all repeated spaces, newlines, tabs + * with a single space or supplied replacement string.
+ * Example: {$var|strip} {$var|strip:" "} + * Date: September 25th, 2002 + * @link http://smarty.php.net/manual/en/language.modifier.strip.php + * strip (Smarty online manual) + * @author Monte Ohrt + * @version 1.0 + * @param string + * @param string + * @return string + */ +function smarty_modifier_strip($text, $replace = ' ') +{ + return preg_replace('!\s+!', $replace, $text); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.strip_tags.php b/bundled-libs/Smarty/libs/plugins/modifier.strip_tags.php new file mode 100644 index 0000000..45f1ec1 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.strip_tags.php @@ -0,0 +1,31 @@ + + * Name: strip_tags
+ * Purpose: strip html tags from text + * @link http://smarty.php.net/manual/en/language.modifier.strip.tags.php + * strip_tags (Smarty online manual) + * @param string + * @param boolean + * @return string + */ +function smarty_modifier_strip_tags($string, $replace_with_space = true) +{ + if ($replace_with_space) + return preg_replace('!<[^>]*?>!', ' ', $string); + else + return strip_tags($string); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.truncate.php b/bundled-libs/Smarty/libs/plugins/modifier.truncate.php new file mode 100644 index 0000000..15a26ba --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.truncate.php @@ -0,0 +1,43 @@ + + * Name: truncate
+ * Purpose: Truncate a string to a certain length if necessary, + * optionally splitting in the middle of a word, and + * appending the $etc string. + * @link http://smarty.php.net/manual/en/language.modifier.truncate.php + * truncate (Smarty online manual) + * @param string + * @param integer + * @param string + * @param boolean + * @return string + */ +function smarty_modifier_truncate($string, $length = 80, $etc = '...', + $break_words = false) +{ + if ($length == 0) + return ''; + + if (strlen($string) > $length) { + $length -= strlen($etc); + if (!$break_words) + $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1)); + + return substr($string, 0, $length).$etc; + } else + return $string; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.upper.php b/bundled-libs/Smarty/libs/plugins/modifier.upper.php new file mode 100644 index 0000000..69960ae --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.upper.php @@ -0,0 +1,25 @@ + + * Name: upper
+ * Purpose: convert string to uppercase + * @link http://smarty.php.net/manual/en/language.modifier.upper.php + * upper (Smarty online manual) + * @param string + * @return string + */ +function smarty_modifier_upper($string) +{ + return strtoupper($string); +} + +?> diff --git a/bundled-libs/Smarty/libs/plugins/modifier.wordwrap.php b/bundled-libs/Smarty/libs/plugins/modifier.wordwrap.php new file mode 100644 index 0000000..b9a9fe9 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/modifier.wordwrap.php @@ -0,0 +1,28 @@ + + * Name: wordwrap
+ * Purpose: wrap a string of text at a given length + * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php + * wordwrap (Smarty online manual) + * @param string + * @param integer + * @param string + * @param boolean + * @return string + */ +function smarty_modifier_wordwrap($string,$length=80,$break="\n",$cut=false) +{ + return wordwrap($string,$length,$break,$cut); +} + +?> diff --git a/bundled-libs/Smarty/libs/plugins/outputfilter.trimwhitespace.php b/bundled-libs/Smarty/libs/plugins/outputfilter.trimwhitespace.php new file mode 100644 index 0000000..01e35e0 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/outputfilter.trimwhitespace.php @@ -0,0 +1,75 @@ + + * Type: outputfilter
+ * Name: trimwhitespace
+ * Date: Jan 25, 2003
+ * Purpose: trim leading white space and blank lines from + * template source after it gets interpreted, cleaning + * up code and saving bandwidth. Does not affect + * <
>
and blocks.
+ * Install: Drop into the plugin directory, call + * $smarty->load_filter('output','trimwhitespace'); + * from application. + * @author Monte Ohrt + * @author Contributions from Lars Noschinski + * @version 1.3 + * @param string + * @param Smarty + */ +function smarty_outputfilter_trimwhitespace($source, &$smarty) +{ + // Pull out the script blocks + preg_match_all("!]+>.*?!is", $source, $match); + $_script_blocks = $match[0]; + $source = preg_replace("!]+>.*?!is", + '@@@SMARTY:TRIM:SCRIPT@@@', $source); + + // Pull out the pre blocks + preg_match_all("!
.*?
!is", $source, $match); + $_pre_blocks = $match[0]; + $source = preg_replace("!
.*?
!is", + '@@@SMARTY:TRIM:PRE@@@', $source); + + // Pull out the textarea blocks + preg_match_all("!]+>.*?!is", $source, $match); + $_textarea_blocks = $match[0]; + $source = preg_replace("!]+>.*?!is", + '@@@SMARTY:TRIM:TEXTAREA@@@', $source); + + // remove all leading spaces, tabs and carriage returns NOT + // preceeded by a php close tag. + $source = trim(preg_replace('/((?)\n)[\s]+/m', '\1', $source)); + + // replace script blocks + smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:SCRIPT@@@",$_script_blocks, $source); + + // replace pre blocks + smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:PRE@@@",$_pre_blocks, $source); + + // replace textarea blocks + smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:TEXTAREA@@@",$_textarea_blocks, $source); + + return $source; +} + +function smarty_outputfilter_trimwhitespace_replace($search_str, $replace, &$subject) { + $_len = strlen($search_str); + $_pos = 0; + for ($_i=0, $_count=count($replace); $_i<$_count; $_i++) + if (($_pos=strpos($subject, $search_str, $_pos))!==false) + $subject = substr_replace($subject, $replace[$_i], $_pos, $_len); + else + break; + +} + +?> diff --git a/bundled-libs/Smarty/libs/plugins/shared.escape_special_chars.php b/bundled-libs/Smarty/libs/plugins/shared.escape_special_chars.php new file mode 100644 index 0000000..515763a --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/shared.escape_special_chars.php @@ -0,0 +1,30 @@ + + * Purpose: used by other smarty functions to escape + * special chars except for already escaped ones + * @param string + * @return string + */ +function smarty_function_escape_special_chars($string) +{ + if(!is_array($string)) { + $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); + $string = htmlspecialchars($string); + $string = str_replace(array('%%%SMARTY_START%%%','%%%SMARTY_END%%%'), array('&',';'), $string); + } + return $string; +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Smarty/libs/plugins/shared.make_timestamp.php b/bundled-libs/Smarty/libs/plugins/shared.make_timestamp.php new file mode 100644 index 0000000..acdd777 --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/shared.make_timestamp.php @@ -0,0 +1,43 @@ + + * Purpose: used by other smarty functions to make a timestamp + * from a string. + * @param string + * @return string + */ +function smarty_make_timestamp($string) +{ + if(empty($string)) { + $string = "now"; + } + $time = strtotime($string); + if (is_numeric($time) && $time != -1) + return $time; + + // is mysql timestamp format of YYYYMMDDHHMMSS? + if (preg_match('/^\d{14}$/', $string)) { + $time = mktime(substr($string,8,2),substr($string,10,2),substr($string,12,2), + substr($string,4,2),substr($string,6,2),substr($string,0,4)); + + return $time; + } + + // couldn't recognize it, try to return a time + $time = (int) $string; + if ($time > 0) + return $time; + else + return time(); +} + +/* vim: set expandtab: */ + +?> diff --git a/bundled-libs/Text/Wiki.php b/bundled-libs/Text/Wiki.php new file mode 100644 index 0000000..72f805e --- /dev/null +++ b/bundled-libs/Text/Wiki.php @@ -0,0 +1,557 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: Wiki.php,v 1.3 2004/12/02 10:54:30 nohn Exp $ + +require_once 'Text/Wiki/Rule.php'; + + +/** +* +* This is the "master" class for handling the management and convenience +* functions to transform Wiki-formatted text. +* +* @author Paul M. Jones +* +* @version 0.15 alpha +* +*/ + +class Text_Wiki { + + + /** + * + * The array of rules to apply to the source text, in order. + * + * @access public + * + * @var array + * + */ + + var $rules = array(); + + + /** + * + * The delimiter that surrounds a token number embedded in the source + * wiki text. + * + * @access public + * + * @var string + * + */ + + var $delim = "\xFF"; + + + /** + * + * An array of tokens generated by rules as the source text is + * parsed. + * + * As Text_Wiki applies rule classes to the source text, it will + * replace portions of the text with a delimited token number. This + * is the array of those tokens, representing the replaced text and + * any options set by the parser for that replaced text. + * + * The tokens array is seqential; each element is itself a sequential + * array where element 0 is the name of the rule that generated the + * token, and element 1 is an associative array where the key is an + * option name and the value is an option value. + * + * @access private + * + * @var string + * + */ + + var $_tokens = array(); + + + /** + * + * The source text to which rules will be applied. This text will be + * transformed in-place, which means that it will change as the rules + * are applied. + * + * @access private + * + * @var string + * + */ + + var $_source = ''; + + + /** + * + * Text_Wiki creates one instance of every rule that is applied to + * the source text; this array holds those instances. The array key + * is the rule name, and the array value is an instance of the rule + * class. + * + * @access private + * + * @var string + * + */ + + var $_rule_obj = array(); + + + /** + * + * Constructor. Loads the rule objects. + * + * @access public + * + * @param array $rules The set of rules to load for this object. + * + */ + + function Text_Wiki($rules = null) + { + // set up the list of rules + if (is_array($rules)) { + $this->rules = $rules; + } + } + + + /** + * + * Inserts a rule into to the rule set. + * + * @access public + * + * @param string $key The key name for the rule. Should be different from + * all other keys in the rule set. + * + * @param string $val The rule values; should be an associative array with + * the keys 'file', 'name', 'flag', and 'conf'. + * + * @param string $tgt The rule after which to insert this new rule. By + * default (null) the rule is inserted at the end; if set to '', inserts + * at the beginning. + * + * @return void + * + */ + + function insertRule($key, $val, $tgt = null) + { + // does the rule key to be inserted already exist? + if (isset($this->rules[$key])) { + // yes, return + return false; + } + + // the target name is not null, not '', but does not exist. this + // means we're trying to insert after a target key, but the + // target key isn't there. + if (! is_null($tgt) && $tgt != '' && ! isset($this->rules[$tgt])) { + return false; + } + + // if $tgt is null, insert at the end. We know this is at the + // end (instead of resetting an existing rule) becuase we exited + // at the top of this method if the rule was already in place. + if (is_null($tgt)) { + $this->rules[$key] = $val; + return true; + } + + // save a copy of the current rules, then reset the rule set + // so we can insert in the proper place later. + $tmp = $this->rules; + $this->rules = array(); + + // where to insert the rule? + if ($tgt == '') { + // insert at the beginning + $this->rules[$key] = $val; + foreach ($tmp as $k => $v) { + $this->rules[$k] = $v; + } + return true; + } else { + // insert after the named rule + foreach ($tmp as $k => $v) { + $this->rules[$k] = $v; + if ($k == $tgt) { + $this->rules[$key] = $val; + } + } + } + return true; + } + + + /** + * + * Delete (remove or unset) a rule from the $rules property. + * + * @access public + * + * @param string $rule The name of the rule to remove. + * + * @return void + * + */ + + function deleteRule($key) + { + unset($this->rules[$key]); + } + + + /** + * + * Sets the value of a rule's configuration keys. + * + * @access public + * + * @param string $rule The name of the rule for which to set + * configuration keys. + * + * @param array|string $arg1 If an array, sets the entire 'conf' key + * for the rule; if a string, specifies which 'conf' subkey to set. + * + * @param mixed $arg2 If $arg1 is a string, the 'conf' subkey + * specified by $arg1 is set to this value. + * + * @return void + * + */ + + function setRuleConf($rule, $arg1, $arg2 = null) + { + if (! isset($this->rules[$rule])) { + return; + } + + if (! isset($this->rules[$rule]['conf'])) { + $this->rules[$rule]['conf'] = array(); + } + + if (is_array($arg1)) { + $this->rules[$rule]['conf'] = $arg1; + } else { + $this->rules[$rule]['conf'][$arg1] = $arg2; + } + } + + + /** + * + * Sets the value of a rule's configuration keys. + * + * @access public + * + * @param string $rule The name of the rule from which to get + * configuration keys. + * + * @param string $key Which 'conf' subkey to retrieve. If null, + * gets the entire 'conf' key for the rule. + * + * @return void + * + */ + + function getRuleConf($rule, $key = null) + { + if (! isset($this->rules[$rule])) { + return null; + } + + if (! isset($this->rules[$rule]['conf'])) { + $this->rules[$rule]['conf'] = array(); + } + + if (is_null($key)) { + return $this->rules[$rule]['conf']; + } + + if (! isset($this->rules[$rule]['conf'][$key])) { + return null; + } else { + return $this->rules[$rule]['conf'][$key]; + } + + } + + + /** + * + * Enables a rule so that it is applied when parsing. + * + * @access public + * + * @param string $rule The name of the rule to enable. + * + * @return void + * + */ + + function enableRule($rule) + { + if (isset($this->rules[$rule])) { + $this->rules[$rule]['flag'] = true; + } + } + + + /** + * + * Disables a rule so that it is not applied when parsing. + * + * @access public + * + * @param string $rule The name of the rule to disable. + * + * @return void + * + */ + + function disableRule($rule) + { + if (isset($this->rules[$rule])) { + $this->rules[$rule]['flag'] = false; + } + } + + + /** + * + * Parses and renders the text passed to it, and returns the results. + * + * First, the method parses the source text, applying rules to the + * text as it goes. These rules will modify the source text + * in-place, replacing some text with delimited tokens (and + * populating the $this->_tokens array as it goes). + * + * Next, the method renders the in-place tokens into the requested + * output format. + * + * Finally, the method returns the transformed text. Note that the + * source text is transformed in place; once it is transformed, it is + * no longer the same as the original source text. + * + * @access public + * + * @param string $text The source text to which wiki rules should be + * applied, both for parsing and for rendering. + * + * @param string $format The target output format, typically 'xhtml'. + * If a rule does not support a given format, the output from that + * rule is rule-specific. + * + * @return string The transformed wiki text. + * + */ + + function transform($text, $format = 'Xhtml') + { + $this->parse($text); + return $this->render($format); + } + + + /** + * + * Sets the $_source text property, then parses it in place and + * retains tokens in the $_tokens array property. + * + * @access public + * + * @param string $text The source text to which wiki rules should be + * applied, both for parsing and for rendering. + * + * @return void + * + */ + + function parse($text) + { + // set the object property for the source text + $this->_source = $text; + + // apply the parse() method of each requested rule to the source + // text. + foreach ($this->rules as $key => $val) { + // if flag is not set to 'true' (active), + // do not parse under this rule. assume + // that if a rule exists, but has no flag, + // that it wants to be parsed with. + if (! isset($val['flag']) || $val['flag'] == true) { + $this->_loadRuleObject($key); + $this->_rule_obj[$key]->parse(); + } + } + } + + + /** + * + * Renders tokens back into the source text, based on the requested format. + * + * @access public + * + * @param string $format The target output format, typically 'xhtml'. + * If a rule does not support a given format, the output from that + * rule is rule-specific. + * + * @return string The transformed wiki text. + * + */ + + function render($format = 'Xhtml') + { + // the rendering method we're going to use from each rule + $method = "render$format"; + + // the eventual output text + $output = ''; + + // when passing through the parsed source text, keep track of when + // we are in a delimited section + $in_delim = false; + + // when in a delimited section, capture the token key number + $key = ''; + + // pass through the parsed source text character by character + $k = strlen($this->_source); + for ($i = 0; $i < $k; $i++) { + + // the current character + $char = $this->_source{$i}; + + // are alredy in a delimited section? + if ($in_delim) { + + // yes; are we ending the section? + if ($char == $this->delim) { + + // yes, get the replacement text for the delimited + // token number and unset the flag. + $key = (int)$key; + $rule = $this->_tokens[$key][0]; + $opts = $this->_tokens[$key][1]; + $output .= $this->_rule_obj[$rule]->$method($opts); + $in_delim = false; + + } else { + + // no, add to the dlimited token key number + $key .= $char; + + } + + } else { + + // not currently in a delimited section. + // are we starting into a delimited section? + if ($char == $this->delim) { + // yes, reset the previous key and + // set the flag. + $key = ''; + $in_delim = true; + } else { + // no, add to the output as-is + $output .= $char; + } + } + } + + // return the rendered source text + return $output; + } + + + /** + * + * Returns the parsed source text with delimited token placeholders. + * + * @access public + * + * @return string The parsed source text. + * + */ + + function getSource() + { + return $this->_source; + } + + + /** + * + * Returns tokens that have been parsed out of the source text. + * + * @access public + * + * @param array $rules If an array of rule names is passed, only return + * tokens matching these rule names. If no array is passed, return all + * tokens. + * + * @return array An array of tokens. + * + */ + + function getTokens($rules = null) + { + if (is_null($rules)) { + return $this->_tokens; + } else { + settype($rules, 'array'); + $result = array(); + foreach ($this->_tokens as $key => $val) { + if (in_array($val[0], $rules)) { + $result[] = $val; + } + } + return $result; + } + } + + + /** + * + * Loads a rule class file and creates an instance of it. + * + * @access public + * + * @return void + * + */ + + function _loadRuleObject($key) + { + $name = $this->rules[$key]['name']; + if (! class_exists($name)) { + include_once $this->rules[$key]['file']; + } + $this->_rule_obj[$key] =& new $name($this, $key); + } +} + +?> diff --git a/bundled-libs/Text/Wiki/Rule.php b/bundled-libs/Text/Wiki/Rule.php new file mode 100644 index 0000000..bdfe865 --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule.php @@ -0,0 +1,345 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: Rule.php,v 1.3 2004/12/02 10:54:31 nohn Exp $ + +/** +* +* Baseline rule class for extension into a "real" wiki rule. +* +* Text_Wiki_Rule classes do not stand on their own; they are called by a +* Text_Wiki object, typcially in the transform()method. Each rule class +* performs three main activities: parse, process, and render. +* +* The parse() method takes a regex and applies it to the whole block of +* source text at one time. Each match is sent as $matches to the +* process() method. +* +* The process() method acts on the matched text from the source, and +* then processes the source text is some way. This may mean the +* creation of a delimited token using addToken(). In every case, the +* process() method returns the text that should replace the matched text +* from parse(). +* +* Finally, the render*() methods take any token created by the rule and +* creates output text matching a specific format. Individual rules may +* or may not have options for specific formats. +* +* Typically, the extended rule only needs to define the process() and +* render() methods; the parse() method is generally the same from rule +* to rule, and has been included here. However, there is no reason that +* rules cannot override these methods, so long as the new methods operate +* in substantially the same manner; similarly, the rule need not generate +* any tokens at all, and may use a specialized parse() method to filter +* the source text. See the default rule classes for many examples. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule { + + + /** + * + * The regular expression used to parse the source text and find + * matches conforming to this rule. Used by the parse() method. + * + * @access public + * + * @var string + * + * @see parse() + * + */ + + var $regex = null; + + + /** + * + * A reference to the calling Text_Wiki object. This is needed so + * that each rule has access to the same source text, token set, + * URLs, interwiki maps, page names, etc. + * + * @access public + * + * @var object + */ + + var $_wiki = null; + + + /** + * + * The name of this rule; used when inserting new token array + * elements. + * + * @access private + * + * @var string + * + */ + + var $_rule = null; + + + /** + * + * Configuration options for this rule. + * + * @access private + * + * @var string + * + */ + + var $_conf = null; + + + /** + * + * Constructor for the rule. + * + * @access public + * + * @param object &$obj The calling "parent" Text_Wiki object. + * + * @param string $name The token name to use for this rule. + * + */ + + function Text_Wiki_Rule(&$obj, $name) + { + // set the reference to the calling Text_Wiki object; + // this allows us access to the shared source text, token + // array, etc. + $this->_wiki =& $obj; + + // set the name of this rule; generally used when adding + // to the tokens array. + $this->_rule = $name; + + // config options reference + $this->_conf =& $this->_wiki->rules[$this->_rule]['conf']; + } + + + /** + * + * Add a token to the Text_Wiki tokens array, and return a delimited + * token number. + * + * @access public + * + * @param array $options An associative array of options for the new + * token array element. The keys and values are specific to the + * rule, and may or may not be common to other rule options. Typical + * options keys are 'text' and 'type' but may include others. + * + * @param boolean $id_only If true, return only the token number, not + * a delimited token string. + * + * @return string|int By default, return the number of the + * newly-created token array element with a delimiter prefix and + * suffix; however, if $id_only is set to true, return only the token + * number (no delimiters). + * + */ + + function addToken($options = array(), $id_only = false) + { + // force the options to be an array + settype($options, 'array'); + + // find the next token number + $id = count($this->_wiki->_tokens); + + // add the token + $this->_wiki->_tokens[$id] = array( + 0 => $this->_rule, + 1 => $options + ); + + // return a value + if ($id_only) { + // return the last token number + return $id; + } else { + // return the token number with delimiters + return $this->_wiki->delim . $id . $this->_wiki->delim; + } + } + + + /** + * + * Set or re-set a token with specific information, overwriting any + * previous rule name and rule options. + * + * @access public + * + * @param int $id The token number to reset. + * + * @param int $rule The rule name to use; by default, use the current + * rule name, although you can specify any rule. + * + * @param array $options An associative array of options for the + * token array element. The keys and values are specific to the + * rule, and may or may not be common to other rule options. Typical + * options keys are 'text' and 'type' but may include others. + * + * @return void + * + */ + + function setToken($id, $rule = null, $options = array()) + { + // get a rule name + if (is_null($rule)) { + $rule = $this->_rule; + } + + // reset the token + $this->_wiki->_tokens[$id] = array( + 0 => $rule, + 1 => $options + ); + } + + + /** + * + * Simple parsing method to apply the rule's regular expression to + * the source text, pass every match to the process() method, and + * replace the matched text with the results of the processing. + * + * @access public + * + */ + + function parse() + { + $this->_wiki->_source = preg_replace_callback( + $this->regex, + array(&$this, 'process'), + $this->_wiki->_source + ); + } + + + /** + * + * Simple processing mathod to take matched text and generate + * replacement text. This is one of the methods you will definitely + * want to override in your rule class extensions. + * + * @access public + * + * @param array $matches An array of matches from the parse() method + * as generated by preg_replace_callback. $matches[0] is the full + * matched string, $matches[1] is the first matched pattern, + * $matches[2] is the second matched pattern, and so on. + * + * @return string The processed text replacement; defaults to the + * full matched string (i.e., no changes to the text). + * + */ + + function process(&$matches) + { + return $matches[0]; + } + + + /** + * + * Simple rendering method to take a set of token options and + * generate replacement text for it. This is another method you will + * definitely want to override in your rule subclass extensions. + * + * @access public + * + * @param array $options The "options" portion of the token (second element). + * + * @return string The text rendered from the token options; by default, + * no text is returned. You should change this in your subclass. ;-) + * + */ + + function renderXhtml($options) + { + return ''; + } + + + /** + * + * Simple method to extract 'option="value"' portions of wiki markup, + * typically used only in macros. + * + * The syntax is pretty strict; there can be no spaces between the + * option name, the equals, and the first double-quote; the value + * must be surrounded by double-quotes. You can escape characters in + * the value with a backslash, and the backslash will be stripped for + * you. + * + * @access public + * + * @param string $text The "macro options" portion of macro markup. + * + * @return array An associative array of key-value pairs where the + * key is the option name and the value is the option value. + * + */ + + function getMacroArgs($text) + { + // find the =" sections; + $tmp = explode('="', trim($text)); + + // basic setup + $k = count($tmp) - 1; + $arg = array(); + $key = null; + + // loop through the sections + foreach ($tmp as $i => $val) { + + // first element is always the first key + if ($i == 0) { + $key = trim($val); + continue; + } + + // find the last double-quote in the value. + // the part to the left is the value for the last key, + // the part to the right is the next key name + $pos = strrpos($val, '"'); + $arg[$key] = stripslashes(substr($val, 0, $pos)); + $key = trim(substr($val, $pos+1)); + + } + + return $arg; + + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/blockquote.php b/bundled-libs/Text/Wiki/Rule/blockquote.php new file mode 100644 index 0000000..b777dbd --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/blockquote.php @@ -0,0 +1,209 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: blockquote.php,v 1.3 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to find source text marked as a +* blockquote, identified by any number of greater-than signs '>' at the +* start of the line, followed by a space, and then the quote text; each +* '>' indicates an additional level of quoting. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_blockquote extends Text_Wiki_Rule { + + + /** + * + * The regular expression used to parse the source text and find + * matches conforming to this rule. Used by the parse() method. + * + * @access public + * + * @var string + * + * @see parse() + * + */ + + var $regex = '/\n((\>).*\n)(?!(\>))/Us'; + + + /** + * + * Generates a replacement for the matched text. Token options are: + * + * 'type' => + * 'start' : the start of a blockquote + * 'end' : the end of a blockquote + * + * 'level' => the indent level (0 for the first level, 1 for the + * second, etc) + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return A series of text and delimited tokens marking the different + * list text and list elements. + * + */ + + function process(&$matches) + { + // the replacement text we will return to parse() + $return = ''; + + // the list of post-processing matches + $list = array(); + + // $matches[1] is the text matched as a list set by parse(); + // create an array called $list that contains a new set of + // matches for the various list-item elements. + preg_match_all( + '=^(\>+) (.*\n)=Ums', + $matches[1], + $list, + PREG_SET_ORDER + ); + + // a stack of starts and ends; we keep this so that we know what + // indent level we're at. + $stack = array(); + + // loop through each list-item element. + foreach ($list as $key => $val) { + + // $val[0] is the full matched list-item line + // $val[1] is the number of initial '>' chars (indent level) + // $val[2] is the quote text + + // we number levels starting at 1, not zero + $level = strlen($val[1]); + + // get the text of the line + $text = $val[2]; + + // add a level to the list? + if ($level > count($stack)) { + + // the current indent level is greater than the number + // of stack elements, so we must be starting a new + // level. push the new level onto the stack with a + // dummy value (boolean true)... + array_push($stack, true); + + $return .= "\n"; + + // ...and add a start token to the return. + $return .= $this->addToken( + array( + 'type' => 'start', + 'level' => $level - 1 + ) + ); + + $return .= "\n\n"; + } + + // remove a level? + while (count($stack) > $level) { + + // as long as the stack count is greater than the + // current indent level, we need to end list types. + // continue adding end-list tokens until the stack count + // and the indent level are the same. + array_pop($stack); + + $return .= "\n\n"; + + $return .= $this->addToken( + array ( + 'type' => 'end', + 'level' => count($stack) + ) + ); + + $return .= "\n"; + } + + // add the line text. + $return .= $text; + } + + // the last line may have been indented. go through the stack + // and create end-tokens until the stack is empty. + $return .= "\n"; + + while (count($stack) > 0) { + array_pop($stack); + $return .= $this->addToken( + array ( + 'type' => 'end', + 'level' => count($stack) + ) + ); + } + + // we're done! send back the replacement text. + return "$return\n"; + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + $type = $options['type']; + $level = $options['level']; + + // set up indenting so that the results look nice; we do this + // in two steps to avoid str_pad mathematics. ;-) + $pad = str_pad('', $level, "\t"); + $pad = str_replace("\t", ' ', $pad); + + // starting + if ($type == 'start') { + return "$pad
"; + } + + // ending + if ($type == 'end') { + return $pad . "
\n"; + } + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/bold.php b/bundled-libs/Text/Wiki/Rule/bold.php new file mode 100644 index 0000000..4155b98 --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/bold.php @@ -0,0 +1,103 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: bold.php,v 1.3 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to find source text marked for +* strong emphasis (bold) as defined by text surrounded by three +* single-quotes. On parsing, the text itself is left in place, but the +* starting and ending instances of three single-quotes are replaced with +* tokens. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_bold extends Text_Wiki_Rule { + + + /** + * + * The regular expression used to parse the source text and find + * matches conforming to this rule. Used by the parse() method. + * + * @access public + * + * @var string + * + * @see parse() + * + */ + + var $regex = "/'''(()|[^'].*)'''/U"; + + + /** + * + * Generates a replacement for the matched text. Token options are: + * + * 'type' => ['start'|'end'] The starting or ending point of the + * emphasized text. The text itself is left in the source. + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return A pair of delimited tokens to be used as a placeholder in + * the source text surrounding the text to be emphasized. + * + */ + + function process(&$matches) + { + $start = $this->addToken(array('type' => 'start')); + $end = $this->addToken(array('type' => 'end')); + return $start . $matches[1] . $end; + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + if ($options['type'] == 'start') { + return ''; + } + + if ($options['type'] == 'end') { + return ''; + } + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/break.php b/bundled-libs/Text/Wiki/Rule/break.php new file mode 100644 index 0000000..fcc7413 --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/break.php @@ -0,0 +1,90 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: break.php,v 1.2 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to mark forced line breaks in the +* source text. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_break extends Text_Wiki_Rule { + + + /** + * + * The regular expression used to parse the source text and find + * matches conforming to this rule. Used by the parse() method. + * + * @access public + * + * @var string + * + * @see parse() + * + */ + + var $regex = '/ _\n/'; + + + /** + * + * Generates a replacement token for the matched text. + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return string A delimited token to be used as a placeholder in + * the source text. + * + */ + + function process(&$matches) + { + return $this->addToken(); + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + return "
\n"; + } +} + +?> diff --git a/bundled-libs/Text/Wiki/Rule/center.php b/bundled-libs/Text/Wiki/Rule/center.php new file mode 100644 index 0000000..49aef0c --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/center.php @@ -0,0 +1,98 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: center.php,v 1.2 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to find lines marked for centering. +* The line must start with "= " (i.e., an equal-sign followed by a space). +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_center extends Text_Wiki_Rule { + + + /** + * + * The regular expression used to find source text matching this + * rule. + * + * @access public + * + * @var string + * + */ + + //var $regex = '/\n(\)\n(.+)\n(\<\/center\>)\n/Umsi'; + var $regex = '/\n\= (.*?)\n/'; + + /** + * + * Generates a token entry for the matched text. + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return A delimited token number to be used as a placeholder in + * the source text. + * + */ + + function process(&$matches) + { + $start = $this->addToken(array('type' => 'start')); + $end = $this->addToken(array('type' => 'end')); + //return "\n" . $start . "\n" . $matches[2] . "\n\n" . $end . "\n"; + return "\n" . $start . $matches[1] . $end . "\n"; + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + if ($options['type'] == 'start') { + //return "\n
\n"; + return '
'; + } + + if ($options['type'] == 'end') { + //return "
\n"; + return ''; + } + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/code.php b/bundled-libs/Text/Wiki/Rule/code.php new file mode 100644 index 0000000..3526ee8 --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/code.php @@ -0,0 +1,177 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: code.php,v 1.4 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to find sections marked as code +* examples. Blocks are marked as the string on a line by itself, +* followed by the inline code example, and terminated with the string +* on a line by itself. The code example is run through the +* native PHP highlight_string() function to colorize it, then surrounded +* with
...
tags when rendered as XHTML. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_code extends Text_Wiki_Rule { + + + /** + * + * The regular expression used to find source text matching this + * rule. + * + * @access public + * + * @var string + * + */ + + var $regex = '/^(\)\n(.+)\n(\<\/code\>)(\s|$)/Umsi'; + + + /** + * + * Generates a token entry for the matched text. Token options are: + * + * 'text' => The full matched text, not including the tags. + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return A delimited token number to be used as a placeholder in + * the source text. + * + */ + + function process(&$matches) + { + // are there additional arguments? + $args = trim($matches[2]); + + if ($args == '') { + $options = array( + 'text' => $matches[3], + 'args' => array('type' => '') + ); + } else { + $options = array( + 'text' => $matches[3], + 'args' => $this->getMacroArgs($args) + ); + } + + return $this->addToken($options) . $matches[5]; + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + // trim opening and closing whitespace + $text = trim($options['text']); + $args = $options['args']; + + if (strtolower($args['type']) == 'php') { + + // PHP code example + + // add the PHP tags + $text = ""; // ... tags) + ob_start(); + highlight_string($text); + $text = ob_get_contents(); + ob_end_clean(); + + // replace
tags with simple newlines + //$text = str_replace("
", "\n", $text); + + // replace non-breaking space with simple spaces + //$text = str_replace(" ", " ", $text); + + // replace
tags with simple newlines + // replace non-breaking space with simple spaces + // translate old HTML to new XHTML + // courtesy of research by A. Kalin :-) + $map = array( + '
' => "\n", + ' ' => ' ', + ' '' => '', + 'color="' => 'style="color:' + ); + $text = strtr($text, $map); + + // get rid of the last newline inside the code block + // (becuase higlight_string puts one there) + if (substr($text, -8) == "\n") { + $text = substr($text, 0, -8) . ""; + } + + // done + $text = "
$text
"; + + } elseif (strtolower($args['type']) == 'html') { + + // HTML code example: + // add opening and closing tags, + // convert tabs to four spaces, + // convert entities. + $text = str_replace("\t", " ", $text); + $text = "\n$text\n"; + $text = htmlentities($text); + $text = "
$text
"; + + } else { + // generic code example: + // convert tabs to four spaces, + // convert entities. + $text = str_replace("\t", " ", $text); + $text = htmlentities($text); + $text = "
$text
"; + } + + return "\n$text\n"; + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/colortext.php b/bundled-libs/Text/Wiki/Rule/colortext.php new file mode 100644 index 0000000..7db577a --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/colortext.php @@ -0,0 +1,139 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: colortext.php,v 1.2 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to find source text marked for +* coloring. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_colortext extends Text_Wiki_Rule { + + var $colors = array( + 'aqua', + 'black', + 'blue', + 'fuchsia', + 'gray', + 'green', + 'lime', + 'maroon', + 'navy', + 'olive', + 'purple', + 'red', + 'silver', + 'teal', + 'white', + 'yellow' + ); + + + /** + * + * The regular expression used to parse the source text and find + * matches conforming to this rule. Used by the parse() method. + * + * @access public + * + * @var string + * + * @see parse() + * + */ + + var $regex = "/\#\#(.+?)\|(.+?)\#\#/"; + + + /** + * + * Generates a replacement for the matched text. Token options are: + * + * 'type' => ['start'|'end'] The starting or ending point of the + * emphasized text. The text itself is left in the source. + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return string A pair of delimited tokens to be used as a + * placeholder in the source text surrounding the text to be + * emphasized. + * + */ + + function process(&$matches) + { + $start = $this->addToken( + array( + 'type' => 'start', + 'color' => $matches[1] + ) + ); + + $end = $this->addToken( + array( + 'type' => 'end', + 'color' => $matches[1] + ) + ); + + return $start . $matches[2] . $end; + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + $type = $options['type']; + $color = $options['color']; + + if (! in_array($color, $this->colors)) { + $color = '#' . $color; + } + + if ($type == 'start') { + return ""; + } + + if ($options['type'] == 'end') { + return ''; + } + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/deflist.php b/bundled-libs/Text/Wiki/Rule/deflist.php new file mode 100644 index 0000000..68ff89e --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/deflist.php @@ -0,0 +1,172 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: deflist.php,v 1.3 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to find source text marked as a +* definition list. In short, if a line starts with ':' then it is a +* definition list item; another ':' on the same lines indicates the end +* of the definition term and the beginning of the definition narrative. +* The list items must be on sequential lines (no blank lines between +* them) -- a blank line indicates the beginning of a new list. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_deflist extends Text_Wiki_Rule { + + + /** + * + * The regular expression used to parse the source text and find + * matches conforming to this rule. Used by the parse() method. + * + * @access public + * + * @var string + * + * @see parse() + * + */ + + var $regex = '/\n((:).*\n)(?!(:))/Us'; + + + /** + * + * Generates a replacement for the matched text. Token options are: + * + * 'type' => + * 'list_start' : the start of a definition list + * 'list_end' : the end of a definition list + * 'term_start' : the start of a definition term + * 'term_end' : the end of a definition term + * 'narr_start' : the start of definition narrative + * 'narr_end' : the end of definition narrative + * 'unknown' : unknown type of definition portion + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return A series of text and delimited tokens marking the different + * list text and list elements. + * + */ + + function process(&$matches) + { + // the replacement text we will return to parse() + $return = ''; + + // the list of post-processing matches + $list = array(); + + // start the deflist + $options = array('type' => 'list_start'); + $return .= $this->addToken($options); + + // $matches[1] is the text matched as a list set by parse(); + // create an array called $list that contains a new set of + // matches for the various definition-list elements. + preg_match_all( + '/^(:)(.*)?(:)(.*)?$/Ums', + $matches[1], + $list, + PREG_SET_ORDER + ); + + // add each term and narrative + foreach ($list as $key => $val) { + $return .= ( + $this->addToken(array('type' => 'term_start')) . + trim($val[2]) . + $this->addToken(array('type' => 'term_end')) . + $this->addToken(array('type' => 'narr_start')) . + trim($val[4]) . + $this->addToken(array('type' => 'narr_end')) + ); + } + + + // end the deflist + $options = array('type' => 'list_end'); + $return .= $this->addToken($options); + + // done! + return "\n" . $return . "\n"; + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + $type = $options['type']; + $pad = " "; + + switch ($type) { + + case 'list_start': + return "
\n"; + break; + + case 'list_end': + return "
\n"; + break; + + case 'term_start': + return $pad . "
"; + break; + + case 'term_end': + return "
\n"; + break; + + case 'narr_start': + return $pad . $pad . "
"; + break; + + case 'narr_end': + return "
\n"; + break; + + default: + return ''; + + } + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/delimiter.php b/bundled-libs/Text/Wiki/Rule/delimiter.php new file mode 100644 index 0000000..27782ee --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/delimiter.php @@ -0,0 +1,95 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: delimiter.php,v 1.3 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to find instances of the delimiter +* character already embedded in the source text; it extracts them and replaces +* them with a delimited token, then renders them as the delimiter itself +* when the target format is XHTML. +* +* @author Paul M. Jones +* +* @package Text_Wiki +* +*/ + +class Text_Wiki_Rule_delimiter extends Text_Wiki_Rule { + + /** + * + * Constructor. Overrides the Text_Wiki_Rule constructor so that we + * can set the $regex property dynamically (we need to include the + * Text_Wiki $delim character. + * + * @param object &$obj The calling "parent" Text_Wiki object. + * + * @param string $name The token name to use for this rule. + * + */ + + function Text_Wiki_Rule_delimiter(&$obj, $name) + { + parent::Text_Wiki_Rule($obj, $name); + $this->regex = '/' . $this->_wiki->delim . '/'; + } + + + /** + * + * Generates a token entry for the matched text. Token options are: + * + * 'text' => The full matched text. + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return A delimited token number to be used as a placeholder in + * the source text. + * + */ + + function process(&$matches) + { + return $this->addToken(); + } + + + /** + * + * Renders a token into text matching the requested format. + * + * @access public + * + * @param array $options The "options" portion of the token (second + * element). + * + * @return string The text rendered from the token options. + * + */ + + function renderXhtml($options) + { + return $this->_wiki->delim; + } +} +?> diff --git a/bundled-libs/Text/Wiki/Rule/embed.php b/bundled-libs/Text/Wiki/Rule/embed.php new file mode 100644 index 0000000..617a9e3 --- /dev/null +++ b/bundled-libs/Text/Wiki/Rule/embed.php @@ -0,0 +1,102 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: embed.php,v 1.2 2004/12/02 10:54:32 nohn Exp $ + + +/** +* +* This class implements a Text_Wiki_Rule to embed the contents of a URL +* inside the page at render-time. Typically used to get script output. +* This differs from the 'include' rule, which incorporates results at +* parse-time; 'embed' output does not get parsed by Text_Wiki, while +* 'include' ouput does. +* +* This rule is inherently not secure; it allows cross-site scripting to +* occur if the embedded output has + + + + + +

Example with 2 HTMLAreas in the same form

+ +
+ + +
+ + + +
+ + + +
+ + +
+ +
+
Mihai Bazon
+ + Last modified: Wed Jan 28 11:10:40 EET 2004 + + + diff --git a/htmlarea/examples/context-menu.html b/htmlarea/examples/context-menu.html new file mode 100644 index 0000000..388195b --- /dev/null +++ b/htmlarea/examples/context-menu.html @@ -0,0 +1,95 @@ + + + Test of ContextMenu plugin + + + + + + + + + + + +

Test of ContextMenu plugin

+ + + + +
+
Mihai Bazon
+ + Last modified: Wed Jan 28 11:10:29 EET 2004 + + + diff --git a/htmlarea/examples/core.html b/htmlarea/examples/core.html new file mode 100644 index 0000000..536be0e --- /dev/null +++ b/htmlarea/examples/core.html @@ -0,0 +1,184 @@ + + +Example of HTMLArea 3.0 + + + + + + + + + + + + + + + + +

HTMLArea 3.0

+ +

A replacement for TEXTAREA elements. © InteractiveTools.com, 2003-2004.

+ +
+ + + +

+ + + + + +submit + + + +

+ + + diff --git a/htmlarea/examples/css.html b/htmlarea/examples/css.html new file mode 100644 index 0000000..5700d63 --- /dev/null +++ b/htmlarea/examples/css.html @@ -0,0 +1,88 @@ + + + Test of CSS plugin + + + + + + + + + + + +

Test of FullPage plugin

+ + + +
+
Mihai Bazon
+ + Last modified: Wed Jan 28 11:10:16 EET 2004 + + + diff --git a/htmlarea/examples/custom.css b/htmlarea/examples/custom.css new file mode 100644 index 0000000..e2690df --- /dev/null +++ b/htmlarea/examples/custom.css @@ -0,0 +1,29 @@ +body { background-color: #234; color: #dd8; font-family: tahoma; font-size: 12px; } + +a:link, a:visited { color: #8cf; } +a:hover { color: #ff8; } + +h1 { background-color: #456; color: #ff8; padding: 2px 5px; border: 1px solid; border-color: #678 #012 #012 #678; } + +/* syntax highlighting (used by the first combo defined for the CSS plugin) */ + +pre { margin: 0px 1em; padding: 5px 1em; background-color: #000; border: 1px dotted #02d; border-left: 2px solid #04f; } +.code { color: #f5deb3; } +.string { color: #00ffff; } +.comment { color: #8fbc8f; } +.variable-name { color: #fa8072; } +.type { color: #90ee90; font-weight: bold; } +.reference { color: #ee82ee; } +.preprocessor { color: #faf; } +.keyword { color: #ffffff; font-weight: bold; } +.function-name { color: #ace; } +.html-tag { font-weight: bold; } +.html-helper-italic { font-style: italic; } +.warning { color: #ffa500; font-weight: bold; } +.html-helper-bold { font-weight: bold; } + +/* info combo */ + +.quote { font-style: italic; color: #ee9; } +.highlight { background-color: yellow; color: #000; } +.deprecated { text-decoration: line-through; color: #aaa; } diff --git a/htmlarea/examples/full-page.html b/htmlarea/examples/full-page.html new file mode 100644 index 0000000..0411a04 --- /dev/null +++ b/htmlarea/examples/full-page.html @@ -0,0 +1,77 @@ + + + Test of FullPage plugin + + + + + + + + + + + +

Test of FullPage plugin

+ + + +
+
Mihai Bazon
+ + Last modified: Wed Aug 11 13:59:07 CEST 2004 + + + diff --git a/htmlarea/examples/fully-loaded.html b/htmlarea/examples/fully-loaded.html new file mode 100644 index 0000000..6bf937b --- /dev/null +++ b/htmlarea/examples/fully-loaded.html @@ -0,0 +1,262 @@ + + +Example of HTMLArea 3.0 + + + + + + + + + + + + + + + + + + + + + +

HTMLArea 3.0

+ +

A replacement for TEXTAREA elements. © InteractiveTools.com, 2003-2004.

+ +
+ + + +

+ + + + + +submit + + + +

+ + + diff --git a/htmlarea/examples/index.html b/htmlarea/examples/index.html new file mode 100644 index 0000000..e7636d7 --- /dev/null +++ b/htmlarea/examples/index.html @@ -0,0 +1,29 @@ + + +HTMLArea examples index + + + +

HTMLArea: auto-generated examples index

+ +
    +% while (<*.html>) { +% next if /^index.html$/; +
  • + <% $_ %> +
  • +% } +
+ +
+
mihai_bazon@yahoo.com
+ Last modified: Sun Feb 1 13:30:39 EET 2004 + + +<%INIT> +my $dir = $m->interp->comp_root; +$dir =~ s{/+$}{}g; +#$dir =~ s{/[^/]+$}{}g; +$dir .= $m->current_comp->dir_path; +chdir $dir; + diff --git a/htmlarea/examples/spell-checker.html b/htmlarea/examples/spell-checker.html new file mode 100644 index 0000000..06c71a3 --- /dev/null +++ b/htmlarea/examples/spell-checker.html @@ -0,0 +1,132 @@ + + +Example of HTMLArea 3.0 + + + + + + + + + + + + + + + + + +

HTMLArea 3.0

+ +

A replacement for TEXTAREA elements. © InteractiveTools.com, 2003-2004.

+ +

Plugins: + SpellChecker (sponsored by American Bible Society). +

+ +
+ + + +

+ + + + + +submit + + + +

+ + + diff --git a/htmlarea/examples/table-operations.html b/htmlarea/examples/table-operations.html new file mode 100644 index 0000000..e5545ba --- /dev/null +++ b/htmlarea/examples/table-operations.html @@ -0,0 +1,116 @@ + + +Example of HTMLArea 3.0 + + + + + + + + + + + + + + + + + +

HTMLArea 3.0

+ +

A replacement for TEXTAREA elements. © InteractiveTools.com, 2003-2004.

+ +

Page that demonstrates the additional features of the +TableOperations plugin (sponsored by Zapatec Inc.).

+ +
+ + + +

+ + + + + +submit + + + +

+ + + diff --git a/htmlarea/htmlarea.css b/htmlarea/htmlarea.css new file mode 100644 index 0000000..a7c6b95 --- /dev/null +++ b/htmlarea/htmlarea.css @@ -0,0 +1,180 @@ +.htmlarea { background: #fff; } + +.htmlarea .toolbar { + cursor: default; + background: ButtonFace; + padding: 3px; + border: 1px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; +} +.htmlarea .toolbar table { font-family: tahoma,verdana,sans-serif; font-size: 11px; } +.htmlarea .toolbar img { border: none; } +.htmlarea .toolbar .label { padding: 0px 3px; } + +.htmlarea .toolbar .button { + background: ButtonFace; + color: ButtonText; + border: 1px solid ButtonFace; + padding: 1px; + margin: 0px; + width: 18px; + height: 18px; +} +.htmlarea .toolbar .buttonHover { + border: 1px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; +} +.htmlarea .toolbar .buttonActive, .htmlarea .toolbar .buttonPressed { + padding: 2px 0px 0px 2px; + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} +.htmlarea .toolbar .buttonPressed { + background: ButtonHighlight; +} +.htmlarea .toolbar .indicator { + padding: 0px 3px; + overflow: hidden; + width: 20px; + text-align: center; + cursor: default; + border: 1px solid ButtonShadow; +} + +.htmlarea .toolbar .buttonDisabled img { + filter: gray() alpha(opacity = 25); + -moz-opacity: 0.25; +} + +.htmlarea .toolbar .separator { + position: relative; + margin: 3px; + border-left: 1px solid ButtonShadow; + border-right: 1px solid ButtonHighlight; + width: 0px; + height: 16px; + padding: 0px; +} + +.htmlarea .toolbar .space { width: 5px; } + +.htmlarea .toolbar select { font: 11px Tahoma,Verdana,sans-serif; } + +.htmlarea .toolbar select, +.htmlarea .toolbar select:hover, +.htmlarea .toolbar select:active { background: FieldFace; color: ButtonText; } + +.htmlarea .statusBar { + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; + padding: 2px 4px; + background-color: ButtonFace; + color: ButtonText; + font: 11px Tahoma,Verdana,sans-serif; +} + +.htmlarea .statusBar .statusBarTree a { + padding: 2px 5px; + color: #00f; +} + +.htmlarea .statusBar .statusBarTree a:visited { color: #00f; } +.htmlarea .statusBar .statusBarTree a:hover { + background-color: Highlight; + color: HighlightText; + padding: 1px 4px; + border: 1px solid HighlightText; +} + + +/* Hidden DIV popup dialogs (PopupDiv) */ + +.dialog { + color: ButtonText; + background: ButtonFace; +} + +.dialog .content { padding: 2px; } + +.dialog, .dialog button, .dialog input, .dialog select, .dialog textarea, .dialog table { + font: 11px Tahoma,Verdana,sans-serif; +} + +.dialog table { border-collapse: collapse; } + +.dialog .title { + background: #008; + color: #ff8; + border-bottom: 1px solid #000; + padding: 1px 0px 2px 5px; + font-size: 12px; + font-weight: bold; + cursor: default; +} + +.dialog .title .button { + float: right; + border: 1px solid #66a; + padding: 0px 1px 0px 2px; + margin-right: 1px; + color: #fff; + text-align: center; +} + +.dialog .title .button-hilite { border-color: #88f; background: #44c; } + +.dialog button { + width: 5em; + padding: 0px; +} + +.dialog .buttonColor { + padding: 1px; + cursor: default; + border: 1px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; +} + +.dialog .buttonColor-hilite { + border-color: #000; +} + +.dialog .buttonColor .chooser, .dialog .buttonColor .nocolor { + height: 0.6em; + border: 1px solid; + padding: 0px 1em; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} + +.dialog .buttonColor .nocolor { padding: 0px; } +.dialog .buttonColor .nocolor-hilite { background-color: #fff; color: #f00; } + +.dialog .label { text-align: right; width: 6em; } +.dialog .value input { width: 100%; } +.dialog .buttons { text-align: right; padding: 2px 4px 0px 4px; } + +.dialog legend { font-weight: bold; } +.dialog fieldset table { margin: 2px 0px; } + +.popupdiv { + border: 2px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; +} + +.popupwin { + padding: 0px; + margin: 0px; +} + +.popupwin .title { + background: #fff; + color: #000; + font-weight: bold; + font-size: 120%; + padding: 3px 10px; + margin-bottom: 10px; + border-bottom: 1px solid black; + letter-spacing: 2px; +} + +form { margin: 0px; border: none; } diff --git a/htmlarea/htmlarea.js b/htmlarea/htmlarea.js new file mode 100644 index 0000000..f22e114 --- /dev/null +++ b/htmlarea/htmlarea.js @@ -0,0 +1,2530 @@ +// htmlArea v3.0 - Copyright (c) 2003-2004 dynarch.com +// 2002-2003 interactivetools.com, inc. +// This copyright notice MUST stay intact for use (see license.txt). +// +// A free WYSIWYG editor replacement for + +
+
Mihai Bazon
+ + +Last modified on Sat Oct 25 01:06:59 2003 + + + + diff --git a/htmlarea/plugins/TableOperations/img/cell-delete.gif b/htmlarea/plugins/TableOperations/img/cell-delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..df9594f44f8dbf6b910b66ae2ff5cb35495fbcd6 GIT binary patch literal 101 zcmZ?wbhEHb6k-r!SjYeZ|A7EZD*j|)WME)s&;f~ppn)TKkU`Oy~SG?aZxx}>{(YF> z`B+JrKS}gjjC*KO0^35@IT`A`iVut$c$WLdCLdCGU>Ut$e3xd9L4VrgUnvdzk8`|I IRTvno0nX7beExx}>-aR()r=UupZ`P|&?8O&f4BeeTy_fY?nvg1dtY;4is z1{uPThBAOKf`k(yf=HqWILtwZJLCvQI?B=WOrYTE!3ZIRYOH_-81R4s5y(IVkgx<3 zo=_qZnWzK`R$##kDnua*RRCyX9r^%aj8+!dTbhwZH_8~sG?uYzJKf==$RLxf9^f<| zS$E1A&UBWuNt#BfixNXjvBYL>G5S5IU<5N*!Ir~v4E3avk<4TzTO%trk{4BsViv22 zp>B_p4|x=Wvr#=*RHfQ8D>ZZP=2DchR3(gi(e&EwE@}_ku6Aa) zXg0KP8xzAaEz8=R_F)L*956BDX(fi==0i32fgPUdS>9qa@21#n#zLV?HS)L_7DHc; zv1LSNWJQBFPLJ&FF6>gdJAeM_tFzQ4V(XA2zyLFu%*@RH|Nj600RR90A^8LW000L7 zEC2ui01^Na000AEc)Hx~Cdw1SJ4Wbj>dV=tc?~Fpnh%_>bN&{gfC0MUhg`r>oc(+HWmg@z8pGoa>g~b}i&Uo{^l!w!pw*E?| J`l$yA06RU|K-&NS literal 0 HcmV?d00001 diff --git a/htmlarea/plugins/TableOperations/img/cell-split.gif b/htmlarea/plugins/TableOperations/img/cell-split.gif new file mode 100644 index 0000000000000000000000000000000000000000..8bd011e1941e0b7293404abf1692a0f59ef590d0 GIT binary patch literal 907 zcmW+#J!qC;47`>O?I1!yCx_IfA`V&{6hRLKwc?=Q&@rNe=p-VzdEzE@u$#EVA6#4t zIy$7{pl-Seg26#?6E~^ynWur5=lk*|x!m3Jo?1S6=~H2_+(tiAtbg1s1%ZLKL!41%Nizp$`zoXk~%Dr5R~-ql{rpV;Q@)(;ZHV3^K{; z0Z#Lgb*G%+OlLWpq-m78C^5toOKj#Aqu+xHMlgdFY&k5)P){lu$xK$VHL_wOc~QkE zX0eJG>h?JKkVi2{tDsiRY+$=drZALzO|RYVqV}-u zYG;OvWR$};VK2&ob*x{L;xjEELLABafS5 zG4%BqTSjC?Ry26y^vLe+!p`Mn^H;<(Nt3=T6HK;_KKob4!k?Kb;2-w&%l;zff!QnA zoZEGJJvQ#nZceSdTYr24(^G#p7q5SNdvE8$-q%+iTsn1s`-!F1TOYq3yFGLE$%VPK zr_0lelZ}I)*LL4|bm+!B-tYf@_ThnR)8`)kzI^`n@tb>hoO$(g`SH=GpH}xQU4HXo L<>l3FvpDh}Kw5Uq literal 0 HcmV?d00001 diff --git a/htmlarea/plugins/TableOperations/img/col-delete.gif b/htmlarea/plugins/TableOperations/img/col-delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..565afdc523b9d3afb789d43afa8c647e614b9f84 GIT binary patch literal 100 zcmZ?wbhEHb6k-r!SjYeZ|A7EZD*j|)WME)s&;f~pt8#2}(dY`SWJwcVvvSkEwbJ?-Hg#%>JWO$Z*7MV@XEU-p2^d;t%Ly@9 F0{~hZC+PqH literal 0 HcmV?d00001 diff --git a/htmlarea/plugins/TableOperations/img/col-insert-before.gif b/htmlarea/plugins/TableOperations/img/col-insert-before.gif new file mode 100644 index 0000000000000000000000000000000000000000..9be8a6e4e92682c94a05aefc4953688cc43657e7 GIT binary patch literal 110 zcmZ?wbhEHb6k-r!IK%(~4;vc(|Nqax(7*tsU_kLF3nK#qJA)2L1xPIevvI|)JO4g3 zIyCN3I9KJ`=AhAaPQcc=$|!U9ru^h%$A7G4P!#x{`O>zxPyBaf*I|WRNpA)QYXGI3 BEn@%x literal 0 HcmV?d00001 diff --git a/htmlarea/plugins/TableOperations/img/col-split.gif b/htmlarea/plugins/TableOperations/img/col-split.gif new file mode 100644 index 0000000000000000000000000000000000000000..83f21d14b3bfffbb1f9ec1695cc7474a9f5b7bba GIT binary patch literal 908 zcmW+#J&cZF5S%*-DsqL0DE1nchyqa%g-Im1T5~YOLC{SLZ;mBv7+vLsjef#e2?94px>G@Mfk6oI<41QpQHXm&s>VHype9jkZ z>omAQhA^a|3?Pgk;e?1Fk|+WWbI{=qIl_^Sa`ZeCD7bnsLP((+D_{WzJfJ`XGEe~| zEWv~)l!!zoDuIF(Snz@hQOH6S0NPlGK0p|wl?C>eW~9-LGKMjYW$fBccQ`3B$Rw)= zIL$}aopOdVo#kwjrcvsm#1K;~v6)+peh(@b!3J*i|QGg-;j$cl~RMHQo% z#VTT`+vDUz9>pN7f?74Rf$b)l!jz^mVXzqs`BHu{^)(+`x=XHbrK`M0c6S$c zZbV2amDEmHsQGxOLJ`VPh1woVHA(NfRHQOhsrJlD&D^`W6s0Ux3FBTgy>`2c+QYW1 zof$5g4K3Wp#IQ`uvNorE7y>y5ObmHiiQ%{TP|bZ{hi7`0w;0X4DK?w2P$*N4JZ^@? z(AQ&Z8Ic)T(cq2KBfGl`JC~D<^@t@&lfEnyOg4```&Y;8@2yk7KOE?n{YA_G+pb|_ z``$Av@#fC9jj0RoR-T^3^wi&txtrhK-rF_1|Mk^}mrp;~aq{r}TOYrkxV?4Z+4=2@ z&*!J-CU1^>T70(lXzu2pE$*pv#mSd y-ZH$X!ONt?@^V#DTY;4BZl(`^&sDL@Kl$NQ6En|0!_Y>n?o{Vz&RQ`B25SKFr6l_R literal 0 HcmV?d00001 diff --git a/htmlarea/plugins/TableOperations/img/row-insert-above.gif b/htmlarea/plugins/TableOperations/img/row-insert-above.gif new file mode 100644 index 0000000000000000000000000000000000000000..e39c948b03c050f19b1165fae710d356ca093620 GIT binary patch literal 116 zcmZ?wbhEHb6k-r!IK;rf@c%ypL(9X4hW{W2kOu{dKUo+V7}yzffPz4kLJSPdmKD41 z{4-#4&6@gIz`%k>!J|aht#F=8-$->CMz|NopIqJG?&1io(5i?@5`Iya(B;rVe$O@nHw{h!4^hn@6q0&{wHO}X1@Be zO@kX`2tyjm0Ky0oPKXF1i6Y=I2OaK^BOK`{N6#~Xf~yB3gcPc=0v2Gv0}4bS0~J8R z5=?kPiAZFk5-3=K1uv)&g)CG7ppA9t1B5YJSzvEzMjG8HV;Iv|#;)yjhm#_MOtN}_ z(|lyzDQ7s-S5s8ur?*lv<3Olc|;2Ai>vk98WkL3*BAU-Pl0yW|R2y2^WGcXwgu zMue17N$rG%nvZuX6rl`NsO_;-lk~1jMJiL3YR|0H%)OgSQOZ)4Fz!XuYqz_oJ#4$$ znc-ZKb+{7{YA_GQ`fLF zefZ*fe7HZgGr794{$c_9CV!vJFCF=K@6hb=_sfrNep)`TFt_sa_w~=K$FAJnTz+%w v!pgzvjpvK2dFkQY(y60QPHugD%G*DF-FdtA?eXbz4=!)Kd;NWFGQrvZ{*!eQ literal 0 HcmV?d00001 diff --git a/htmlarea/plugins/TableOperations/img/table-prop.gif b/htmlarea/plugins/TableOperations/img/table-prop.gif new file mode 100644 index 0000000000000000000000000000000000000000..e15a4a4445482677100bdebe0c8b5d621c14f438 GIT binary patch literal 145 zcmZ?wbhEHb6k-r!Sj5J_z|e5uzySv1ng9R)KXc{`kPl=4NyVQmj0_BH3_3tIP^Az9 z19Mo$t~>8ky_gRetG4r`;<20bf&ea313?Kh<{UyJ%Ls@}L6JL%-jsWo{X3=Gx)=N>w3 literal 0 HcmV?d00001 diff --git a/htmlarea/plugins/TableOperations/lang/cz.js b/htmlarea/plugins/TableOperations/lang/cz.js new file mode 100644 index 0000000..d407dae --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/cz.js @@ -0,0 +1,90 @@ +// I18N constants + +// LANG: "cz", ENCODING: UTF-8 | ISO-8859-2 +// Author: Jiri Löw, + +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +TableOperations.I18N = { + "Align": "Zarovnání", + "All four sides": "VÅ¡echny čtyři strany", + "Background": "Pozadí", + "Baseline": "Základní linka", + "Border": "Obrys", + "Borders": "Obrysy", + "Bottom": "Dolů", + "CSS Style": "Kaskádové styly (CSS)", + "Caption": "Titulek", + "Cell Properties": "Vlastnosti buňky", + "Center": "Na střed", + "Char": "Znak", + "Collapsed borders": "Stlačené okraje", + "Color": "Barva", + "Description": "Popis", + "FG Color": "Barva popředí", + "Float": "Obtékání", + "Frames": "Rámečky", + "Height": "Výška", + "How many columns would you like to merge?": "Kolik sloupců si přejete spojit?", + "How many rows would you like to merge?": "Kolik řádků si přejete spojit?", + "Image URL": "Adresa obrázku", + "Justify": "Do stran", + "Layout": "Rozložení", + "Left": "Vlevo", + "Margin": "Okraj", + "Middle": "Na střed", + "No rules": "Žádné čáry", + "No sides": "Žádné strany", + "None": "Žádné", + "Padding": "Odsazování", + "Please click into some cell": "Prosím klikněte do některé buňky", + "Right": "Vpravo", + "Row Properties": "Vlastnosti řádku", + "Rules will appear between all rows and columns": "Čáry mezi vÅ¡emi řádky i sloupci", + "Rules will appear between columns only": "Čáry pouze mezi sloupci", + "Rules will appear between rows only": "Čáry pouze mezi řádky", + "Rules": "Čáry", + "Spacing and padding": "Mezery a odsazování", + "Spacing": "Mezery", + "Summary": "Shrnutí", + "TO-cell-delete": "Smazat buňku", + "TO-cell-insert-after": "Vložit buňku za", + "TO-cell-insert-before": "Vložit buňku před", + "TO-cell-merge": "Spojit buňky", + "TO-cell-prop": "Vlastnosti buňky", + "TO-cell-split": "Rozdělit buňku", + "TO-col-delete": "Smazat sloupec", + "TO-col-insert-after": "Vložit sloupec za", + "TO-col-insert-before": "Vložit sloupec před", + "TO-col-split": "Rozdělit sloupec", + "TO-row-delete": "Smazat řádek", + "TO-row-insert-above": "Smazat řádek nad", + "TO-row-insert-under": "Smazat řádek pod", + "TO-row-prop": "Vlastnosti řádku", + "TO-row-split": "Rozdělit řádek", + "TO-table-prop": "Vlastnosti tabulky", + "Table Properties": "Vlastnosti tabulky", + "Text align": "Zarovnání textu", + "The bottom side only": "Pouze spodní strana", + "The left-hand side only": "Pouze levá strana", + "The right and left sides only": "Pouze levá a pravá strana", + "The right-hand side only": "Pouze pravá strana", + "The top and bottom sides only": "Pouze horní a dolní strana", + "The top side only": "Pouze horní strana", + "Top": "Nahoru", + "Unset color": "ZruÅ¡it barvu", + "Vertical align": "Svislé zarovnání", + "Width": "Šířka", + "not-del-last-cell": "HTMLArea zbaběle odmítá smazat poslední buňku v řádku.", + "not-del-last-col": "HTMLArea zbaběle odmítá smazat poslední sloupec v tabulce.", + "not-del-last-row": "HTMLArea zbaběle odmítá smazat poslední řádek v tabulce.", + "percent": "procent", + "pixels": "pixelů" +}; diff --git a/htmlarea/plugins/TableOperations/lang/da.js b/htmlarea/plugins/TableOperations/lang/da.js new file mode 100644 index 0000000..08a6f1b --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/da.js @@ -0,0 +1,90 @@ +// I18N constants + +// LANG: "da", ENCODING: UTF-8 | ISO-8859-1 +// Author: Steen Sønderup, + +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +TableOperations.I18N = { + "Align": "Placer", + "All four sides": "Alle fire sider", + "Background": "Baggrund", + "Baseline": "Bundlinie", + "Border": "Kant", + "Borders": "Kanter", + "Bottom": "Bund", + "CSS Style": "Stil [CSS]", + "Caption": "Titel", + "Cell Properties": "Celle egenskaber", + "Center": "Centrer", + "Char": "Plads", + "Collapsed borders": "Sammensmelt rammer", + "Color": "Farve", + "Description": "Beskrivelse", + "FG Color": "Font farve", + "Float": "Justering", + "Frames": "Udvendig", + "Height": "Højde", + "How many columns would you like to merge?": "Hvor mange kollonner vil du samle?", + "How many rows would you like to merge?": "Hvor mange rækker vil du samle?", + "Image URL": "Billede URL", + "Justify": "Lige margener", + "Layout": "Opsætning", + "Left": "Venstre", + "Margin": "Margen", + "Middle": "Centrer", + "No rules": "Ingen rammer", + "No sides": "Ingen sider", + "None": "Ingen", + "Padding": "Margen", + "Please click into some cell": "Klik pÃ¥ en celle", + "Right": "Højre", + "Row Properties": "Række egenskaber", + "Rules will appear between all rows and columns": "Rammer mellem rækker og kolonner", + "Rules will appear between columns only": "Kun rammer mellem kolonner", + "Rules will appear between rows only": "Kun rammer mellem rækker", + "Rules": "Invendig", + "Spacing and padding": "Afstand og margen", + "Spacing": "Afstand", + "Summary": "Beskrivelse", + "TO-cell-delete": "Slet celle", + "TO-cell-insert-after": "Indsæt celle efter", + "TO-cell-insert-before": "Indsæt celle før", + "TO-cell-merge": "Sammensæt celler", + "TO-cell-prop": "Celle egenskaber", + "TO-cell-split": "Opdel celle", + "TO-col-delete": "Slet kollonne", + "TO-col-insert-after": "Indsæt kolonne efter", + "TO-col-insert-before": "Indsæt kolonne før", + "TO-col-split": "Opdel kolonne", + "TO-row-delete": "Slet række", + "TO-row-insert-above": "Indsæt række før", + "TO-row-insert-under": "Indsæt række efter", + "TO-row-prop": "Række egenskaber", + "TO-row-split": "Opdel række", + "TO-table-prop": "Tabel egenskaber", + "Table Properties": "Tabel egenskaber", + "Text align": "Tekst", + "The bottom side only": "Kun i bunden", + "The left-hand side only": "Kun i højre side", + "The right and left sides only": "Kun i siderne", + "The right-hand side only": "Kun i venstre side", + "The top and bottom sides only": "Kun i top og bund", + "The top side only": "Kun i toppen", + "Top": "Top", + "Unset color": "Farve ikke valgt", + "Vertical align": "Vertikal placering", + "Width": "Bredde", + "not-del-last-cell": "Du kan ikke slette den sidste celle i en række.", + "not-del-last-col": "Du kan ikke slette den sidste kolonne i en tabel.", + "not-del-last-row": "Du kan ikke slette den sidste række i en tabel.", + "percent": "procent", + "pixels": "pixel" +}; diff --git a/htmlarea/plugins/TableOperations/lang/de.js b/htmlarea/plugins/TableOperations/lang/de.js new file mode 100644 index 0000000..1128cff --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/de.js @@ -0,0 +1,81 @@ +// I18N constants + +// LANG: "de", ENCODING: UTF-8 | ISO-8859-1 +// Author: broxx, + +TableOperations.I18N = { + "Align": "Ausrichten", + "All four sides": "Alle 4 Seiten", + "Background": "Hintergrund", + "Baseline": "Basislinie", + "Border": "Rand", + "Borders": "Raender", + "Bottom": "Unten", + "CSS Style": "Style [CSS]", + "Caption": "Ueberschrift", + "Cell Properties": "Zellen", + "Center": "Zentrieren", + "Char": "Zeichen", + "Collapsed borders": "Collapsed borders", + "Color": "Farbe", + "Description": "Beschreibung", + "FG Color": "FG Farbe", + "Float": "Ausrichtung", + "Frames": "Rahmen", + "Height": "Hoehe", + "How many columns would you like to merge?": "Wieviele Spalten willst du verbinden?", + "How many rows would you like to merge?": "Wieviele Zeilen willst du verbinden?", + "Image URL": "Bild URL", + "Justify": "Justieren", + "Layout": "Layout", + "Left": "Links", + "Margin": "Rand", + "Middle": "Mitte", + "No rules": "Keine Balken", + "No sides": "Keine Seiten", + "None": "Keine", + "Padding": "Auffuellung", + "Please click into some cell": "Waehle eine Zelle", + "Right": "Rechts", + "Row Properties": "Reihen", + "Rules will appear between all rows and columns": "Balken zwischen Reihen und Spalten", + "Rules will appear between columns only": "Balken zwischen Spalten", + "Rules will appear between rows only": "Balken zwischen Reihen", + "Rules": "Balken", + "Spacing and padding": "Abstaende", + "Spacing": "Abstand", + "Summary": "Zusammenfassung", + "TO-cell-delete": "Zelle loeschen", + "TO-cell-insert-after": "Zelle einfuegen nach", + "TO-cell-insert-before": "Zelle einfuegen bevor", + "TO-cell-merge": "Zellen zusammenfuegen", + "TO-cell-prop": "Zelleinstellungen", + "TO-cell-split": "Zellen aufteilen", + "TO-col-delete": "Spalte loeschen", + "TO-col-insert-after": "Spalte einfuegen nach", + "TO-col-insert-before": "Spalte einfuegen bevor", + "TO-col-split": "Spalte aufteilen", + "TO-row-delete": "Reihe loeschen", + "TO-row-insert-above": "Reihe einfuegen vor", + "TO-row-insert-under": "Reihe einfuegen nach", + "TO-row-prop": "Reiheneinstellungen", + "TO-row-split": "Reihen aufteilen", + "TO-table-prop": "Tabelle", + "Table Properties": "Tabelle", + "Text align": "Ausrichtung", + "The bottom side only": "Nur untere Seite", + "The left-hand side only": "Nur linke Seite", + "The right and left sides only": "Nur linke und rechte Seite", + "The right-hand side only": "Nur rechte Seite", + "The top and bottom sides only": "Nur obere und untere Seite", + "The top side only": "Nur obere Seite", + "Top": "Oben", + "Unset color": "Farbe", + "Vertical align": "Ausrichtung", + "Width": "Breite", + "not-del-last-cell": "Letzte Zelle in dieser Reihe!", + "not-del-last-col": "Letzte Spalte in dieser Tabelle!", + "not-del-last-row": "Letzte Reihe in dieser Tabelle", + "percent": "%", + "pixels": "pixels" +}; diff --git a/htmlarea/plugins/TableOperations/lang/el.js b/htmlarea/plugins/TableOperations/lang/el.js new file mode 100644 index 0000000..06bae5c --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/el.js @@ -0,0 +1,81 @@ +// I18N constants + +// LANG: "el", ENCODING: UTF-8 | ISO-8859-7 +// Author: Dimitris Glezos, dimitris@glezos.com + +TableOperations.I18N = { + "Align": "Στοίχηση", + "All four sides": "Και οι 4 πλευρές", + "Background": "Φόντο", + "Baseline": "Baseline", + "Border": "Περίγραμμα", + "Borders": "Περιγράμματα", + "Bottom": "Κάτω μέρος", + "CSS Style": "Στυλ [CSS]", + "Caption": "Λεζάντα", + "Cell Properties": "Ιδιότητες Κελιού", + "Center": "Κέντρο", + "Char": "Χαρακτήρας", + "Collapsed borders": "Συμπτυγμένα περιγράμματα", + "Color": "Χρώμα", + "Description": "Περιγραφή", + "FG Color": "Χρώμα αντικειμένων", + "Float": "Float", + "Frames": "Frames", + "Height": "Ύψος", + "How many columns would you like to merge?": "Πόσες στήλες θέλετε να ενώσετε;", + "How many rows would you like to merge?": "Πόσες γραμμές θέλετε να ενώσετε;", + "Image URL": "URL εικόνας", + "Justify": "Πλήρης στοίχηση", + "Layout": "Διάταξη", + "Left": "Αριστερά", + "Margin": "Περιθώριο", + "Middle": "Κέντρο", + "No rules": "Χωρίς Γραμμές", + "No sides": "No sides", + "None": "Τίποτα", + "Padding": "Εσοχή", + "Please click into some cell": "Κάντε κλικ μέσα σε κάποιο κελί", + "Right": "Δεξιά", + "Row Properties": "Ιδιότητες Γραμμής", + "Rules will appear between all rows and columns": "Γραμμές θα εμφανίζονται μεταξύ όλων των γραμμών και στηλών", + "Rules will appear between columns only": "Γραμμές θα εμφανίζονται μόνο μεταξύ στηλών", + "Rules will appear between rows only": "Γραμμές θα εμφανίζονται μόνο μεταξύ γραμμών", + "Rules": "Γραμμές", + "Spacing and padding": "Αποστάσεις και εσοχές", + "Spacing": "Αποστάσεις", + "Summary": "Σύνοψη", + "TO-cell-delete": "Διαγραφή κελιού", + "TO-cell-insert-after": "Εισαγωγή κελιού μετά", + "TO-cell-insert-before": "Εισαγωγή κελιού πριν", + "TO-cell-merge": "Συγχώνευση κελιών", + "TO-cell-prop": "Ιδιότητες κελιού", + "TO-cell-split": "Διαίρεση κελιού", + "TO-col-delete": "Διαγραφή στήλης", + "TO-col-insert-after": "Εισαγωγή στήλης μετά", + "TO-col-insert-before": "Εισαγωγή στήλης πριν", + "TO-col-split": "Διαίρεση στήλης", + "TO-row-delete": "Διαγραφή γραμμής", + "TO-row-insert-above": "Εισαγωγή γραμμής μετά", + "TO-row-insert-under": "Εισαγωγή γραμμής πριν", + "TO-row-prop": "Ιδιότητες γραμμής", + "TO-row-split": "Διαίρεση γραμμής", + "TO-table-prop": "Ιδιότητες πίνακα", + "Table Properties": "Ιδιότητες πίνακα", + "Text align": "Στοίχηση κειμένου", + "The bottom side only": "Η κάτω πλευρά μόνο", + "The left-hand side only": "Η αριστερή πλευρά μόνο", + "The right and left sides only": "Οι δεξιές και αριστερές πλευρές μόνο", + "The right-hand side only": "Η δεξιά πλευρά μόνο", + "The top and bottom sides only": "Οι πάνω και κάτω πλευρές μόνο", + "The top side only": "Η πάνω πλευρά μόνο", + "Top": "Πάνω", + "Unset color": "Αναίρεση χρώματος", + "Vertical align": "Κατακόρυφη στοίχηση", + "Width": "Πλάτος", + "not-del-last-cell": "Δεν μπορεί να διαγραφεί το τελευταίο κελί σε μια γραμμή.", + "not-del-last-col": "Δεν μπορεί να διαγραφεί η τελευταία στήλη σε ένα πίνακα.", + "not-del-last-row": "Δεν μπορεί να διαγραφεί η τελευταία γραμμή σε ένα πίνακα.", + "percent": "τοις εκατόν", + "pixels": "pixels" +}; diff --git a/htmlarea/plugins/TableOperations/lang/en.js b/htmlarea/plugins/TableOperations/lang/en.js new file mode 100644 index 0000000..7168e09 --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/en.js @@ -0,0 +1,90 @@ +// I18N constants + +// LANG: "en", ENCODING: UTF-8 | ISO-8859-1 +// Author: Mihai Bazon, http://dynarch.com/mishoo + +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +TableOperations.I18N = { + "Align": "Align", + "All four sides": "All four sides", + "Background": "Background", + "Baseline": "Baseline", + "Border": "Border", + "Borders": "Borders", + "Bottom": "Bottom", + "CSS Style": "Style [CSS]", + "Caption": "Caption", + "Cell Properties": "Cell Properties", + "Center": "Center", + "Char": "Char", + "Collapsed borders": "Collapsed borders", + "Color": "Color", + "Description": "Description", + "FG Color": "FG Color", + "Float": "Float", + "Frames": "Frames", + "Height": "Height", + "How many columns would you like to merge?": "How many columns would you like to merge?", + "How many rows would you like to merge?": "How many rows would you like to merge?", + "Image URL": "Image URL", + "Justify": "Justify", + "Layout": "Layout", + "Left": "Left", + "Margin": "Margin", + "Middle": "Middle", + "No rules": "No rules", + "No sides": "No sides", + "None": "None", + "Padding": "Padding", + "Please click into some cell": "Please click into some cell", + "Right": "Right", + "Row Properties": "Row Properties", + "Rules will appear between all rows and columns": "Rules will appear between all rows and columns", + "Rules will appear between columns only": "Rules will appear between columns only", + "Rules will appear between rows only": "Rules will appear between rows only", + "Rules": "Rules", + "Spacing and padding": "Spacing and padding", + "Spacing": "Spacing", + "Summary": "Summary", + "TO-cell-delete": "Delete cell", + "TO-cell-insert-after": "Insert cell after", + "TO-cell-insert-before": "Insert cell before", + "TO-cell-merge": "Merge cells", + "TO-cell-prop": "Cell properties", + "TO-cell-split": "Split cell", + "TO-col-delete": "Delete column", + "TO-col-insert-after": "Insert column after", + "TO-col-insert-before": "Insert column before", + "TO-col-split": "Split column", + "TO-row-delete": "Delete row", + "TO-row-insert-above": "Insert row before", + "TO-row-insert-under": "Insert row after", + "TO-row-prop": "Row properties", + "TO-row-split": "Split row", + "TO-table-prop": "Table properties", + "Table Properties": "Table Properties", + "Text align": "Text align", + "The bottom side only": "The bottom side only", + "The left-hand side only": "The left-hand side only", + "The right and left sides only": "The right and left sides only", + "The right-hand side only": "The right-hand side only", + "The top and bottom sides only": "The top and bottom sides only", + "The top side only": "The top side only", + "Top": "Top", + "Unset color": "Unset color", + "Vertical align": "Vertical align", + "Width": "Width", + "not-del-last-cell": "HTMLArea cowardly refuses to delete the last cell in row.", + "not-del-last-col": "HTMLArea cowardly refuses to delete the last column in table.", + "not-del-last-row": "HTMLArea cowardly refuses to delete the last row in table.", + "percent": "percent", + "pixels": "pixels" +}; diff --git a/htmlarea/plugins/TableOperations/lang/fi.js b/htmlarea/plugins/TableOperations/lang/fi.js new file mode 100644 index 0000000..891f168 --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/fi.js @@ -0,0 +1,66 @@ +TableOperations.I18N = { + "Align": "Kohdistus", + "All four sides": "Kaikki neljä sivua", + "Background": "Tausta", + "Baseline": "Takaraja", + "Border": "Reuna", + "Borders": "Reunat", + "Bottom": "Alle", + "CSS Style": "Tyyli [CSS]", + "Caption": "Otsikko", + "Cell Properties": "Solun asetukset", + "Center": "Keskelle", + "Char": "Merkki", + "Collapsed borders": "Luhistetut reunat", + "Color": "Väri", + "Description": "Kuvaus", + "FG Color": "FG Väri", + "Frames": "Kehykset", + "Image URL": "Kuvan osoite", + "Layout": "Sommittelu", + "Left": "Vasen", + "Margin": "Marginaali", + "Middle": "Keskelle", + "No rules": "Ei viivoja", + "No sides": "Ei sivuja", + "Padding": "Palstantäyte", + "Right": "Oikea", + "Row Properties": "Rivin asetukset", + "Rules will appear between all rows and columns": "Viivat jokaisen rivin ja sarakkeen välillä", + "Rules will appear between columns only": "Viivat ainoastaan sarakkeiden välillä", + "Rules will appear between rows only": "Viivat ainoastaan rivien välillä", + "Rules": "Viivat", + "Spacing": "Palstatila", + "Summary": "Yhteenveto", + "TO-cell-delete": "Poista solu", + "TO-cell-insert-after": "Lisää solu perään", + "TO-cell-insert-before": "Lisää solu ennen", + "TO-cell-merge": "Yhdistä solut", + "TO-cell-prop": "Solun asetukset", + "TO-cell-split": "Jaa solu", + "TO-col-delete": "Poista sarake", + "TO-col-insert-after": "Lisää sarake perään", + "TO-col-insert-before": "Lisää sarake ennen", + "TO-col-split": "Jaa sarake", + "TO-row-delete": "Poista rivi", + "TO-row-insert-above": "Lisää rivi yläpuolelle", + "TO-row-insert-under": "Lisää rivi alapuolelle", + "TO-row-prop": "Rivin asetukset", + "TO-row-split": "Jaa rivi", + "TO-table-prop": "Taulukon asetukset", + "Top": "Ylös", + "Table Properties": "Taulukon asetukset", + "The bottom side only": "Ainoastaan alapuolelle", + "The left-hand side only": "Ainoastaan vasenreuna", + "The right and left sides only": "Oikea- ja vasenreuna", + "The right-hand side only": "Ainoastaan oikeareuna", + "The top and bottom sides only": "Ylä- ja alapuoli.", + "The top side only": "Ainoastaan yläpuoli", + "Vertical align": "Vertikaali kohdistus", + "Width": "Leveys", + "not-del-last-cell": "Ei voida poistaa viimeistä solua rivistä.", + "not-del-last-col": "Ei voida poistaa viimeistä saraketta taulusta.", + "not-del-last-row": "Ei voida poistaa viimeistä riviä taulusta.", + "percent": "prosenttia", + "pixels": "pikseliä" +}; diff --git a/htmlarea/plugins/TableOperations/lang/hu.js b/htmlarea/plugins/TableOperations/lang/hu.js new file mode 100644 index 0000000..828aec1 --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/hu.js @@ -0,0 +1,63 @@ +// I18N constants + +// LANG: "hu", ENCODING: UTF-8 +// Author: Miklós Somogyi, + +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +HTMLArea.I18N = { + + // the following should be the filename without .js extension + // it will be used for automatically load plugin language. + lang: "hu", + + tooltips: { + bold: "Félkövér", + italic: "Dőlt", + underline: "Aláhúzott", + strikethrough: "Áthúzott", + subscript: "Alsó index", + superscript: "Felső index", + justifyleft: "Balra zárt", + justifycenter: "Középre zárt", + justifyright: "Jobbra zárt", + justifyfull: "Sorkizárt", + orderedlist: "Számozott lista", + unorderedlist: "Számozatlan lista", + outdent: "Behúzás csökkentése", + indent: "Behúzás növelése", + forecolor: "Karakterszín", + hilitecolor: "Háttérszín", + horizontalrule: "Elválasztó vonal", + createlink: "Hiperhivatkozás beszúrása", + insertimage: "Kép beszúrása", + inserttable: "Táblázat beszúrása", + htmlmode: "HTML forrás be/ki", + popupeditor: "Szerkesztő külön ablakban", + about: "Névjegy", + showhelp: "Súgó", + textindicator: "Aktuális stílus", + undo: "Visszavonás", + redo: "Újra végrehajtás", + cut: "Kivágás", + copy: "Másolás", + paste: "Beillesztés" + }, + + buttons: { + "ok": "Rendben", + "cancel": "Mégsem" + }, + + msg: { + "Path": "Hierarchia", + "TEXT_MODE": "Forrás mód. Visszaváltás [<>] gomb" + } +}; diff --git a/htmlarea/plugins/TableOperations/lang/it.js b/htmlarea/plugins/TableOperations/lang/it.js new file mode 100644 index 0000000..ccbdc94 --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/it.js @@ -0,0 +1,81 @@ +// I18N constants + +// LANG: "it", ENCODING: UTF-8 | ISO-8859-1 +// Author: Fabio Rotondo + +TableOperations.I18N = { + "Align": "Allinea", + "All four sides": "Tutti e quattro i lati", + "Background": "Sfondo", + "Baseline": "Allineamento", + "Border": "Bordo", + "Borders": "Bordi", + "Bottom": "Basso", + "CSS Style": "Stile [CSS]", + "Caption": "Titolo", + "Cell Properties": "Proprietà della Cella", + "Center": "Centra", + "Char": "Carattere", + "Collapsed borders": "Bordi chiusi", + "Color": "Colore", + "Description": "Descrizione", + "FG Color": "Colore Principale", + "Float": "Fluttuante", + "Frames": "Frames", + "Height": "Altezza", + "How many columns would you like to merge?": "Quante colonne vuoi unire?", + "How many rows would you like to merge?": "Quante righe vuoi unire?", + "Image URL": "URL dell'Immagine", + "Justify": "Justifica", + "Layout": "Layout", + "Left": "Sinistra", + "Margin": "Margine", + "Middle": "Centrale", + "No rules": "Nessun righello", + "No sides": "Nessun lato", + "None": "Nulla", + "Padding": "Padding", + "Please click into some cell": "Per favore, clicca in una cella", + "Right": "Destra", + "Row Properties": "Proprietà della Riga", + "Rules will appear between all rows and columns": "Le linee appariranno tra tutte le righe e colonne", + "Rules will appear between columns only": "Le linee appariranno solo tra le colonne", + "Rules will appear between rows only": "Le linee appariranno solo tra le righe", + "Rules": "Linee", + "Spacing and padding": "Spaziatura e Padding", + "Spacing": "Spaziatura", + "Summary": "Sommario", + "TO-cell-delete": "Cancella cella", + "TO-cell-insert-after": "Inserisci cella dopo", + "TO-cell-insert-before": "Inserisci cella prima", + "TO-cell-merge": "Unisci celle", + "TO-cell-prop": "Proprietà della cella", + "TO-cell-split": "Dividi cella", + "TO-col-delete": "Cancella colonna", + "TO-col-insert-after": "Inserisci colonna dopo", + "TO-col-insert-before": "Inserisci colonna prima", + "TO-col-split": "Dividi colonna", + "TO-row-delete": "Cancella riga", + "TO-row-insert-above": "Inserisci riga prima", + "TO-row-insert-under": "Inserisci riga dopo", + "TO-row-prop": "Proprietà della riga", + "TO-row-split": "Dividi riga", + "TO-table-prop": "Proprietà della Tabella", + "Table Properties": "Proprietà della Tabella", + "Text align": "Allineamento del Testo", + "The bottom side only": "Solo la parte inferiore", + "The left-hand side only": "Solo la parte sinistra", + "The right and left sides only": "Solo destra e sinistra", + "The right-hand side only": "Solo la parte destra", + "The top and bottom sides only": "Solo sopra e sotto", + "The top side only": "Solo la parte sopra", + "Top": "Alto", + "Unset color": "Rimuovi colore", + "Vertical align": "Allineamento verticale", + "Width": "Larghezza", + "not-del-last-cell": "HTMLArea si rifiuta codardamente di cancellare l'ultima cella nella riga.", + "not-del-last-col": "HTMLArea si rifiuta codardamente di cancellare l'ultima colonna nella tabella.", + "not-del-last-row": "HTMLArea si rifiuta codardamente di cancellare l'ultima riga nella tabella.", + "percent": "percento", + "pixels": "pixels" +}; diff --git a/htmlarea/plugins/TableOperations/lang/nl.js b/htmlarea/plugins/TableOperations/lang/nl.js new file mode 100644 index 0000000..ce9eb30 --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/nl.js @@ -0,0 +1,90 @@ +// I18N constants + +// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1 +// Author: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl + +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +TableOperations.I18N = { + "Align": "Uitlijning", + "All four sides": "Alle 4 zijden", + "Background": "Achtergrond", + "Baseline": "Basis", + "Border": "Rand", + "Borders": "Randen", + "Bottom": "Onder", + "CSS Style": "CSS Style", + "Caption": "Opmerking", + "Cell Properties": "Celeigenschappen", + "Center": "Centreren", + "Char": "Karakter", + "Collapsed borders": "Geen randen", + "Color": "Kleur", + "Description": "Omschrijving", + "FG Color": "Voorgrond", + "Float": "Zwevend", + "Frames": "Frames", + "Height": "Hoogte", + "How many columns would you like to merge?": "Hoeveel kolommen wilt u samenvoegen?", + "How many rows would you like to merge?": "Hoeveel rijen wilt u samenvoegen?", + "Image URL": "Afbeelding URL", + "Justify": "Uitvullen", + "Layout": "Opmaak", + "Left": "Links", + "Margin": "Marge", + "Middle": "Midden", + "No rules": "Geen regels", + "No sides": "Geen zijlijnen", + "None": "Geen", + "Padding": "Celmarge", + "Please click into some cell": "Klik in een cel a.u.b.", + "Right": "Rechts", + "Row Properties": "Rijeigenschappen", + "Rules will appear between all rows and columns": "Regels verschijnen tussen alle rijen en kolommen", + "Rules will appear between columns only": "Regels verschijnen enkel tussen de kolommen", + "Rules will appear between rows only": "Regels verschijnen enkel tussen de rijen", + "Rules": "Regels", + "Spacing and padding": "Celmarge en afstand tussen cellen", + "Spacing": "marge", + "Summary": "Overzicht", + "TO-cell-delete": "Cel verwijderen", + "TO-cell-insert-after": "Voeg cel toe achter", + "TO-cell-insert-before": "Voeg cel toe voor", + "TO-cell-merge": "Cellen samenvoegen", + "TO-cell-prop": "Celeigenschappen", + "TO-cell-split": "Cel splitsen", + "TO-col-delete": "Kolom verwijderen", + "TO-col-insert-after": "Kolom invoegen achter", + "TO-col-insert-before": "Kolom invoegen voor", + "TO-col-split": "Kolom splitsen", + "TO-row-delete": "Rij verwijderen", + "TO-row-insert-above": "Rij invoegen boven", + "TO-row-insert-under": "Rij invoegen onder", + "TO-row-prop": "Rij eigenschappen", + "TO-row-split": "Rij splitsen", + "TO-table-prop": "Tabel eigenschappen", + "Table Properties": "Tabel eigenschappen", + "Text align": "Text uitlijning", + "The bottom side only": "Enkel aan de onderkant", + "The left-hand side only": "Enkel aan de linkerkant", + "The right and left sides only": "Enkel aan de linker en rechterkant", + "The right-hand side only": "Enkel aan de rechterkant", + "The top and bottom sides only": "Enkel aan de bovenen onderkant", + "The top side only": "Enkel aan de bovenkant", + "Top": "Boven", + "Unset color": "Wis kleur", + "Vertical align": "Vertikale uitlijning", + "Width": "Breedte", + "not-del-last-cell": "HTMLArea kan de laatste cel in deze tabel niet verwijderen.", + "not-del-last-col": "HTMLArea kan de laatste kolom in deze tabel niet verwijderen.", + "not-del-last-row": "HTMLArea kan de laatste rij in deze tabel niet verwijderen.", + "percent": "procent", + "pixels": "pixels" +}; diff --git a/htmlarea/plugins/TableOperations/lang/no.js b/htmlarea/plugins/TableOperations/lang/no.js new file mode 100644 index 0000000..91fc5e5 --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/no.js @@ -0,0 +1,91 @@ +// I18N constants + +// LANG: "en", ENCODING: UTF-8 | ISO-8859-1 +// Author: Mihai Bazon, +// translated into Norwegia: ses@online.no 11.11.03 + +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +TableOperations.I18N = { + "Align": "Juster", + "All four sides": "Alle fire sider", + "Background": "Bakgrund", + "Baseline": "Grunnlinje", + "Border": "Kantlinje", + "Borders": "Kantlinjer", + "Bottom": "Bunn", + "CSS Style": "Stil [CSS]", + "Caption": "Overskrift", + "Cell Properties": "Celleegenskaper", + "Center": "Sentrer", + "Char": "Tegn", + "Collapsed borders": "Fjern kantlinjer", + "Color": "Farge", + "Description": "Beskrivelse", + "FG Color": "FG farge", + "Float": "Flytende", + "Frames": "rammer", + "Height": "Høyde", + "How many columns would you like to merge?": "Hvor mange kolonner vil du slå sammen?", + "How many rows would you like to merge?": "Hvor mange rader vil du slå sammen?", + "Image URL": "Bildets URL", + "Justify": "Juster", + "Layout": "Layout", + "Left": "Venstre", + "Margin": "Marg", + "Middle": "Midten", + "No rules": "Ingen linjal", + "No sides": "Ingen sider", + "None": "Ingen", + "Padding": "Luft", + "Please click into some cell": "Klikk i en eller annen celle", + "Right": "Høyre", + "Row Properties": "Egenskaper for rad", + "Rules will appear between all rows and columns": "Linjer vil synes mellom alle rader og kolonner", + "Rules will appear between columns only": "Linjer vil synes kun mellom kolonner", + "Rules will appear between rows only": "Linjer vil synes kun mellom rader", + "Rules": "Linjer", + "Spacing and padding": "Luft", + "Spacing": "Luft", + "Summary": "Sammendrag", + "TO-cell-delete": "Slett celle", + "TO-cell-insert-after": "Sett inn celle etter", + "TO-cell-insert-before": "Sett inn celle foran", + "TO-cell-merge": "Slå sammen celler", + "TO-cell-prop": "Egenskaper for celle", + "TO-cell-split": "Del celle", + "TO-col-delete": "Slett kolonne", + "TO-col-insert-after": "Skyt inn kolonne etter", + "TO-col-insert-before": "Skyt inn kolonne før", + "TO-col-split": "Del kolonne", + "TO-row-delete": "Slett rad", + "TO-row-insert-above": "Skyt inn rad foran", + "TO-row-insert-under": "Skyt inn rad etter", + "TO-row-prop": "Egenskaper for rad", + "TO-row-split": "Del rad", + "TO-table-prop": "Tabellegenskaper", + "Table Properties": "Tabellegenskaper", + "Text align": "Juster tekst", + "The bottom side only": "Bunnen kun", + "The left-hand side only": "Venstresiden kun", + "The right and left sides only": "Høyre- og venstresiden kun", + "The right-hand side only": "Høyresiden kun", + "The top and bottom sides only": "The top and bottom sides only", + "The top side only": "Overkanten kun", + "Top": "Overkant", + "Unset color": "Ikke-bestemt farge", + "Vertical align": "Vertikal justering", + "Width": "Bredde", + "not-del-last-cell": "HTMLArea nekter å slette siste cellen i tabellen.", + "not-del-last-col": "HTMLArea nekter å slette siste kolonnen i tabellen.", + "not-del-last-row": "HTMLArea nekter å slette siste raden i tabellen.", + "percent": "prosent", + "pixels": "billedpunkter" +}; diff --git a/htmlarea/plugins/TableOperations/lang/ro.js b/htmlarea/plugins/TableOperations/lang/ro.js new file mode 100644 index 0000000..a008f21 --- /dev/null +++ b/htmlarea/plugins/TableOperations/lang/ro.js @@ -0,0 +1,90 @@ +// I18N constants + +// LANG: "ro", ENCODING: UTF-8 +// Author: Mihai Bazon, http://dynarch.com/mishoo + +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +TableOperations.I18N = { + "Align": "Aliniere", + "All four sides": "Toate părÅ£ile", + "Background": "Fundal", + "Baseline": "Baseline", + "Border": "Chenar", + "Borders": "Chenare", + "Bottom": "Jos", + "CSS Style": "Stil [CSS]", + "Caption": "Titlu de tabel", + "Cell Properties": "Proprietăţile celulei", + "Center": "Centru", + "Char": "Caracter", + "Collapsed borders": "Chenare asimilate", + "Color": "Culoare", + "Description": "Descriere", + "FG Color": "Culoare text", + "Float": "PoziÅ£ie", + "Frames": "Chenare", + "Height": "ÎnălÅ£imea", + "How many columns would you like to merge?": "Câte coloane vrei să uneşti?", + "How many rows would you like to merge?": "Câte linii vrei să uneşti?", + "Image URL": "URL-ul imaginii", + "Justify": "Justify", + "Layout": "Aranjament", + "Left": "Stânga", + "Margin": "Margine", + "Middle": "Mijloc", + "No rules": "Fără linii", + "No sides": "Fără părÅ£i", + "None": "Nimic", + "Padding": "SpaÅ£iere", + "Please click into some cell": "Vă rog să daÅ£i click într-o celulă", + "Right": "Dreapta", + "Row Properties": "Proprietăţile liniei", + "Rules will appear between all rows and columns": "Vor apărea linii între toate rândurile şi coloanele", + "Rules will appear between columns only": "Vor apărea doar linii verticale", + "Rules will appear between rows only": "Vor apărea doar linii orizontale", + "Rules": "Linii", + "Spacing and padding": "SpaÅ£ierea", + "Spacing": "Între celule", + "Summary": "Sumar", + "TO-cell-delete": "Şterge celula", + "TO-cell-insert-after": "Inserează o celulă la dreapta", + "TO-cell-insert-before": "Inserează o celulă la stânga", + "TO-cell-merge": "Uneşte celulele", + "TO-cell-prop": "Proprietăţile celulei", + "TO-cell-split": "Împarte celula", + "TO-col-delete": "Şterge coloana", + "TO-col-insert-after": "Inserează o coloană la dreapta", + "TO-col-insert-before": "Inserează o coloană la stânga", + "TO-col-split": "Împarte coloana", + "TO-row-delete": "Şterge rândul", + "TO-row-insert-above": "Inserează un rând înainte", + "TO-row-insert-under": "Inserează un rând după", + "TO-row-prop": "Proprietăţile rândului", + "TO-row-split": "Împarte rândul", + "TO-table-prop": "Proprietăţile tabelei", + "Table Properties": "Proprietăţile tabelei", + "Text align": "Aliniere", + "The bottom side only": "Doar partea de jos", + "The left-hand side only": "Doar partea din stânga", + "The right and left sides only": "Partea din stânga şi cea din dreapta", + "The right-hand side only": "Doar partea din dreapta", + "The top and bottom sides only": "Partea de sus si cea de jos", + "The top side only": "Doar partea de sus", + "Top": "Sus", + "Unset color": "Dezactivează culoarea", + "Vertical align": "Aliniere pe verticală", + "Width": "Lăţime", + "not-del-last-cell": "HTMLArea refuză cu laşitate să şteargă ultima celulă din rând.", + "not-del-last-col": "HTMLArea refuză cu laşitate să şteargă ultima coloamă din tabela.", + "not-del-last-row": "HTMLArea refuză cu laşitate să şteargă ultimul rând din tabela.", + "percent": "procente", + "pixels": "pixeli" +}; diff --git a/htmlarea/plugins/TableOperations/table-operations.js b/htmlarea/plugins/TableOperations/table-operations.js new file mode 100644 index 0000000..9aa17ce --- /dev/null +++ b/htmlarea/plugins/TableOperations/table-operations.js @@ -0,0 +1,1160 @@ +// Table Operations Plugin for HTMLArea-3.0 +// Implementation by Mihai Bazon. Sponsored by http://www.bloki.com +// +// htmlArea v3.0 - Copyright (c) 2002 interactivetools.com, inc. +// This notice MUST stay intact for use (see license.txt). +// +// A free WYSIWYG editor replacement for + + + diff --git a/htmlarea/popups/insert_image.html b/htmlarea/popups/insert_image.html new file mode 100644 index 0000000..4b9eb75 --- /dev/null +++ b/htmlarea/popups/insert_image.html @@ -0,0 +1,191 @@ + + + + Insert Image + + + + + + + + + + + +
Insert Image
+ +
+ + + + + + + + + + + + + +
Image URL: + +
Alternate text:
+ +

+ +

+Layout + +
+ +
Alignment:
+ + +

+ +

Border thickness:
+ + +
+ +
+ +
+Spacing + +
+ +
Horizontal:
+ + +

+ +

Vertical:
+ + +
+ +
+
+ + + + + +
+ Image Preview:
+ +
+
+ +
+
+ + diff --git a/htmlarea/popups/insert_table.html b/htmlarea/popups/insert_table.html new file mode 100644 index 0000000..05db221 --- /dev/null +++ b/htmlarea/popups/insert_table.html @@ -0,0 +1,175 @@ + + + + Insert Table + + + + + + + + + + + +
Insert Table
+ +
+ + + + + + + + + + + + + + + + + +
Rows:Width:
Cols:
+ +

+ +

+Layout + +
+ +
Alignment:
+ + +

+ +

Border thickness:
+ + +
+ +
+ +
+Spacing + +
+ +
Cell spacing:
+ + +

+ +

Cell padding:
+ + +
+ +
+ +
+ + +
+ +
+ + + diff --git a/htmlarea/popups/link.html b/htmlarea/popups/link.html new file mode 100644 index 0000000..72b0111 --- /dev/null +++ b/htmlarea/popups/link.html @@ -0,0 +1,155 @@ + + + + Insert/Modify Link + + + + + + + + +
Insert/Modify Link
+
+ + + + + + + + + + + + + +
URL:
Title (tooltip):
Target: + +
+ +
+ + +
+
+ + diff --git a/htmlarea/popups/old-fullscreen.html b/htmlarea/popups/old-fullscreen.html new file mode 100644 index 0000000..0e133ae --- /dev/null +++ b/htmlarea/popups/old-fullscreen.html @@ -0,0 +1,131 @@ + +Fullscreen Editor + + + + + + +
+ +
+ + \ No newline at end of file diff --git a/htmlarea/popups/old_insert_image.html b/htmlarea/popups/old_insert_image.html new file mode 100644 index 0000000..3edcd3e --- /dev/null +++ b/htmlarea/popups/old_insert_image.html @@ -0,0 +1,206 @@ + + + + + + + +Insert Image + + + + + +
Image URL:
+ + +
Alternate Text:
+ + +
+Layout +
+ +
+Spacing +
+ +
Alignment:
+ + +
Horizontal:
+ + +
Border Thickness:
+ + +
Vertical:
+ + + + + + + \ No newline at end of file diff --git a/htmlarea/popups/popup.js b/htmlarea/popups/popup.js new file mode 100644 index 0000000..9876266 --- /dev/null +++ b/htmlarea/popups/popup.js @@ -0,0 +1,114 @@ +// htmlArea v3.0 - Copyright (c) 2002, 2003 interactivetools.com, inc. +// This copyright notice MUST stay intact for use (see license.txt). +// +// Portions (c) dynarch.com, 2003 +// +// A free WYSIWYG editor replacement for + + +

Where can I find out more info, download the latest version and talk to +other HTMLArea users?

+ +

You can find out more about HTMLArea and download the latest version on +the HTMLArea +homepage and you can talk to other HTMLArea users and post any comments +or suggestions you have in the HTMLArea forum.

+ +

Keyboard shortcuts

+ +

The editor provides the following key combinations:

+ +
    +
  • CTRL-A -- select all
  • +
  • CTRL-B -- bold
  • +
  • CTRL-I -- italic
  • +
  • CTRL-U -- underline
  • +
  • CTRL-S -- strikethrough
  • +
  • CTRL-L -- justify left
  • +
  • CTRL-E -- justify center
  • +
  • CTRL-R -- justify right
  • +
  • CTRL-J -- justify full
  • +
  • CTRL-1 .. CTRL-6 -- headings (<h1> .. <h6>)
  • +
  • CTRL-0 (zero) -- clean content pasted from Word
  • +
+ +

Installation

+ +

How do I add HTMLArea to my web page?

+ +

It's easy. First you need to upload HTMLArea files to your website. +Just follow these steps.

+ +
    +
  1. Download the latest version from the htmlArea + homepage.
  2. +
  3. Unzip the files onto your local computer (making sure to maintain the + directory structure contained in the zip).
  4. +
  5. Create a new folder on your website called /htmlarea/ (make sure it's + NOT inside the cgi-bin).
  6. +
  7. Transfer all the HTMLArea files from your local computer into the + /htmlarea/ folder on your website.
  8. +
  9. Open the example page /htmlarea/examples/core.html with your browser to make + sure everything works.
  10. +
+ +

Once htmlArea is on your website all you need to do is add some +JavaScript to any pages that you want to add WYSIWYG editors to. Here's how +to do that.

+ +
    + +
  1. Define some global variables. "_editor_url" has to be the absolute + URL where HTMLArea resides within your + website; as we discussed, this would be “/htmlarea/”. "_editor_lang" must + be the language code in which you want HTMLArea to appear. This defaults + to "en" (English); for a list of supported languages, please look into + the "lang" subdirectory in the distribution. +
    <script type="text/javascript">
    +   _editor_url = "/htmlarea/";
    +   _editor_lang = "en";
    +</script>
    + +
  2. Include the "htmlarea.js" script: +
    <script type="text/javascript" src="/htmlarea/htmlarea.js"></script>
    +
  3. + +
  4. If you want to change all your <textarea>-s into + HTMLArea-s then you can use the simplest way to create HTMLArea:

    +
    <script type="text/javascript" defer="1">
    +    HTMLArea.replaceAll();
    +</script>
    +

    Note: you can also add the + HTMLArea.replaceAll() code to the onload + event handler for the body element, if you find it more appropriate.

    + +

    A different approach, if you have more than one textarea and only want + to change one of them, is to use HTMLArea.replace("id") -- + pass the id of your textarea. Do not use the + name attribute anymore, it's not a standard solution!

    + +
+ +

This section applies to HTMLArea-3.0 release candidate 1 or later; prior +to this version, one needed to include more files; however, now HTMLArea is +able to include other files too (such as stylesheet, language definition +file, etc.) so you only need to define the editor path and load +"htmlarea.js". Nice, eh? ;-)

+ +

I want to change the editor settings, how do I do that?

+ +

While it's true that all you need is one line of JavaScript to create an +htmlArea WYSIWYG editor, you can also specify more config settings in the +code to control how the editor works and looks. Here's an example of some of +the available settings:

+ +
var config = new HTMLArea.Config(); // create a new configuration object
+                                    // having all the default values
+config.width = '90%';
+config.height = '200px';
+
+// the following sets a style for the page body (black text on yellow page)
+// and makes all paragraphs be bold by default
+config.pageStyle =
+  'body { background-color: yellow; color: black; font-family: verdana,sans-serif } ' +
+  'p { font-width: bold; } ';
+
+// the following replaces the textarea with the given id with a new
+// HTMLArea object having the specified configuration
+HTMLArea.replace('id', config);
+ +

Important: It's recommended that you add +custom features and configuration to a separate file. This will ensure you +that when we release a new official version of HTMLArea you'll have less +trouble upgrading it.

+ +

How do I customize the toolbar?

+ +

Using the configuration object introduced above allows you to completely +control what the toolbar contains. Following is an example of a one-line, +customized toolbar, much simpler than the default one:

+ +
var config = new HTMLArea.Config();
+config.toolbar = [
+  ['fontname', 'space',
+   'fontsize', 'space',
+   'formatblock', 'space',
+   'bold', 'italic', 'underline']
+];
+HTMLArea.replace('id', config);
+ +

The toolbar is an Array of Array objects. Each array in the toolbar +defines a new line. The default toolbar looks like this:

+ +
config.toolbar = [
+[ "fontname", "space",
+  "fontsize", "space",
+  "formatblock", "space",
+  "bold", "italic", "underline", "separator",
+  "strikethrough", "subscript", "superscript", "separator",
+  "copy", "cut", "paste", "space", "undo", "redo" ],
+		
+[ "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
+  "insertorderedlist", "insertunorderedlist", "outdent", "indent", "separator",
+  "forecolor", "hilitecolor", "textindicator", "separator",
+  "inserthorizontalrule", "createlink", "insertimage", "inserttable", "htmlmode", "separator",
+  "popupeditor", "separator", "showhelp", "about" ]
+];
+ +

Except three strings, all others in the examples above need to be defined +in the config.btnList object (detailed a bit later in this +document). The three exceptions are: 'space', 'separator' and 'linebreak'. +These three have the following meaning, and need not be present in +btnList:

+ +
    +
  • 'space' -- Inserts a space of 5 pixels (the width is configurable by external + CSS) at the current + position in the toolbar.
  • +
  • 'separator' -- Inserts a small vertical separator, for visually grouping related + buttons.
  • +
  • 'linebreak' -- Starts a new line in the toolbar. Subsequent controls will be + inserted on the new line.
  • +
+ +

Important: It's recommended that you add +custom features and configuration to a separate file. This will ensure you +that when we release a new official version of HTMLArea you'll have less +trouble upgrading it.

+ +

How do I create custom buttons?

+ +

By design, the toolbar is easily extensible. For adding a custom button +one needs to follow two steps.

+ +

1. Register the button in config.btnList.

+ +

For each button in the toolbar, HTMLArea needs to know the following +information:

+
    +
  • a name for it (we call it the ID of the button);
  • +
  • the path to an image to be displayed in the toolbar;
  • +
  • a tooltip for it;
  • +
  • whether the button is enabled or not in text mode;
  • +
  • what to do when the button is clicked;
  • +
+

You need to provide all this information for registering a new button +too. The button ID can be any string identifier and it's used when +defining the toolbar, as you saw above. We recommend starting +it with "my-" so that it won't clash with the standard ID-s (those from +the default toolbar).

+ +

Register button example #1

+ +
// get a default configuration
+var config = new HTMLArea.Config();
+// register the new button using Config.registerButton.
+// parameters:        button ID,   tooltip,          image,           textMode,
+config.registerButton("my-hilite", "Highlight text", "my-hilite.gif", false,
+// function that gets called when the button is clicked
+  function(editor, id) {
+    editor.surroundHTML('<span class="hilite">', '</span>');
+  }
+);
+ +

An alternate way of calling registerButton is exemplified above. Though +the code might be a little bit larger, using this form makes your code more +maintainable. It doesn't even needs comments as it's pretty clear.

+ +

Register button example #2

+ +
var config = new HTMLArea.Config();
+config.registerButton({
+  id        : "my-hilite",
+  tooltip   : "Highlight text",
+  image     : "my-hilite.gif",
+  textMode  : false,
+  action    : function(editor, id) {
+                editor.surroundHTML('<span class="hilite">', '</span>');
+              }
+});
+ +

You might notice that the "action" function receives two parameters: +editor and id. In the examples above we only used the +editor parameter. But it could be helpful for you to understand +both:

+ +
    +
  • editor is a reference to the HTMLArea object. Since our entire + code now has an OOP-like + design, you need to have a reference to + the editor object in order to do things with it. In previous versions of + HTMLArea, in order to identify the object an ID was used -- the ID of the + HTML element. In this version ID-s are no longer necessary.
  • + +
  • id is the button ID. Wondering why is this useful? Well, you + could use the same handler function (presuming that it's not an anonymous + function like in the examples above) for more buttons. You can see an example a bit later in this document.
  • +
+ +

2. Inserting it into the toolbar

+ +

At this step you need to specify where in the toolbar to insert the +button, or just create the whole toolbar again as you saw in the previous +section. You use the button ID, as shown in the examples of customizing the +toolbar in the previous section.

+ +

For the sake of completion, following there are another examples.

+ +

Append your button to the default toolbar

+ +
config.toolbar.push([ "my-hilite" ]);
+ +

Customized toolbar

+ +
config.toolbar = [
+  ['fontname', 'space',
+   'fontsize', 'space',
+   'formatblock', 'space',
+   'separator', 'my-hilite', 'separator', 'space', // here's your button
+   'bold', 'italic', 'underline', 'space']
+];
+ +

Note: in the example above our new button is +between two vertical separators. But this is by no means required. You can +put it wherever you like. Once registered in the btnList (step 1) your custom button behaves just like a default +button.

+ +

Important: It's recommended that you add +custom features and configuration to a separate file. This will ensure you +that when we release a new official version of HTMLArea you'll have less +trouble upgrading it.

+ +

A complete example

+ +

Please note that it is by no means necessary to include the following +code into the htmlarea.js file. On the contrary, it might not work there. +The configuration system is designed such that you can always customize the +editor from outside files, thus keeping the htmlarea.js file +intact. This will make it easy for you to upgrade your HTMLArea when we +release a new official version. OK, I promise it's the last time I said +this. ;)

+ +
// All our custom buttons will call this function when clicked.
+// We use the buttonId parameter to determine what button
+// triggered the call.
+function clickHandler(editor, buttonId) {
+  switch (buttonId) {
+    case "my-toc":
+      editor.insertHTML("<h1>Table Of Contents</h1>");
+      break;
+    case "my-date":
+      editor.insertHTML((new Date()).toString());
+      break;
+    case "my-bold":
+      editor.execCommand("bold");
+      editor.execCommand("italic");
+      break;
+    case "my-hilite":
+      editor.surroundHTML("<span class=\"hilite\">", "</span>");
+      break;
+  }
+};
+
+// Create a new configuration object
+var config = new HTMLArea.Config();
+
+// Register our custom buttons
+config.registerButton("my-toc",  "Insert TOC", "my-toc.gif", false, clickHandler);
+config.registerButton("my-date", "Insert date/time", "my-date.gif", false, clickHandler);
+config.registerButton("my-bold", "Toggle bold/italic", "my-bold.gif", false, clickHandler);
+config.registerButton("my-hilite", "Hilite selection", "my-hilite.gif", false, clickHandler);
+
+// Append the buttons to the default toolbar
+config.toolbar.push(["linebreak", "my-toc", "my-date", "my-bold", "my-hilite"]);
+
+// Replace an existing textarea with an HTMLArea object having the above config.
+HTMLArea.replace("textAreaID", config);
+ + +
+
© InteractiveTools.com 2002-2004. +
+© dynarch.com 2003-2004
+HTMLArea v3.0 developed by Mihai Bazon. +
+Documentation written by Mihai Bazon. +
+ Last modified: Wed Jan 28 12:18:23 EET 2004 + + diff --git a/htmlarea/release-notes.html b/htmlarea/release-notes.html new file mode 100644 index 0000000..f6b1266 --- /dev/null +++ b/htmlarea/release-notes.html @@ -0,0 +1,209 @@ + + + + + <% $basename %> release notes + + + + + +

<% $basename %> release notes

+ +

This release was compiled on <% $time %>.

+ +

3.0-rc1

+ +

Changes since 3.0-Beta:

+ +
    +
  • + New plugins +
      +
    • + ContextMenu plugin (provides a nice context menu with common + operations, including table ops, link ops, etc.) +
    • +
    • + CSS plugin (provides an easy way to insert/change CSS classes) +
    • +
    • + FullPage plugin (allows HTMLArea to edit a whole HTML file, + not only the content within <body>.) +
    • +
    +
  • +
  • + Changes in the SpellChecker plugin +
      +
    • + Many bugfixes: now it works ;-) Fully Unicode-safe. +
    • +
    • + Speed and bandwidth optimization: reports the list of + suggestions only once for each mispelled word; this helps + in cases where you have, for instance, the word “HTMLArea” + in 10 places all over the document; the list of + suggestions for it--which is kind of huge--will only be + included once. +
    • +
    • + User interface improvements: the highlighted word will + remain in view; in cases where it's normally outside, the + window will be scrolled to it. +
    • +
    • + Added a "Revert" button for those that change their minds ;-) +
    • +
    • + Added a "Info" button which reports information about the + document, retrieved by the server-side spell checker: + total number of words, total number of mispelled words, + number of suggestions made, spell check time, etc. More + can be easily added. FIXME: this part + is not yet internationalized. +
    • +
    • + The server-side spell checker now uses XML::DOM instead of + HTML::Parser, which means that it will be unable to parse + “tag-soup” HTML. It needs valid code. Usually HTMLArea + generates valid code, but on rare occasions it might fail + and the spell checker will report a gross error message. + This gonna have to be fixed, but instead of making the + spell checker accept invalid HTML I prefer to make + HTMLArea generate valid code, so changes are to be done in + other places ;-) +
    • +
    +
  • +
  • + Changes in the core editor +
      +
    • + Easier to setup: you only need to load + htmlarea.js; other scripts will be loaded + automatically. Documentation + and examples updated. +
    • +
    • + Better plugin support (they register information about + themselves with the editor; can register event handlers for + the editor, etc.) +
    • +
    • + New about box; check it out, it's cool ;-) +
    • +
    • + Word cleaner (can be enabled to automatically kill Word crap + on paste (see Config.killWordOnPaste); otherwise accessible by + pressing CTRL-0 in the editor; a toolbar button will come up + soon) +
    • +
    • + Image preview in "insert image" dialog. Also allows + modification of current image, if selected. +
    • +
    • + New "insert link" dialog, allows target and title + specification, allows editing links. +
    • +
    • + Implemented support for text direction (left-to-right or + right-to-left). +
    • +
    • + Lots of bug fixes! ... and more, I guess ;-) an + automatically generated change log + is now available. +
    • +
    +
  • +
+ +

I don't have the power to go through the bug +system at SourceForge + now. Some of the bugs reported there may be fixed; I'll update + their status, some other time. If you reported bugs there and now + find them to be fixed, please let me know.

+ +

3.0-Beta

+ +

Changes since 3.0-Alpha:

+ +
    + +
  • Performance improvements.
  • + +
  • Many bugs fixed.
  • + +
  • Plugin infrastructure.
  • + +
  • TableOperations plugin.
  • + +
  • SpellChecker plugin.
  • + +
  • Status bar.
  • + +
  • API for registering custom buttons and drop-down boxes in the + toolbar.
  • + +
  • Toolbar can contain text labels.
  • + +
  • Cut, copy, paste, undo, redo buttons.
  • + +
+<%doc> +

Rationale for Beta

+ +

Why was this released as "Beta"? The code is quite stable and it + didn't deserve a "Beta" qualification. However, there are some things + left to do for the real 3.0 version. These things will not affect the + API to work with HTMLArea, in other words, you can install the Beta + right now and then install the final release without modifying your + code. That's if you don't modify HTMLArea itself. ;-)

+ +

To-Do before 3.0 final

+ +
    + +
  1. We should use a single popup interface. Currently there are two: + dialog.js and popupwin.js; dialog.js emulates modal dialogs, which + sucks when you want to open "select-color" from another popup and not + from the editor itself. Very buggy in IE. We should probably use only + modeless dialogs (that is, popupwin.js).
  2. + +
  3. Internationalization for the SpellChecker plugin.
  4. + +
  5. Internationalization for the TableOperations plugin.
  6. + +
  7. People who sent translations are invited to re-iterate through + their work and make it up-to-date with lang/en.js which is the main + lang file for HTMLArea-3.0. Some things have changed but not all + translations are updated.
  8. + +
  9. Documentation.
  10. + +
+ +
+
Mihai Bazon
+ + Last modified: Wed Mar 31 19:18:26 EEST 2004 + + + + +<%ARGS> + $project => 'HTMLArea' + $version => '3.0' + $release => 'rc1' + $basename => 'HTMLArea-3.0-rc1' + + +<%INIT>; +use POSIX qw(strftime); +my $time = strftime '%b %e, %Y [%H:%M] GMT', gmtime; + diff --git a/include/admin/category.inc.php b/include/admin/category.inc.php new file mode 100644 index 0000000..f81f3c2 --- /dev/null +++ b/include/admin/category.inc.php @@ -0,0 +1,246 @@ +{$res}"); + */ + } + + /* Check to see if a category with the same name, already exist */ + $sql = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}category + WHERE category_name = '". serendipity_db_escape_string($name) ."'", true); + if ( $sql ) { + echo '
'. sprintf(CATEGORY_ALREADY_EXIST, htmlspecialchars($name)) .'
'; + } else { + $query = "INSERT INTO {$serendipity['dbPrefix']}category + (category_name, category_description, authorid, category_icon, parentid, category_left, category_right) + VALUES ('". serendipity_db_escape_string($name) ."', '". serendipity_db_escape_string($desc) ."', ". (int)$authorid .", '". serendipity_db_escape_string($icon) ."', ". (int)$parentid .", 0, 0)"; + serendipity_db_query($query); + echo '
'. CATEGORY_SAVED .'
'; + } + + + } elseif ($serendipity['GET']['adminAction'] == 'edit') { + /* Check to see if a category with the same name, already exist */ + $sql = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}category + WHERE category_name = '". serendipity_db_escape_string($name) ."' + AND categoryid <> ". (int)$serendipity['GET']['cid'], true); + if ( $sql ) { + echo '
'. sprintf(CATEGORY_ALREADY_EXIST, htmlspecialchars($name)) .'
'; + } else { + /* Check to make sure parent is not a child of self */ + $r = serendipity_db_query("SELECT categoryid FROM {$serendipity['dbPrefix']}category c + WHERE c.categoryid = ". (int)$parentid ." + AND c.category_left BETWEEN " . implode(' AND ', serendipity_fetchCategoryRange((int)$serendipity['GET']['cid']))); + if ( is_array($r) ) { + $r = serendipity_db_query("SELECT category_name FROM {$serendipity['dbPrefix']}category + WHERE categoryid = ". (int)$parentid); + echo sprintf(ALREADY_SUBCATEGORY, htmlspecialchars($r[0]['category_name']), htmlspecialchars($name)); + } else { + $query = "UPDATE {$serendipity['dbPrefix']}category + SET category_name = '". serendipity_db_escape_string($name) ."', + category_description = '". serendipity_db_escape_string($desc) ."', + authorid = ". (int)$authorid .", + category_icon = '". serendipity_db_escape_string($icon) ."', + parentid = ". (int)$parentid ." + WHERE categoryid = ". (int)$serendipity['GET']['cid'] ." + $admin_category"; + serendipity_db_query($query); + echo '
'. CATEGORY_SAVED .'
'; + } + } + } + + serendipity_rebuildCategoryTree(); + $serendipity['GET']['adminAction'] = 'view'; +} + +/* Delete a category */ +if ($serendipity['GET']['adminAction'] == 'doDelete') { + if ($serendipity['GET']['cid'] != 0) { + $remaining_cat = (int)$serendipity['POST']['cat']['remaining_catid']; + $category_range = implode(' AND ', serendipity_fetchCategoryRange((int)$serendipity['GET']['cid'])); + if ($serendipity['dbType'] == 'postgres' || $serendipity['dbType'] == 'sqlite') { + $query = "UPDATE {$serendipity['dbPrefix']}entrycat + SET categoryid={$remaining_cat} WHERE entryid IN + ( + SELECT DISTINCT(e.id) FROM {$serendipity['dbPrefix']}entries e, + {$serendipity['dbPrefix']}category c, + {$serendipity['dbPrefix']}entrycat ec + WHERE e.id=ec.entryid AND c.categoryid=ec.categoryid + AND c.category_left BETWEEN {$category_range} {$admin_category} + )"; + } else { + $query = "UPDATE {$serendipity['dbPrefix']}entries e, + {$serendipity['dbPrefix']}entrycat ec, + {$serendipity['dbPrefix']}category c + SET ec.categoryid={$remaining_cat} + WHERE e.id = ec.entryid + AND c.categoryid = ec.categoryid + AND c.category_left BETWEEN {$category_range} + {$admin_category}"; + } + if ( serendipity_db_query($query) ) { + if ( serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}category WHERE category_left BETWEEN {$category_range} {$admin_category}") ) { + echo '
'. ($remaining_cat ? sprintf(CATEGORY_DELETED_ARTICLES_MOVED, (int)$serendipity['GET']['cid'], $remaining_cat) : sprintf(CATEGORY_DELETED,(int)$serendipity['GET']['cid'])) .'
'; + $serendipity['GET']['adminAction'] = 'view'; + } + } + } else { + echo '
'. INVALID_CATEGORY .'
'; + } +} +?> + += USERLEVEL_CHIEF || $serendipity['authorid'] == $this_cat['authorid'] || $this_cat['authorid'] == '0') { +?> +
+
+ : + + +
+ + + + +'. sprintf(EDIT_THIS_CAT, htmlspecialchars($this_cat['category_name'])) .''; + $save = SAVE; + } else { + echo ''. CREATE_NEW_CAT .''; + $save = CREATE; + } +?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
>
+ + + +
/>
+ +
+
+
+ + + + + + 0 ) { + echo CATEGORY_INDEX .':'; + } else { + echo '
- '. NO_CATEGORIES .' -
'; + } +?> +

+ + + + + + + + + + + + + + +
<?php echo EDIT ?><?php echo DELETE ?>
+ +
+ + diff --git a/include/admin/comments.inc.php b/include/admin/comments.inc.php new file mode 100644 index 0000000..d71545d --- /dev/null +++ b/include/admin/comments.inc.php @@ -0,0 +1,370 @@ + $v ) { + serendipity_deleteComment($k, $v); + echo DONE . ': '. sprintf(COMMENT_DELETED, $k) . '
'; + } + return true; +} + + +/* We are asked to save the edited comment, and we are not in preview mode */ +if ( isset($serendipity['GET']['adminAction']) && $serendipity['GET']['adminAction'] == 'doEdit' && !isset($serendipity['POST']['preview']) ) { + $sql = "UPDATE {$serendipity['dbPrefix']}comments + SET + author = '" . serendipity_db_escape_string($serendipity['POST']['name']) . "', + email = '" . serendipity_db_escape_string($serendipity['POST']['email']) . "', + url = '" . serendipity_db_escape_string($serendipity['POST']['url']) . "', + parent_id = '" . serendipity_db_escape_string($serendipity['POST']['replyTo']) . "', + body = '" . serendipity_db_escape_string($serendipity['POST']['comment']) . "' + WHERE id = " . (int)$serendipity['GET']['id'] . " AND + entry_id = " . (int)$serendipity['POST']['entry_id']; + serendipity_db_query($sql); + echo COMMENT_EDITED; + return true; +} + + +/* We approve a comment */ +if ( isset($serendipity['GET']['adminAction']) && $serendipity['GET']['adminAction'] == 'approve' ) { + $sql = "SELECT c.*, e.title, a.email as authoremail, a.mail_comments + FROM {$serendipity['dbPrefix']}comments c + LEFT JOIN {$serendipity['dbPrefix']}entries e ON (e.id = c.entry_id) + LEFT JOIN {$serendipity['dbPrefix']}authors a ON (e.authorid = a.authorid) + WHERE c.id = " . (int)$serendipity['GET']['id'] ." AND status = 'pending'"; + $rs = serendipity_db_query($sql, true); + + if ($rs === false) { + echo ERROR .': '. sprintf(COMMENT_ALREADY_APPROVED, $serendipity['GET']['id']); + return true; + } + + serendipity_approveComment($serendipity['GET']['id'], $rs['entry_id']); + echo DONE . ': '. sprintf(COMMENT_APPROVED, $serendipity['GET']['id']); + return true; +} + +/* We are asked to delete a comment */ +if ( isset($serendipity['GET']['adminAction']) && $serendipity['GET']['adminAction'] == 'delete' ) { + serendipity_deleteComment($serendipity['GET']['id'], $serendipity['GET']['entry_id']); + echo DONE . ': '. sprintf(COMMENT_DELETED, $serendipity['GET']['id']); + return true; +} + +/* We are either in edit mode, or preview mode */ +if ( isset($serendipity['GET']['adminAction']) && $serendipity['GET']['adminAction'] == 'edit' || isset($serendipity['POST']['preview'])) { + + $serendipity['smarty_raw_mode'] = true; // Force output of Smarty stuff in the backend + serendipity_smarty_init(); + + /* If we are not in preview, we need data from our database */ + if (!isset($serendipity['POST']['preview']) ) { + $comment = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}comments WHERE id = ". (int)$serendipity['GET']['id']); + $data['name'] = $comment[0]['author']; + $data['email'] = $comment[0]['email']; + $data['url'] = $comment[0]['url']; + $data['replyTo'] = $comment[0]['parent_id']; + $data['comment'] = $comment[0]['body']; + + /* If we are in preview, we get data from our form */ + } elseif ( isset($serendipity['POST']['preview']) ) { + $data['name'] = $serendipity['POST']['name']; + $data['email'] = $serendipity['POST']['email']; + $data['url'] = $serendipity['POST']['url']; + $data['replyTo'] = $serendipity['POST']['replyTo']; + $data['comment'] = $serendipity['POST']['comment']; + $pc_data = array( + array( + 'email' => $serendipity['POST']['email'], + 'author' => $serendipity['POST']['name'], + 'body' => $serendipity['POST']['comment'], + 'url' => $serendipity['POST']['url'], + 'timestamp' => time() + ) + ); + + serendipity_printComments($pc_data); + $serendipity['smarty']->display(serendipity_getTemplateFile('comments.tpl', 'serendipityPath')); + } + + serendipity_displayCommentForm( + $serendipity['GET']['entry_id'], + '?serendipity[action]=admin&serendipity[adminModule]=comments&serendipity[adminAction]=doEdit&serendipity[id]=' . $serendipity['GET']['id'] . '&serendipity[entry_id]=' . $serendipity['GET']['entry_id'], + NULL, + $data, + false, + false + ); + + $serendipity['smarty']->display(serendipity_getTemplateFile('commentform.tpl', 'serendipityPath')); + + return true; +} + +/* Searchable fields */ +$filters = array('author', 'email', 'ip', 'url', 'body', 'referer'); + +/* Compress the filters into an "AND" SQL query, and a querystring */ +foreach ( $filters as $filter ) { + $and .= (!empty($serendipity['GET']['filter'][$filter]) ? "AND c.". $filter ." LIKE '%". serendipity_db_escape_string($serendipity['GET']['filter'][$filter]) ."%'" : ""); + $searchString .= (!empty($serendipity['GET']['filter'][$filter]) ? "&serendipity[filter][". $filter ."]=". $serendipity['GET']['filter'][$filter] : ""); +} + +if ($serendipity['GET']['filter']['show'] == 'approved') { + $and .= "AND status = 'approved'"; + $searchString .= "&serendipity[filter][show]=approved"; +} elseif ($serendipity['GET']['filter']['show'] == 'pending') { + $and .= "AND status = 'pending'"; + $searchString .= "&serendipity[filter][show]=pending"; +} else { + $serendipity['GET']['filter']['show'] = 'all'; +} + +if ($serendipity['GET']['filter']['type'] == 'TRACKBACK') { + $c_type = 'TRACKBACK'; + $searchString .= "&serendipity[filter][type]=TRACKBACK"; +} else { + $c_type = 'NORMAL'; +} + +/* Paging */ +$sql = serendipity_db_query("SELECT COUNT(*) AS total FROM {$serendipity['dbPrefix']}comments c WHERE c.type = '$c_type' ". $and, true); + +$totalComments = $sql['total']; +$pages = ($commentsPerPage == COMMENTS_FILTER_ALL ? 1 : ceil($totalComments/(int)$commentsPerPage)); +$page = (int)$serendipity['GET']['page']; +if ( $page == 0 || $page > $pages ) { + $page = 1; +} + +$linkPrevious = 'serendipity_admin.php?serendipity[adminModule]=comments&serendipity[page]='. ($page-1) . $searchString; +$linkNext = 'serendipity_admin.php?serendipity[adminModule]=comments&serendipity[page]='. ($page+1) . $searchString; + +if ($commentsPerPage == COMMENTS_FILTER_ALL) { + $limit = ''; +}else { + $limit = serendipity_db_limit_sql(serendipity_db_limit(($page-1)*(int)$commentsPerPage, (int)$commentsPerPage)); +} + +$sql = serendipity_db_query("SELECT c.*, e.title FROM {$serendipity['dbPrefix']}comments c + LEFT JOIN {$serendipity['dbPrefix']}entries e ON (e.id = c.entry_id) + WHERE type = '$c_type' + ". $and ." + " . (($serendipity['serendipityUserlevel'] != USERLEVEL_ADMIN) ? 'AND e.authorid = ' . (int)$serendipity['authorid'] : '') . " + ORDER BY c.id DESC $limit"); +?> + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
:::
IP:::
::
+
+- '. NO_COMMENTS .' -'; + } else { +?> +
+ + + + + + strlen($summary) ) { + $summary .= ' ...'; + } + + $class = 'serendipity_admin_list_item_' . (($i % 2 == 0 ) ? 'even' : 'uneven'); + $header_class = ($rs['status'] == 'pending' ? 'serendipityAdminMsgNote' : ''); +?> + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + +
+
+ '. $rs['title'] .', '. ON . ' ' . serendipity_mb('ucfirst', serendipity_strftime('%b %e %Y, %H:%M', $rs['timestamp']))?> +
+ + + + + + + + + + + + + + + + +
: : + + +
IP: + : + + +
 : + + +
+
+ +
+ + <?php echo APPROVE ?> + + strlen($summary) ) { ?> + <?php echo VIEW; ?> + + <?php echo EDIT; ?> + <?php echo DELETE; ?> +

+
+ diff --git a/include/admin/configuration.inc.php b/include/admin/configuration.inc.php new file mode 100644 index 0000000..c6953de --- /dev/null +++ b/include/admin/configuration.inc.php @@ -0,0 +1,44 @@ +- ' . implode('
', $res) . '

'; + } else { + /* If we have new rewrite rules, then install them */ + if (isset($_POST['rewrite']) && $serendipity['serendipityUserlevel'] >= USERLEVEL_ADMIN && $oldRewrite != $_POST['rewrite']) { + printf(ATTEMPT_WRITE_FILE, $serendipity['serendipityPath'] . '.htaccess'); + $res = serendipity_installFiles($serendipity['serendipityPath']); + if (is_array($res)) { + echo implode('
', $res); + } else { + echo DONE . '
'; + } + } + echo '
'. WRITTEN_N_SAVED .'
'; + } + + break; + + default: + $from = &$serendipity; + $t = serendipity_parseTemplate(S9Y_CONFIG_TEMPLATE); + serendipity_printConfigTemplate($t, $from, false, true); + break; +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/entries.inc.php b/include/admin/entries.inc.php new file mode 100644 index 0000000..01b8f90 --- /dev/null +++ b/include/admin/entries.inc.php @@ -0,0 +1,405 @@ + DATE, + 'isdraft' => PUBLISH . '/' . DRAFT, + 'a.realname' => AUTHOR, + 'category_name' => CATEGORY, + 'last_modified' => LAST_UPDATED, + 'title' => TITLE); +$per_page = array('12', '16', '50', '100'); + + +// A little helper we don't want in _functions.inc.php +function serendipity_drawList() { + global $serendipity, $sort_order, $per_page; + + $perPage = (!empty($serendipity['GET']['sort']['perPage']) ? $serendipity['GET']['sort']['perPage'] : $per_page[0]); + $page = (int)$serendipity['GET']['page']; + $offSet = $perPage*$page; + + if (empty($serendipity['GET']['sort']['ordermode']) || $serendipity['GET']['sort']['ordermode'] != 'ASC') { + $serendipity['GET']['sort']['ordermode'] = 'DESC'; + } + + if (!empty($serendipity['GET']['sort']['order']) && !empty($sort_order[$serendipity['GET']['sort']['order']])) { + $orderby = serendipity_db_escape_string($serendipity['GET']['sort']['order'] . ' ' . $serendipity['GET']['sort']['ordermode']); + } else { + $orderby = 'timestamp ' . serendipity_db_escape_string($serendipity['GET']['sort']['ordermode']); + } + + $filter = array(); + if (!empty($serendipity['GET']['filter']['author'])) { + $filter[] = "e.authorid = '" . serendipity_db_escape_string($serendipity['GET']['filter']['author']) . "'"; + } + + if (!empty($serendipity['GET']['filter']['category'])) { + $filter[] = "ec.categoryid = '" . serendipity_db_escape_string($serendipity['GET']['filter']['category']) . "'"; + } + + if (!empty($serendipity['GET']['filter']['body'])) { + if ($serendipity['dbType'] == 'mysql') { + $filter[] = "MATCH (title,body,extended) AGAINST ('" . serendipity_db_escape_string($serendipity['GET']['filter']['body']) . "')"; + $full = true; + } + } + + $filter_sql = implode(' AND ', $filter); + + // Fetch the entries + $entries = serendipity_fetchEntries( + false, + false, + serendipity_db_limit( + $offSet, + $perPage + ), + true, + false, + $orderby, + $filter_sql + ); +?> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
+ + + +
+ + + + + +
+ + $v) { + $qString .= '&serendipity[sort]['. $k .']='. $v; + } + foreach ((array)$serendipity['GET']['filter'] as $k => $v) { + $qString .= '&serendipity[filter]['. $k .']='. $v; + } + $linkPrevious = $qString . '&serendipity[page]=' . ($page-1); + $linkNext = $qString . '&serendipity[page]=' . ($page+1); +?> + + + + +
+ 0) { ?> + + + + + + +
+*'; + } else { + $lm = ''; + } + + if (!$serendipity['showFutureEntries'] && $entry['timestamp'] >= serendipity_serverOffsetHour()) { + $entry_pre = '* '; + } else { + $entry_pre = ''; + } + + if ($entry['isdraft'] == 'true') { + $entry_pre .= ' ' . DRAFT . ': '; + } +?> +
+ + + + + + + + + +
+ + + +
+ ' . $cat['category_name'] . ''; + } + echo implode(', ', $cats); + } + ?> + + + <?php echo EDIT; ?> + <?php echo DELETE; ?> +
+
+ + +
+ + + + +
+ : # +
+
+ +
- -
+ +
+
+ $serendipity['POST']['id'], + 'title' => $serendipity['POST']['title'], + 'timestamp' => $serendipity['POST']['timestamp'], + 'body' => $serendipity['POST']['body'], + 'extended' => $serendipity['POST']['extended'], + 'categories' => $serendipity['POST']['categories'], + 'isdraft' => $serendipity['POST']['isdraft'], + 'allow_comments' => $serendipity['POST']['allow_comments'], + 'moderate_comments' => $serendipity['POST']['moderate_comments'], + 'exflag' => (!empty($serendipity['POST']['extended']) ? true : false) + ); + + if ($entry['allow_comments'] != 'true' && $entry['allow_comments'] !== true) { + $entry['allow_comments'] = 'false'; + } + + if ($entry['moderate_comments'] != 'true' && $entry['moderate_comments'] !== true) { + $entry['moderate_comments'] = 'false'; + } + + // Check if the user changed the timestamp. + if (isset($serendipity['allowDateManipulation']) && $serendipity['allowDateManipulation'] && isset($serendipity['POST']['new_timestamp']) && $serendipity['POST']['new_timestamp'] != date(DATE_FORMAT_2, $serendipity['POST']['chk_timestamp'])) { + // The user changed the timestamp, now set the DB-timestamp to the user's date + $entry['timestamp'] = strtotime($serendipity['POST']['new_timestamp']); + + if ($entry['timestamp'] == -1) { + echo DATE_INVALID . '
'; + // The date given by the user is not convertable. Reset the timestamp. + $entry['timestamp'] = $serendipity['POST']['timestamp']; + } + } + + // Save server timezone in database always, so substract the offset we added for display; otherwise it would be added time and again + if (!empty($entry['timestamp'])) { + $entry['timestamp'] = serendipity_serverOffsetHour($entry['timestamp'], true); + } + + // Save the entry, or just display a preview + if ($serendipity['POST']['preview'] != 'true') { + /* We don't need an iframe to save a draft */ + if ( $serendipity['POST']['isdraft'] == 'true' ) { + echo '
' . IFRAME_SAVE_DRAFT . '

'; + serendipity_updertEntry($entry); + } else { + if ($serendipity['use_iframe']) { + echo '
' . IFRAME_SAVE . '

'; + serendipity_iframe_create('save', $entry); + } else { + serendipity_iframe($entry, 'save'); + } + } + } else { + // Only display the preview + $serendipity['hidefooter'] = true; + if (!is_numeric($entry['timestamp'])) { + $entry['timestamp'] = time(); + } + + if (!isset($entry['trackbacks']) || !$entry['trackbacks']) { + $entry['trackbacks'] = 0; + } + + if (!isset($entry['comments']) || !$entry['comments']) { + $entry['comments'] = 0; + } + + if (!isset($entry['realname']) || !$entry['realname']) { + $entry['realname'] = $serendipity['serendipityUser']; + } + + $categories = (array)$entry['categories']; + $entry['categories'] = array(); + foreach ($categories as $catid) { + $entry['categories'][] = serendipity_fetchCategoryInfo($catid); + } + + if (isset($entry['id'])) { + $serendipity['GET']['id'] = $entry['id']; + } else { + $serendipity['GET']['id'] = 1; + } + + if ($serendipity['use_iframe']) { + echo '
' . IFRAME_PREVIEW . '

'; + serendipity_iframe_create('preview', $entry); + } else { + serendipity_iframe($entry, 'preview'); + } + } + + // serendipity_updertEntry sets this global variable to store the entry id. Couldn't pass this + // by reference or as return value because it affects too many places inside our API and dependant + // function calls. + if (!empty($serendipity['lastSavedEntry'])) { + $entry['id'] = $serendipity['lastSavedEntry']; + } + + serendipity_printEntryForm( + '?', + array( + 'serendipity[action]' => 'admin', + 'serendipity[adminModule]' => 'entries', + 'serendipity[adminAction]' => 'save', + 'serendipity[timestamp]' => $entry['timestamp'] + ), + + $entry + ); + + break; + + case 'editSelect': + serendipity_drawList(); + break; + + case 'delete': + $newLoc = '?serendipity[action]=admin&serendipity[adminModule]=entries&serendipity[adminAction]=doDelete&serendipity[id]=' . $serendipity['GET']['id']; + printf(DELETE_SURE, $serendipity['GET']['id']); +?> +
+
+ + 'admin', + 'serendipity[adminModule]' => 'entries', + 'serendipity[adminAction]' => 'save' + ), + (isset($entry) ? $entry : array()) + ); +} +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/entries_overview.inc.php b/include/admin/entries_overview.inc.php new file mode 100644 index 0000000..b9a593f --- /dev/null +++ b/include/admin/entries_overview.inc.php @@ -0,0 +1,12 @@ + diff --git a/include/admin/export.inc.php b/include/admin/export.inc.php new file mode 100644 index 0000000..fd5af16 --- /dev/null +++ b/include/admin/export.inc.php @@ -0,0 +1,15 @@ + +
+ +
+ diff --git a/include/admin/images.inc.php b/include/admin/images.inc.php new file mode 100644 index 0000000..12e57d1 --- /dev/null +++ b/include/admin/images.inc.php @@ -0,0 +1,546 @@ +' . SYNCING . '

'; + flush(); + + $i = serendipity_syncThumbs(); + printf(SYNC_DONE, $i); + + echo '

' . RESIZING . '

'; + flush(); + + $i = serendipity_generateThumbs(); + printf(RESIZE_DONE, $i); + + break; + + case 'DoDelete': + $file = $serendipity['GET']['fname']; + serendipity_deleteImage($serendipity['GET']['fid']); + break; + + case 'delete': + $file = serendipity_fetchImageFromDatabase($serendipity['GET']['fid']); + + if ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF && $file['authorid'] != '0' && $file['authorid'] != $serendipity['authorid']) { + return; + } + + $abortLoc = $serendipity['serendipityHTTPPath'] . 'serendipity_admin.php?serendipity[adminModule]=images'; + $newLoc = $abortLoc . '&serendipity[adminAction]=DoDelete&serendipity[fid]=' . $serendipity['GET']['fid']; + + printf(ABOUT_TO_DELETE_FILE, $file['name'] .'.'. $file['extension']); +?> +

+
+ +            + +
+
+ $serendipity['GET']['newname']), $serendipity['GET']['fid']); + } else { + $newfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $serendipity['GET']['newname'] . '.' . $file['extension']; + $oldfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.'. $file['extension']; + if ($serendipity['GET']['newname'] != '' && file_exists($oldfile) && !file_exists($newfile)) { + // Rename file + rename($oldfile, $newfile); + + // Rename thumbnail + rename($serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.' . $file['thumbnail_name'] . '.' . $file['extension'], + $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $serendipity['GET']['newname'] . '.' . $serendipity['thumbSuffix'] . '.' . $file['extension']); + + serendipity_updateImageInDatabase(array('thumbnail_name' => $serendipity['thumbSuffix'], 'name' => $serendipity['GET']['newname']), $serendipity['GET']['fid']); + // Forward user to overview (we don't want the user's back button to rename things again) + } else { + if (!file_exists($oldfile)) { + echo ERROR_FILE_NOT_EXISTS; + } elseif (file_exists($newfile)) { + echo ERROR_FILE_EXISTS; + } else { + echo ERROR_SOMETHING; + } + ?> +
+ + + + + + +

+sendRequest()) || $req->getResponseCode() != '200') { + printf(REMOTE_FILE_NOT_FOUND, $serendipity['POST']['imageurl']); + } else { + // Fetch file + $fContent = $req->getResponseBody(); + + if ($serendipity['POST']['imageimporttype'] == 'hotlink') { + $tempfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . '/hotlink_' . time(); + $fp = fopen($tempfile, 'w'); + fwrite($fp, $fContent); + fclose($fp); + + $image_id = @serendipity_insertHotlinkedImageInDatabase($tfile, $serendipity['POST']['imageurl'], $authorid, null, $tempfile); + printf(HOTLINK_DONE. '
', $serendipity['POST']['imageurl'], $tfile); + } else { + $fp = fopen($target, 'w'); + fwrite($fp, $fContent); + fclose($fp); + + printf(FILE_FETCHED . '
', $serendipity['POST']['imageurl'], $tfile); + + // Create thumbnail + if ( $created_thumbnail = serendipity_makeThumbnail($tfile, $serendipity['POST']['target_directory']) ) { + echo THUMB_CREATED_DONE . '
'; + } + // Insert into database + $image_id = serendipity_insertImageInDatabase($tfile, $serendipity['POST']['target_directory'], $authorid); + } + } + } + } else { + if (!empty($serendipity['POST']['target_filename'])) { + $tfile = $serendipity['POST']['target_filename']; + } else { + $tfile = $_FILES['userfile']['name']; + } + + if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN && preg_match('@\.(php[34]?|[ps]html?)$@i', $tfile)) { + printf(ERROR_FILE_FORBIDDEN, $tfile); + break; + } + + $tfile = serendipity_uploadSecure($tfile); + $serendipity['POST']['target_directory'] = serendipity_uploadSecure($serendipity['POST']['target_directory'], true); + $target = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $serendipity['POST']['target_directory'] . $tfile; + + if (file_exists($target)) { + echo '(' . $target . ') ' . ERROR_FILE_EXISTS_ALREADY; + } else { + // Accept file + if (move_uploaded_file($_FILES['userfile']['tmp_name'], $target)) { + printf(FILE_UPLOADED . '
', $_FILES['userfile']['name'], $target); + @umask(0000); + @chmod($target, 0664); + + // Create thumbnail + if ( $created_thumbnail = serendipity_makeThumbnail($tfile, $serendipity['POST']['target_directory']) ) { + echo THUMB_CREATED_DONE . '
'; + } + // Insert into database + $image_id = serendipity_insertImageInDatabase($tfile, $serendipity['POST']['target_directory'], $authorid); + } else { + echo ERROR_UNKNOWN_NOUPLOAD . '
'; + } + } + } + break; + + + case 'directoryDoDelete': + if ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF) { + return; + } + + $new_dir = serendipity_uploadSecure($serendipity['GET']['dir'], true); + if (is_dir($serendipity['serendipityPath'] . $serendipity['uploadPath'] . $new_dir)) { + if (!is_writable($serendipity['serendipityPath'] . $serendipity['uploadPath'] . $new_dir)) { + printf(DIRECTORY_WRITE_ERROR, $new_dir); + } else { + // Directory exists and is writable. Now dive within subdirectories and kill 'em all. + serendipity_killPath($serendipity['serendipityPath'] . $serendipity['uploadPath'], $new_dir, (isset($serendipity['POST']['nuke']) ? true : false)); + } + } else { + printf(ERROR_NO_DIRECTORY, $new_dir); + } + + break; + case 'directoryDelete': + if ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF) { + return; + } +?> + +
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ +
+
+ + +
+ +
+
+
+ + + + + + + + + +
+
+
+
+ +
+ +
+ + + + + + + + + + +
<?php echo DELETE ?>
+
+
+ + + + + + +
+
+ + + + + $imgsel_val) { + echo ' ' . "\n"; + } + } +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
- -

+ +
+
+
+
+ + + + + + +', + + $file['path'] . $file['name'] .'.'. $file['extension'], + $serendipity['GET']['width'], + $serendipity['GET']['height'] + ); + + echo serendipity_scaleImg($serendipity['GET']['fid'], $serendipity['GET']['width'], $serendipity['GET']['height']) . '
'; + echo DONE . '
'; + // Forward user to overview (we don't want the user's back button to rename things again) +?> + + + + + +
+
+ + + + + " /> + + x + +
+ + : + +
+ +
+
+ + + + + + + diff --git a/include/admin/import.inc.php b/include/admin/import.inc.php new file mode 100644 index 0000000..1a96a65 --- /dev/null +++ b/include/admin/import.inc.php @@ -0,0 +1,187 @@ +data['charset']) { + case 'native': + return $string; + + case 'ISO-8859-1': + if (function_exists('iconv')) { + return iconv('ISO-8859-1', LANG_CHARSET, $string); + } elseif (function_exists('recode')) { + return recode('iso-8859-1..' . LANG_CHARSET, $string); + } else { + return $string; + } + + case 'UTF-8': + default: + return utf8_decode($string); + } + } + + function strtr($data) { + return strtr($this->decode($data), $this->trans_table); + } + + function strtrRecursive($data) { + foreach ($data as $key => $val) { + if (is_array($val)) { + $data[$key] = $this->strtrRecursive($val); + } else { + $data[$key] = $this->strtr($val); + } + } + + return $data; + } + + function getTransTable() { + if (!serendipity_db_bool($this->data['use_strtr'])) { + $this->trans_table = array(); + return true; + } + + // We need to convert interesting characters to HTML entities, except for those with special relevance to HTML. + $this->trans_table = get_html_translation_table(HTML_ENTITIES); + foreach (get_html_translation_table(HTML_SPECIALCHARS) as $char => $encoded) { + if (isset($this->trans_table[$char])) { + unset($this->trans_table[$char]); + } + } + } +} + +if ( isset($serendipity['GET']['importFrom']) ) { + + /* Include the importer */ + $class = @require_once(S9Y_INCLUDE_PATH . 'include/admin/importers/'. basename($serendipity['GET']['importFrom']) .'.inc.php'); + if ( !class_exists($class) ) { + die('FAILURE: Unable to require import module, possible syntax error?'); + } + + /* Init the importer with form data */ + $importer = new $class($serendipity['POST']['import']); + + /* Yes sir, we are importing if we have valid data */ + if ( $importer->validateData() ) { + echo IMPORT_STARTING . '
'; + + /* import() MUST return (bool)true, otherwise we assume it failed */ + if ( ($result = $importer->import()) !== true ) { + echo IMPORT_FAILED .': '. $result . '
'; + } else { + echo IMPORT_DONE . '
'; + } + + + /* Apprently we do not have valid data, ask for some */ + } else { +?> + +:
+
+
+ + getInputFields() as $field ) { ?> + + + + + + getImportNotes()){ ?> + + + + + + + +
+
+ +
+
+info['software']; + unset($tmpClass); + } + } + closedir($dir); + ksort($list); +?> +.
+.
+
+:
+
+
+ + : + + +
+ diff --git a/include/admin/importers/b2evolution.inc.php b/include/admin/importers/b2evolution.inc.php new file mode 100644 index 0000000..5328a19 --- /dev/null +++ b/include/admin/importers/b2evolution.inc.php @@ -0,0 +1,297 @@ + 'b2Evolution 0.9.0.11 Paris'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function getImportNotes() { + return ''; + } + + function Serendipity_Import_b2evolution($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'UTF-8', + 'default' => $this->getCharsets(true)), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $b2db = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$b2db) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($b2db)); + } + + /* Users */ + $res = @mysql_query("SELECT ID AS ID, + user_login AS user_login, + user_pass AS user_pass, + user_email AS user_email, + user_level AS user_level, + user_url AS user_url + FROM evo_users", $b2db); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($b2db)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => ($users[$x]['user_level'] >= 2) ? 1 : 0, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'password' => $users[$x]['user_pass']); // MD5 compatible + + if ( $users[$x]['user_level'] <= 2 ) { + $data['userlevel'] = USERLEVEL_EDITOR; + } elseif ($users[$x]['user_level'] <= 9) { + $data['userlevel'] = USERLEVEL_CHIEF; + } else { + $data['userlevel'] = USERLEVEL_ADMIN; + } + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + if (!$this->importCategories(null)) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($b2db)); + } + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM evo_posts ORDER BY ID;", $b2db); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($b2db)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['post_title']), + 'isdraft' => ($entries[$x]['post_status'] == 'published') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['post_comments'] == 'open' ) ? 'true' : 'false', + 'timestamp' => strtotime($entries[$x]['post_issue_date']), + 'body' => $this->strtr($entries[$x]['post_content'])); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['post_author']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + /* Entry/category */ + foreach ($this->categories as $category) { + if ($category['cat_ID'] == $entries[$x]['post_category'] ) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + } + + /* Even more category stuff */ + $res = @mysql_query("SELECT * FROM evo_postcats;", $b2db); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($b2db)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entrycat = mysql_fetch_assoc($res); + + $entryid = 0; + $categoryid = 0; + foreach($entries AS $entry) { + if ($entry['ID'] == $entrycat['postcat_post_ID']) { + $entryid = $entry['entryid']; + break; + } + } + + foreach($this->categories AS $category) { + if ($category['cat_ID'] == $entrycat['postcat_cat_ID']) { + $categoryid = $category['categoryid']; + } + } + + if ($entryid > 0 && $categoryid > 0) { + $data = array('entryid' => $entryid, + 'categoryid' => $categoryid); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM evo_comments;", $b2db); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($b2db)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['ID'] == $a['comment_post_ID'] ) { + $author = ''; + $mail = ''; + $url = ''; + if (!empty($a['comment_author_ID'])) { + foreach($users AS $user) { + if ($user['ID'] == $a['comment_author_ID']) { + $author = $user['user_login']; + $mail = $user['user_email']; + $url = $user['user_url']; + break; + } + } + } + + if (empty($author) && empty($mail)) { + $author = $a['comment_author']; + $mail = $a['comment_author_email']; + $url = $a['comment_author_url']; + } + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => strtotime($a['comment_date']), + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'ip' => $a['comment_author_IP'], + 'status' => ($a['comment_status'] == 'published' ? 'approved' : 'pending'), + 'body' => $a['comment_content'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + if ($a['comment_status'] == 'published') { + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } + + function importCategories($parentid = 0, $new_parentid = 0) { + if (is_null($parentid)) { + $where = 'WHERE ISNULL(cat_parent_ID)'; + } else { + $where = "WHERE cat_parent_ID = '" . mysql_escape_string($parentid) . "'"; + } + + $res = mysql_query("SELECT * FROM evo_categories + " . $where); + if (!$res) { + echo mysql_error(); + return false; + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $row = mysql_fetch_assoc($res); + $cat = array('category_name' => $row['cat_name'], + 'category_description' => $row['cat_description'], + 'parentid' => (int)$new_parentid, + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $row['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + $this->categories[] = $row; + $this->importCategories($row['cat_ID'], $row['categoryid']); + } + + return true; + } +} + +return 'Serendipity_Import_b2evolution'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/bblog.inc.php b/include/admin/importers/bblog.inc.php new file mode 100644 index 0000000..cd458cf --- /dev/null +++ b/include/admin/importers/bblog.inc.php @@ -0,0 +1,233 @@ + 'bBlog 0.7.4'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function Serendipity_Import_bblog($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix', + 'default' => 'bB_'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'native', + 'default' => $this->getCharsets()), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $bblogdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$bblogdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($bblogdb)); + } + + /* Users */ + $res = @mysql_query("SELECT id AS ID, + password AS pw, + nickname AS user_login, + email AS user_email, + url AS user_url + FROM {$this->data['prefix']}authors", $bblogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($bblogdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => 1, + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'userlevel' => USERLEVEL_ADMIN, + 'password' => md5($users[$x]['pw'])); // Wicked. This is the first blog I've seen storing cleartext passwords :-D + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + echo mysql_error(); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}sections", $bblogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($bblogdb)); + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $row = mysql_fetch_assoc($res); + $cat = array('category_name' => $row['nicename'], + 'category_description' => $row['nicename'], + 'parentid' => 0, + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $row['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + $this->categories[] = $row; + } + + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}posts ORDER BY postid;", $bblogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($bblogdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['title']), + 'isdraft' => ($entries[$x]['status'] == 'live') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['allowcomments'] == 'allow' ) ? 'true' : 'false', + 'timestamp' => $entries[$x]['posttime'], + 'body' => $this->strtr($entries[$x]['body']), + 'extended' => '', + ); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['author']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + $sections = explode(':', $entries[$x]['sections']); + foreach($sections AS $section) { + if (empty($section)) { + continue; + } + + foreach($this->categories AS $category) { + if ($category['sectionid'] == $section) { + $categoryid = $category['categoryid']; + } + } + + if ($categoryid > 0) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $categoryid); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + } + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}comments WHERE type = 'comment';", $bblogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($bblogdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['postid'] == $a['postid'] ) { + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => $a['posttime'], + 'author' => $a['postername'], + 'email' => $a['posteremail'], + 'url' => $a['posterwebsite'], + 'ip' => $a['ip'], + 'status' => 'approved', + 'body' => $a['commenttext'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } +} + +return 'Serendipity_Import_bblog'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/bmachine.inc.php b/include/admin/importers/bmachine.inc.php new file mode 100644 index 0000000..7d05cc1 --- /dev/null +++ b/include/admin/importers/bmachine.inc.php @@ -0,0 +1,255 @@ + 'boastMachine 3.0'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function getImportNotes() { + return ''; + } + + function Serendipity_Import_bmachine($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'native', + 'default' => $this->getCharsets()), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $txpdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$txpdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($txpdb)); + } + + /* Users */ + $res = @mysql_query("SELECT id AS ID, + user_login AS user_login, + user_pass AS user_pass, + user_email AS user_email, + level AS user_level, + user_url AS user_url + FROM bmc_users", $txpdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($txpdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => ($users[$x]['user_level'] >= 2) ? 1 : 0, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'password' => $users[$x]['user_pass']); // MD5 compatible + + if ( $users[$x]['user_level'] <= 2 ) { + $data['userlevel'] = USERLEVEL_EDITOR; + } elseif ($users[$x]['user_level'] == 3) { + $data['userlevel'] = USERLEVEL_CHIEF; + } else { + $data['userlevel'] = USERLEVEL_ADMIN; + } + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + $res = @mysql_query("SELECT id AS cat_ID, + cat_name AS cat_name, + cat_info AS category_description + FROM bmc_cats ORDER BY id;", $txpdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($txpdb)); + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $categories[] = mysql_fetch_assoc($res); + } + + // Insert all categories as top level (we need to know everyone's ID before we can represent the hierarchy). + for ($x=0, $max_x = sizeof($categories) ; $x < $max_x ; $x++ ) { + $cat = array('category_name' => $categories[$x]['cat_name'], + 'category_description' => $categories[$x]['category_description'], + 'parentid' => 0, // <--- + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $categories[$x]['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + } + + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM bmc_posts ORDER BY id;", $txpdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($txpdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['title']), + 'isdraft' => ($entries[$x]['status'] == '1') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['m_cmt'] == '1' ) ? 'true' : 'false', + 'timestamp' => $entries[$x]['date'], + 'extended' => $this->strtr($entries[$x]['data']), + 'body' => $this->strtr($entries[$x]['summary'])); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['author']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + /* Entry/category */ + foreach ($this->categories as $category) { + if ($category['cat_ID'] == $entries[$x]['cat'] ) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM bmc_comments;", $txpdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($txpdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['id'] == $a['post'] ) { + $author = ''; + $mail = ''; + $url = ''; + if (!empty($a['author'])) { + foreach($users AS $user) { + if ($user['ID'] == $a['author']) { + $author = $user['user_login']; + $mail = $user['user_email']; + $url = $user['user_url']; + break; + } + } + } + + if (empty($author) && empty($mail)) { + $author = $a['auth_name']; + $mail = $a['auth_email']; + $url = $a['auth_url']; + } + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => $a['date'], + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'ip' => $a['auth_ip'], + 'status' => 'approved', + 'body' => $a['data'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } +} + +return 'Serendipity_Import_bmachine'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/geeklog.inc.php b/include/admin/importers/geeklog.inc.php new file mode 100644 index 0000000..b4f6603 --- /dev/null +++ b/include/admin/importers/geeklog.inc.php @@ -0,0 +1,245 @@ + 'Geeklog 1.3.11'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function getImportNotes() { + return 'GeekLog has a granular control over access privileges which cannot be migrated to Serendipity. All Users will be migrated as Superusers, you may need to set them to editor or chief users manually after import.'; + } + + function Serendipity_Import_geeklog($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix', + 'default' => 'gl_'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'native', + 'default' => $this->getCharsets()), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $gdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$gdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($gdb)); + } + + /* Users */ + $res = @mysql_query("SELECT uid AS ID, + username AS user_login, + passwd AS user_pass, + email AS user_email, + homepage AS user_url + FROM {$this->data['prefix']}users", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($gdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => 1, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'userlevel' => USERLEVEL_ADMIN, + 'password' => $users[$x]['user_pass']); // MD5 compatible + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + echo mysql_error(); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + $res = @mysql_query("SELECT tid AS cat_ID, topic AS cat_name, topic AS category_description FROM {$this->data['prefix']}topics ORDER BY tid;", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($gdb)); + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $categories[] = mysql_fetch_assoc($res); + } + + // Insert all categories as top level (we need to know everyone's ID before we can represent the hierarchy). + for ($x=0, $max_x = sizeof($categories) ; $x < $max_x ; $x++ ) { + $cat = array('category_name' => $categories[$x]['cat_name'], + 'category_description' => $categories[$x]['category_description'], + 'parentid' => 0, // <--- + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $categories[$x]['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + } + + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}stories ORDER BY sid;", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($gdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['title']), + 'isdraft' => ($entries[$x]['draft_flag'] == '0') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['comments'] == '1' ) ? 'true' : 'false', + 'timestamp' => strtotime($entries[$x]['date']), + 'body' => $this->strtr($entries[$x]['introtext']), + 'extended' => $this->strtr($entries[$x]['bodytext']), + ); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['uid']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + /* Entry/category */ + foreach ($categories as $category) { + if ($category['cat_ID'] == $entries[$x]['tid'] ) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}comments;", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($gdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['sid'] == $a['sid'] ) { + $author = ''; + $mail = ''; + $url = ''; + + foreach($users AS $user) { + if ($user['ID'] == $a['uid']) { + $author = $user['user_login']; + $mail = $user['user_email']; + $url = $user['user_url']; + break; + } + } + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => strtotime($a['date']), + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'ip' => $a['ip'], + 'status' => 'approved', + 'body' => $a['comment'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } +} + +return 'Serendipity_Import_geeklog'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/generic.inc.php b/include/admin/importers/generic.inc.php new file mode 100644 index 0000000..55a4a77 --- /dev/null +++ b/include/admin/importers/generic.inc.php @@ -0,0 +1,147 @@ + IMPORT_GENERIC_RSS); + var $data = array(); + var $inputFields = array(); + + function Serendipity_Import_Generic($data) { + $this->data = $data; + $this->inputFields = array(array('text' => RSS . ' ' . URL, + 'type' => 'input', + 'name' => 'url'), + + array('text' => STATUS, + 'type' => 'list', + 'name' => 'type', + 'value' => 'publish', + 'default' => array('draft' => DRAFT, 'publish' => PUBLISH)), + + array('text' => RSS_IMPORT_CATEGORY, + 'type' => 'list', + 'name' => 'category', + 'value' => 0, + 'default' => $this->_getCategoryList()), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'UTF-8', + 'default' => $this->getCharsets()), + + array('text' => RSS_IMPORT_BODYONLY, + 'type' => 'bool', + 'name' => 'bodyonly', + 'value' => 'false')); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function _getCategoryList() { + $res = serendipity_fetchCategories('all'); + $ret = array(0 => NO_CATEGORY); + if (is_array($res)) { + foreach ($res as $v) { + $ret[$v['categoryid']] = $v['category_name']; + } + } + return $ret; + } + + function buildEntry($item, &$entry) { + global $serendipity; + + $entry = array(); + $bodyonly = serendipity_get_bool($this->data['bodyonly']); + + if ($item['description']) { + $entry['body'] = $this->decode($item['description']); + } + + if ($item['content:encoded']) { + if (!isset($entry['body']) || $bodyonly) { + $data = &$entry['body']; + } else { + $data = &$entry['extended']; + } + + // See if the 'description' element is a substring of the 'content:encoded' part. If it is, + // we will only fetch the full 'content:encoded' part. If it's not a substring, we append + // the 'content:encoded' part to either body or extended entry (respecting the 'bodyonly' + // switch). We substract 4 letters because of possible '...' additions to an entry. + $testbody = substr(trim(strip_tags($entry['body'])), 0, -4); + if ($testbody != substr(trim(strip_tags($item['content:encoded'])), 0, strlen($testbody))) { + $data .= $this->decode($item['content:encoded']); + } else { + $data = $this->decode($item['content:encoded']); + } + } + + $entry['title'] = $this->decode($item['title']); + $entry['timestamp'] = $this->decode(strtotime(isset($item['pubdate']) ? $item['pubdate'] : $item['dc:date'])); + if ($entry['timestamp'] == -1) { + // strtotime does not seem to parse ISO 8601 dates + if (preg_match('@^([0-9]{4})\-([0-9]{2})\-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})\-([0-9]{2}):([0-9]{2})$@', isset($item['pubdate']) ? $item['pubdate'] : $item['dc:date'], $timematch)) { + $entry['timestamp'] = mktime($timematch[4] - $timematch[7], $timematch[5] - $timematch[8], $timematch[6], $timematch[3], $timematch[2], $timematch[1]); + } else { + $entry['timestamp'] = time(); + } + } + + if ($this->data['type'] == 'draft') { + $entry['isdraft'] = 'true'; + } else { + $entry['isdraft'] = 'false'; + } + + if (!empty($item['category'])) { + $cat = serendipity_fetchCategoryInfo(0, trim($this->decode($item['category']))); + if (is_array($cat) && isset($cat['categoryid'])) { + $entry['categories'][] = $cat['categoryid']; + } + } + + if (!is_array($entry['categories'])) { + $entry['categories'][] = $this->data['category']; + } + + if (!isset($entry['extended'])) { + $entry['extended'] = ''; + } + + $entry['allow_comments'] = true; + + return true; + } + + function import() { + global $serendipity; + + $c = &new Onyx_RSS(); + $c->parse($this->data['url']); + + $serendipity['noautodiscovery'] = 1; + while ($item = $c->getNextItem()) { + if ($this->buildEntry($item, $entry)) { + serendipity_updertEntry($entry); + } + } + + return true; + } +} + +return 'Serendipity_Import_Generic'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/movabletype.inc.php b/include/admin/importers/movabletype.inc.php new file mode 100644 index 0000000..719c29b --- /dev/null +++ b/include/admin/importers/movabletype.inc.php @@ -0,0 +1,219 @@ + 'MovableType'); + var $data = array(); + var $inputFields = array(); + + function Serendipity_Import_MovableType($data) { + $this->data = $data; + $this->inputFields = array(array('text' => MT_DATA_FILE, + 'type' => 'file', + 'name' => 'mt_dat'), + + array('text' => FORCE, + 'type' => 'bool', + 'name' => 'mt_force', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function getImportNotes(){ + $notes = array(); + if (!class_exists('serendipity_event_nl2br')){ + $notes[] = sprintf(IMPORTER_MT_WARN_PLUGIN, 'serendipity_event_nl2br'); + } + if (!class_exists('serendipity_event_entryproperties')){ + $notes[] = sprintf(IMPORTER_MT_WARN_PLUGIN, 'serendipity_event_entryproperties'); + } + if (count($notes) > 0){ + return '
  • '.implode('
  • ', $notes).'
'.IMPORTER_MT_NOTE; + } + } + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function doEntryWork(&$mt_entry, &$tasks){ + $entry = array(); + $entry['categories'] = array(); + $entryprops = array(); + + foreach($mt_entry as $name => $data){ + switch($name){ + case 'AUTHOR': + if ( !isset($authors[$data]) ) { + $au_inf = serendipity_fetchAuthor($data); + if ( !is_array($au_inf) ) { + $tasks[] = sprintf(CREATE_AUTHOR, htmlspecialchars($data)); + $au_inf = serendipity_fetchAuthor($serendipity['authorid']); + } + $authors[$data] = $au_inf[0]; + } + $entry['authorid'] = $authors[$data]['authorid']; + $entry['author'] = $authors[$data]['username']; + break; + case 'TITLE': + $entry['title'] = $data; + break; + case 'STATUS': + $entry['isdraft'] = ($data == 'Publish') ? 'false' : 'true'; + break; + case 'ALLOW COMMENTS': + $entry['allow_comments'] = ($data == '1') ? 'true' : 'false'; + break; + case 'DATE': + $entry['timestamp'] = strtotime($data); + if ( $entry['timestamp'] == 0 ) { + $entry['timestamp'] = time(); + } + break; + case 'BODY': + $entry['body'] = $data; + break; + case 'EXTENDED BODY': + $entry['extended'] = $data; + break; + case 'CONVERT BREAKS': + $entryprops['nl2br'] = ($data == '1') ? true : false; + break; + case 'PRIMARY CATEGORY': + case 'CATEGORY': + $cat_found = false; + if ( is_array($this->categories) ) { + for ( $y=0 ; $ycategories) ; $y++ ) { + if ( $this->categories[$y]['category_name'] == $data ) { + $cat_found = true; + break; + } + } + if ( $cat_found){ + if (!in_array($this->categories[$y]['categoryid'], $entry['categories']) ) { + //$entries[$n]['categories'][] = $categories[$y]['categoryid']; + $entry['categories'][] = $this->categories[$y]['categoryid']; + } + }else { + $tasks[] = sprintf(CREATE_CATEGORY, htmlspecialchars($data)); + } + } + break; + } + } + $entry['props'] = $entryprops; + return $entry; + } + + function import() { + global $serendipity; + + $force = ($this->data['force'] == 'true'); + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + // Rewritten to parse the file line by line. Can save quite some + // memory on large blogs + //$contents = file_get_contents($_FILES['serendipity']['tmp_name']['import']['mt_dat']); + + $authors = array(); + $this->categories = serendipity_fetchCategories(); + $tasks = array(); + + $entries = array(); + + $fh = fopen($_FILES['serendipity']['tmp_name']['import']['mt_dat'], 'r'); + + $n = 0; + + $entry = array(); + $el = ""; + $skip = false; + while (!feof($fh)){ + $line = fgets($fh, 8192); + if ($skip && (!preg_match('/^--------/', $line))) + continue; + if (preg_match('/^--------/', $line)){ + // We found the end marker of the current entry. Add to + // entries-Array + $entries[] = $this->doEntryWork($entry, $tasks); + $entry = array(); + $skip = false; + }elseif (preg_match('/^-----/', $line)){ + if (empty($el)){ + $line = fgets($fh, 8192); + if (preg_match('/^([A-Z]+):/', $line, $matches)){ + if ($matches[1] == 'COMMENT'){ + // todo: really handle comments. + $skip = true; + }else{ + $el = $matches[1]; + } + } + }else{ + $el = ""; + } + }else{ + if (empty($el) ){ + if (preg_match('/^([A-Z ]+): (.*)$/', $line, $matches)){ + $entry[$matches[1]] = $matches[2]; + } + }else{ + $entry[$el] .= $line; + } + } + + } + fclose($fh); + + if ( !sizeof($tasks) || $force == true ) { + serendipity_db_begin_transaction(); + foreach ( $entries as $entry ) { + $entryprops = $entry['props']; + unset($entry['props']); + if ( !is_int($r = serendipity_updertEntry($entry)) ) { + echo '
' . $r . '
'; + }else{ + $entry['id'] = $r; + // Let the plugins do some additional stuff. Here it's used with + // event_entryproperties in mind to setup the nl2br-stuff + serendipity_plugin_api::hook_event('backend_import_entry', $entry, $entryprops); + } + } + serendipity_db_end_transaction(true); + return true; + }else { + return '
  • '.implode('
  • ', array_unique($tasks)).'
'; + } + } +} +return 'Serendipity_Import_MovableType'; +?> diff --git a/include/admin/importers/nucleus.inc.php b/include/admin/importers/nucleus.inc.php new file mode 100644 index 0000000..7dce7ac --- /dev/null +++ b/include/admin/importers/nucleus.inc.php @@ -0,0 +1,244 @@ + 'Nucleus'); + var $data = array(); + var $inputFields = array(); + + + function Serendipity_Import_Nucleus($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix', + 'default' => 'nucleus_'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'native', + 'default' => $this->getCharsets()), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $categories = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED;; + } + + $nucdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$nucdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($nucdb)); + } + + /* Users */ + $res = @mysql_query("SELECT mnumber AS ID, mname AS user_login, mpassword AS user_pass, memail AS user_email, madmin AS user_level FROM {$this->data['prefix']}member;", $nucdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($nucdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => ($users[$x]['user_level'] >= 1) ? 1 : 0, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'password' => $users[$x]['user_pass']); // Nucleus uses md5, too. + + if ( $users[$x]['user_level'] < 1 ) { + $data['userlevel'] = USERLEVEL_EDITOR; + } else { + $data['userlevel'] = USERLEVEL_ADMIN; + } + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + $res = @mysql_query("SELECT catid AS cat_ID, cname AS cat_name, cdesc AS category_description FROM {$this->data['prefix']}category ORDER BY catid;", $nucdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($nucdb)); + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $categories[] = mysql_fetch_assoc($res); + } + + // Insert all categories as top level (we need to know everyone's ID before we can represent the hierarchy). + for ($x=0, $max_x = sizeof($categories) ; $x < $max_x ; $x++ ) { + $cat = array('category_name' => $categories[$x]['cat_name'], + 'category_description' => $categories[$x]['category_description'], + 'parentid' => 0, // <--- + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $categories[$x]['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + } + + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}item ORDER BY itime;", $nucdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($nucdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['ititle']), + 'isdraft' => ($entries[$x]['idraft'] != '1') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['iclosed'] == '1' ) ? 'false' : 'true', + 'timestamp' => strtotime($entries[$x]['itime']), + 'extended' => $this->strtr($entries[$x]['imore']), + 'body' => $this->strtr($entries[$x]['ibody'])); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['iauthor']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['realname']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + /* Entry/category */ + foreach ($categories as $category) { + if ($category['cat_ID'] == $entries[$x]['icat'] ) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}comment;", $nucdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($nucdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['inumber'] == $a['citem'] ) { + $author = ''; + $mail = ''; + if (!empty($a['cmember'])) { + foreach($users AS $user) { + if ($user['ID'] == $a['cmember']) { + $author = $user['user_login']; + $mail = $user['user_email']; + break; + } + } + } + + if (empty($author) && empty($mail)) { + $author = $a['cuser']; + $mail = $a['cmail']; + } + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => strtotime($a['ctime']), + 'author' => $author, + 'email' => $mail, + 'url' => $a['chost'], + 'ip' => $a['cip'], + 'status' => 'approved', + 'body' => $a['cbody'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } +} + +return 'Serendipity_Import_Nucleus'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/phpbb.inc.php b/include/admin/importers/phpbb.inc.php new file mode 100644 index 0000000..6604451 --- /dev/null +++ b/include/admin/importers/phpbb.inc.php @@ -0,0 +1,308 @@ + 'phpBB'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function Serendipity_Import_phpbb($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix', + 'default' => 'phpbb_'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'native', + 'default' => $this->getCharsets(false)), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $gdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$gdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($gdb)); + } + + /* Users */ + $res = @mysql_query("SELECT user_id AS ID, + username AS user_login, + user_password AS user_pass, + user_email AS user_email, + user_website AS user_url, + user_level + FROM {$this->data['prefix']}users + WHERE user_active = 1", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($gdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => 1, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'userlevel' => ($users[$x]['user_level'] == 0 ? USERLEVEL_EDITOR : USERLEVEL_ADMIN), + 'password' => $users[$x]['user_pass']); // MD5 compatible + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + echo mysql_error(); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + $res = @mysql_query("SELECT cat_id AS cat_ID, + cat_title AS cat_name + FROM {$this->data['prefix']}categories", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($gdb)); + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $parent_categories[] = mysql_fetch_assoc($res); + } + + for ($x=0, $max_x = sizeof($parent_categories) ; $x < $max_x ; $x++ ) { + $cat = array('category_name' => $parent_categories[$x]['cat_name'], + 'category_description' => '', + 'parentid' => 0, // <--- + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $parent_categories[$x]['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + } + + /* Categories */ + $res = @mysql_query("SELECT forum_id AS cat_ID, + cat_id AS parent_cat_id, + forum_name AS cat_name, + forum_desc AS category_description + FROM {$this->data['prefix']}forums ORDER BY forum_order;", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($gdb)); + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $categories[] = mysql_fetch_assoc($res); + } + + // Insert all categories as top level (we need to know everyone's ID before we can represent the hierarchy). + for ($x=0, $max_x = sizeof($categories) ; $x < $max_x ; $x++ ) { + $pcatid = 0; + foreach($parent_categories AS $pcat) { + if ($pcat['cat_ID'] == $categories[$x]['parent_cat_id']) { + $pcatid = $pcat['cat_ID']; + break; + } + } + + $cat = array('category_name' => $categories[$x]['cat_name'], + 'category_description' => $categories[$x]['category_description'], + 'parentid' => $pcatid, // <--- + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $categories[$x]['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + } + + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT t.topic_title, + t.topic_poster, + t.forum_id, + p.post_time, + pt.post_subject, + pt.post_text, + count(p.topic_id) AS ccount, + p.topic_id, + MIN(p.post_id) AS post_id + FROM {$this->data['prefix']}topics AS t + LEFT OUTER JOIN {$this->data['prefix']}posts AS p + ON t.topic_id = p.topic_id + LEFT OUTER JOIN {$this->data['prefix']}posts_text AS pt + ON pt.post_id = p.post_id + GROUP BY p.topic_id + ", $gdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($gdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['post_subject']), + 'isdraft' => 'false', + 'allow_comments' => 'true', + 'timestamp' => $entries[$x]['post_time'], + 'body' => $this->strtr($entries[$x]['post_text']), + 'extended' => '' + ); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['topic_poster']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + /* Entry/category */ + foreach ($categories as $category) { + if ($category['cat_ID'] == $entries[$x]['forum_id'] ) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + + /* Comments */ + $topic_id = $entries[$x]['topic_id']; + $c_res = @mysql_query("SELECT t.topic_title, + t.topic_poster, + p.poster_id, + t.forum_id, + p.post_time, + pt.post_subject, + pt.post_text, + pt.post_id + FROM {$this->data['prefix']}topics AS t + LEFT OUTER JOIN {$this->data['prefix']}posts AS p + ON t.topic_id = p.topic_id + LEFT OUTER JOIN {$this->data['prefix']}posts_text AS pt + ON pt.post_id = p.post_id + WHERE p.topic_id = {$topic_id} + ", $gdb); + if (!$c_res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($gdb)); + } + + while ($a = mysql_fetch_assoc($c_res)) { + if ($a['post_id'] == $entries[$x]['post_id']) { + continue; + } + $author = ''; + $mail = ''; + $url = ''; + + foreach($users AS $user) { + if ($user['ID'] == $a['poster_id']) { + $author = $user['user_login']; + $mail = $user['user_email']; + $url = $user['user_url']; + break; + } + } + + $comment = array('entry_id ' => $entries[$x]['entryid'], + 'parent_id' => 0, + 'timestamp' => $a['post_time'], + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'ip' => '', + 'status' => 'approved', + 'body' => $a['post_text'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entries[$x]['entryid'], true); + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } +} + +return 'Serendipity_Import_phpbb'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/pmachine.inc.php b/include/admin/importers/pmachine.inc.php new file mode 100644 index 0000000..25acc59 --- /dev/null +++ b/include/admin/importers/pmachine.inc.php @@ -0,0 +1,252 @@ + 'pMachine Pro 2.4'); + var $data = array(); + var $inputFields = array(); + + + function Serendipity_Import_pMachine($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix', + 'default' => 'pm_'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'native', + 'default' => $this->getCharsets()), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $categories = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $pmdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$pmdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($pmdb)); + } + + /* Users */ + $res = @mysql_query("SELECT id AS ID, + username AS user_login, + `password` AS user_pass, + email AS user_email, + status AS user_level, + url AS url + FROM {$this->data['prefix']}members", $pmdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($pmdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => ($users[$x]['user_level'] >= 3) ? 1 : 0, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'password' => $users[$x]['user_pass']); // pMachine uses md5, too. + + if ( $users[$x]['user_level'] < 12 ) { + $data['userlevel'] = USERLEVEL_EDITOR; + } else { + $data['userlevel'] = USERLEVEL_ADMIN; + } + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + $res = @mysql_query("SELECT id AS cat_ID, + category AS cat_name, + category AS category_description + FROM {$this->data['prefix']}categories ORDER BY id", $pmdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($pmdb)); + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $categories[] = mysql_fetch_assoc($res); + } + + // Insert all categories as top level (we need to know everyone's ID before we can represent the hierarchy). + for ($x=0, $max_x = sizeof($categories) ; $x < $max_x ; $x++ ) { + $cat = array('category_name' => $categories[$x]['cat_name'], + 'category_description' => $categories[$x]['category_description'], + 'parentid' => 0, // <--- + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $categories[$x]['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + } + + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}weblog ORDER BY t_stamp;", $pmdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($pmdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['title']), + 'isdraft' => ($entries[$x]['status'] == 'open') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['showcomments'] == '1' ) ? 'true' : 'false', + 'timestamp' => $entries[$x]['t_stamp'], + 'extended' => $this->strtr($entries[$x]['more']), + 'body' => $this->strtr($entries[$x]['body'])); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['member_id']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['username']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + /* Entry/category */ + foreach ($categories as $category) { + if ($category['cat_ID'] == $entries[$x]['category'] ) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}comments;", $pmdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($pmdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['post_id'] == $a['post_id'] ) { + $author = ''; + $mail = ''; + $url = ''; + if (!empty($a['member_id'])) { + foreach($users AS $user) { + if ($user['ID'] == $a['member_id']) { + $author = $user['user_login']; + $mail = $user['user_email']; + $url = $user['url']; + break; + } + } + } + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => $a['t_stamp'], + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'ip' => $a['comment_ip'], + 'status' => ($a['status'] == 'open' ? 'approved' : 'pending'), + 'body' => $a['body'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + if ($a['status'] == 'open') { + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } +} + +return 'Serendipity_Import_pMachine'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/sunlog.inc.php b/include/admin/importers/sunlog.inc.php new file mode 100644 index 0000000..0e8b3b3 --- /dev/null +++ b/include/admin/importers/sunlog.inc.php @@ -0,0 +1,276 @@ + 'Sunlog 0.4.4'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function getImportNotes() { + return 'Sunlog uses a crypted string to represent stored passwords. Thus, those passwords are incompatible with the MD5 hashing of Serendipity and can not be reconstructed. The passwords for all users have been set to "sunlog". You need to modify the passwords manually for each user, we are sorry for that inconvenience.
' + . '
' + . 'Sunlog has a granular control over access privileges which cannot be migrated to Serendipity. All Users will be migrated as Superusers, you may need to set them to editor or chief users manually after import.'; + } + + function Serendipity_Import_sunlog($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix', + 'default' => 'sunlog_'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'native', + 'default' => $this->getCharsets()), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $sunlogdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$sunlogdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($sunlogdb)); + } + + /* Users */ + $res = @mysql_query("SELECT id AS ID, + name AS user_login, + email AS user_email, + homepage AS user_url + FROM {$this->data['prefix']}users", $sunlogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($sunlogdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => 1, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'userlevel' => USERLEVEL_ADMIN, + 'password' => md5('sunlog')); + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + echo mysql_error(); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + if (!$this->importCategories(null)) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($sunlogdb)); + } + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}articles ORDER BY id;", $sunlogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($sunlogdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['title']), + 'isdraft' => ($entries[$x]['draft'] == '0') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['c_comments'] == '1' ) ? 'true' : 'false', + 'timestamp' => strtotime($entries[$x]['timestamp']), + 'body' => $this->strtr($entries[$x]['lead_converted']), + 'extended' => $this->strtr($entries[$x]['article_converted']), + ); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['author']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + } + + /* Even more category stuff */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}transfer_c;", $sunlogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($sunlogdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entrycat = mysql_fetch_assoc($res); + + $entryid = 0; + $categoryid = 0; + foreach($entries AS $entry) { + if ($entry['id'] == $entrycat['article']) { + $entryid = $entry['entryid']; + break; + } + } + + foreach($this->categories AS $category) { + if ($category['id'] == $entrycat['category']) { + $categoryid = $category['categoryid']; + } + } + + if ($entryid > 0 && $categoryid > 0) { + $data = array('entryid' => $entryid, + 'categoryid' => $categoryid); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}c_comments;", $sunlogdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($sunlogdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['id'] == $a['for_entry'] ) { + $author = ''; + $mail = ''; + $url = ''; + + foreach($users AS $user) { + if ($user['ID'] == $a['user']) { + $author = $user['user_login']; + $mail = $user['user_email']; + $url = $user['user_url']; + break; + } + } + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => strtotime($a['insertdate']), + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'ip' => '', + 'status' => 'approved', + 'body' => $a['comment'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } + + function importCategories($parentid = 0, $new_parentid = 0) { + $where = "WHERE parent = '" . mysql_escape_string($parentid) . "'"; + + $res = mysql_query("SELECT * FROM {$this->data['prefix']}categories + " . $where); + if (!$res) { + echo mysql_error(); + return false; + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $row = mysql_fetch_assoc($res); + $cat = array('category_name' => $row['title'], + 'category_description' => $row['optional_1'] . ' ' . $row['optional_2'] . ' ' . $row['optional_3'], + 'parentid' => (int)$new_parentid, + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $row['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + $this->categories[] = $row; + $this->importCategories($row['id'], $row['categoryid']); + } + + return true; + } +} + +return 'Serendipity_Import_sunlog'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/textpattern.inc.php b/include/admin/importers/textpattern.inc.php new file mode 100644 index 0000000..d17316f --- /dev/null +++ b/include/admin/importers/textpattern.inc.php @@ -0,0 +1,251 @@ + 'Textpattern 1.0rc1'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function getImportNotes() { + return 'Textpattern uses MySQLs native PASSWORD() function to save passwords. Thus, those passwords are incompatible with the MD5 hashing of Serendipity. The passwords for all users have been set to "txp". You need to modify the passwords manually for each user, we are sorry for that inconvenience.
'; + } + + function Serendipity_Import_textpattern($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix', + 'default' => ''), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'UTF-8', + 'default' => $this->getCharsets(true)), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $txpdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$txpdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($txpdb)); + } + + /* Users */ + $res = @mysql_query("SELECT user_id AS ID, + name AS user_login, + `pass` AS user_pass, + email AS user_email, + privs AS user_level + FROM {$this->data['prefix']}txp_users", $txpdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($txpdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => ($users[$x]['user_level'] <= 4) ? 1 : 0, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'email' => $users[$x]['user_email'], + 'password' => md5('txp')); // blame TXP for using PASSWORD(). + + if ( $users[$x]['user_level'] == 1 ) { + $data['userlevel'] = USERLEVEL_EDITOR; + } elseif ($users[$x]['user_level'] == 2) { + $data['userlevel'] = USERLEVEL_CHIEF; + } else { + $data['userlevel'] = USERLEVEL_ADMIN; + } + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + if (!$this->importCategories('root')) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($txpdb)); + } + serendipity_rebuildCategoryTree(); + + /* Entries */ + // Notice: Textpattern doesn't honor the prefix for this table. Wicked system. + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}textpattern ORDER BY Posted;", $txpdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($txpdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['Title']), + 'isdraft' => ($entries[$x]['Status'] == '4') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['Annotate'] == '1' ) ? 'true' : 'false', + 'timestamp' => strtotime($entries[$x]['Posted']), + 'extended' => $this->strtr($entries[$x]['Body_html']), + 'body' => $this->strtr($entries[$x]['Excerpt'])); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['user_login'] == $entries[$x]['AuthorID']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + + /* Entry/category */ + foreach ($this->categories as $category) { + if ($category['name'] == $entries[$x]['Category1'] || $category['name'] == $entries[$x]['Category2']) { + $data = array('entryid' => $entries[$x]['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}txp_discuss;", $txpdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($txpdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['ID'] == $a['parentid'] ) { + $author = $a['name']; + $mail = $a['email']; + $url = $a['web']; + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => strtotime($a['posted']), + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'ip' => $a['ip'], + 'status' => ($a['visible'] == '1' ? 'approved' : 'pending'), + 'body' => $a['message'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + if ($a['visible'] == '1') { + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } + + function importCategories($parentname = 'root', $parentid = 0) { + $res = mysql_query("SELECT * FROM {$this->data['prefix']}txp_category + WHERE parent = '" . mysql_escape_string($parentname) . "' AND type = 'article'"); + if (!$res) { + echo mysql_error(); + return false; + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $row = mysql_fetch_assoc($res); + $cat = array('category_name' => $row['name'], + 'category_description' => $row['name'], + 'parentid' => $parentid, + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $row['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + $this->categories[] = $row; + $this->importCategories($row['name'], $row['categoryid']); + } + + return true; + } +} + +return 'Serendipity_Import_textpattern'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/importers/wordpress.inc.php b/include/admin/importers/wordpress.inc.php new file mode 100644 index 0000000..8661117 --- /dev/null +++ b/include/admin/importers/wordpress.inc.php @@ -0,0 +1,254 @@ + 'WordPress'); + var $data = array(); + var $inputFields = array(); + + + function Serendipity_Import_WordPress($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => INSTALL_DBPREFIX, + 'type' => 'input', + 'name' => 'prefix'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'UTF-8', + 'default' => $this->getCharsets(true)), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'true'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $this->data['prefix'] = serendipity_db_escape_string($this->data['prefix']); + $users = array(); + $categories = array(); + $entries = array(); + + if ( !extension_loaded('mysql') ) { + return MYSQL_REQUIRED;; + } + + $wpdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if ( !$wpdb ) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if ( !@mysql_select_db($this->data['name']) ) { + return sprintf(COULDNT_SELECT_DB, mysql_error($wpdb)); + } + + /* Users */ + $res = @mysql_query("SELECT ID, user_login, user_pass, user_email, user_level FROM {$this->data['prefix']}users;", $wpdb); + if ( !$res ) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($wpdb)); + } + + for ( $x=0 ; $x ($users[$x]['user_level'] >= 1) ? 1 : 0, + 'realname' => $users[$x]['user_login'], + 'username' => $users[$x]['user_login'], + 'password' => $users[$x]['user_pass']); // WP uses md5, too. + + if ( $users[$x]['user_level'] <= 1 ) { + $data['userlevel'] = USERLEVEL_EDITOR; + } elseif ( $users[$x]['user_level'] < 5 ) { + $data['userlevel'] = USERLEVEL_CHIEF; + } else { + $data['userlevel'] = USERLEVEL_ADMIN; + } + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + $res = @mysql_query("SELECT cat_ID, cat_name, category_description, category_parent FROM {$this->data['prefix']}categories ORDER BY category_parent, cat_ID;", $wpdb); + if ( !$res ) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($wpdb)); + } + + // Get all the info we need + for ( $x=0 ; $x $categories[$x]['cat_name'], + 'category_description' => $categories[$x]['category_description'], + 'parentid' => 0, // <--- + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $categories[$x]['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + } + + // There has to be a more efficient way of doing this... + foreach ( $categories as $cat ) { + if ( $cat['category_parent'] != 0 ) { + // Find the parent + $par_id = 0; + foreach ( $categories as $possible_par ) { + if ( $possible_par['cat_ID'] == $cat['category_parent'] ) { + $par_id = $possible_par['categoryid']; + break; + } + } + + if ( $par_id != 0 ) { + serendipity_db_query("UPDATE {$serendipity['dbPrefix']}category SET parentid={$par_id} WHERE categoryid={$cat['categoryid']};"); + } // else { echo "D'oh! " . random_string_of_profanity(); } + } + } + + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}posts ORDER BY post_date;", $wpdb); + if ( !$res ) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($wpdb)); + } + + for ( $x=0 ; $x $this->decode($entries[$x]['post_title']), // htmlentities() is called later, so we can leave this. + 'isdraft' => ($entries[$x]['post_status'] == 'publish') ? 'false' : 'true', + 'allow_comments' => ($entries[$x]['comment_status'] == 'open' ) ? 'true' : 'false', + 'timestamp' => strtotime($entries[$x]['post_date']), + 'body' => $this->strtr($entries[$x]['post_content'])); + + foreach ( $users as $user ) { + if ( $user['ID'] == $entries[$x]['post_author'] ) { + $entry['authorid'] = $user['authorid']; + break; + } + } + + if ( !is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry)) ) { + return $entries[$x]['entryid']; + } + } + + /* Entry/category */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}post2cat;", $wpdb); + if ( !$res ) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($wpdb)); + } + + while ( $a = mysql_fetch_assoc($res) ) { + foreach ( $categories as $category ) { + if ( $category['cat_ID'] == $a['category_id'] ) { + foreach ( $entries as $entry ) { + if ( $a['post_id'] == $entry['ID'] ) { + $data = array('entryid' => $entry['entryid'], + 'categoryid' => $category['categoryid']); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + break; + } + } + break; + } + } + } + + /* Comments */ + $res = @mysql_query("SELECT * FROM {$this->data['prefix']}comments;", $wpdb); + if ( !$res ) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($wpdb)); + } + + while ( $a = mysql_fetch_assoc($res) ) { + foreach ( $entries as $entry ) { + if ( $entry['ID'] == $a['comment_post_ID'] ) { + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => strtotime($a['comment_date']), + 'author' => $a['comment_author'], + 'email' => $a['comment_author_email'], + 'url' => $a['comment_author_url'], + 'ip' => $a['comment_author_IP'], + 'status' => (empty($a['comment_approved']) || $a['comment_approved'] == '1') ? 'approved' : 'pending', + 'subscribed'=> 'false', + 'body' => $a['comment_content'], + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + if ($comment['status'] == 'approved') { + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } +} + +return 'Serendipity_Import_WordPress'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/installer.inc.php b/include/admin/installer.inc.php new file mode 100644 index 0000000..e454cb0 --- /dev/null +++ b/include/admin/installer.inc.php @@ -0,0 +1,456 @@ +'. $s .''; + } + if ( $result === S9Y_I_WARNING ) { + return ''. $s .''; + } + if ( $result === S9Y_I_ERROR ) { + $errorCount++; + return ''. $s .''; + } +} + +/* If register_globals is enabled and we use the dual GET/POST submission method, we will + receive the value of the POST-variable inside the GET-variable, which is of course unwanted. + Thus we transfer a new variable GETSTEP via POST and set that to an internal GET value. */ +if (!empty($serendipity['POST']['getstep']) && is_numeric($serendipity['POST']['getstep'])) { + $serendipity['GET']['step'] = $serendipity['POST']['getstep']; +} + +/* From configuration to install */ +if ( sizeof($_POST) > 1 && $serendipity['GET']['step'] == 3 ) { + /* One problem, if the user chose to do an easy install, not all config vars has been transfered + Therefore we fetch all config vars with their default values, and merge them with our POST data */ + + $config = serendipity_parseTemplate(S9Y_CONFIG_TEMPLATE); + foreach ( $config as $category ) { + foreach ( $category['items'] as $item ) { + if ( !isset($_POST[$item['var']]) ) { + $_POST[$item['var']] = serendipity_query_default($item['var'], $item['default']); + } + } + } + + if ( is_array($errors = serendipity_checkInstallation()) ) { + foreach ( $errors as $error ) { + echo '
'. $error .'
'; + } + + $from = $_POST; + /* Back to configuration, user did something wrong */ + $serendipity['GET']['step'] = $serendipity['POST']['step']; + } else { + /* We're good, move to install process */ + $serendipity['GET']['step'] = 3; + } +} + +if ( (int)$serendipity['GET']['step'] == 0 ) { +?> +. +
. +
. +
+
+
- -

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PHP version >= 4.1.2=') ) { + echo serendipity_installerResultDiagnose(S9Y_I_SUCCESS, YES .', '. phpversion()); + } else { + echo serendipity_installerResultDiagnose(S9Y_I_ERROR, NO); + } + ?>
Database extensions
Session extension
PCRE extension
GDlib extension
OpenSSL extension
mbstring extension
iconv extension
zlib extension
Imagemagick binary
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
safe_mode
register_globals
magic_quotes_gpc
magic_quotes_runtime
session.use_trans_sid
allow_url_fopen
file_uploads
post_max_size10M= (10*1024*1024) ) { + echo serendipity_installerResultDiagnose(S9Y_I_SUCCESS, ini_get('post_max_size')); + } else { + echo serendipity_installerResultDiagnose(S9Y_I_WARNING, ini_get('post_max_size')); + } + ?>
upload_max_filesize10M= (10*1024*1024) ) { + echo serendipity_installerResultDiagnose(S9Y_I_SUCCESS, ini_get('upload_max_filesize')); + } else { + echo serendipity_installerResultDiagnose(S9Y_I_WARNING, ini_get('upload_max_filesize')); + } + ?>
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Execute Imagemagick binary
+ + +
+ + +
+ 0 ) { ?> +
+

+ + : +

-

+ +
+
+ + +
+ + + +
+
+ + +
+ + + +
+
+ + +'. THEY_DO .', '. WONT_INSTALL_DB_AGAIN; + echo '
'; + echo '
'; + } else { + echo ' '. THEY_DONT .''; + echo '
'; + + echo CREATE_DATABASE; + serendipity_installDatabase(); + echo ' ' . DONE . '
'; + + echo sprintf(CREATING_PRIMARY_AUTHOR, $_POST['user']) .'...'; + $authorid = serendipity_addAuthor($_POST['user'], $_POST['pass'], $_POST['realname'], $_POST['email'], USERLEVEL_ADMIN); + $mail_comments = (serendipity_db_bool($_POST['want_mail']) ? 1 : 0); + serendipity_set_user_var('mail_comments', $mail_comments, $authorid); + serendipity_set_user_var('mail_trackbacks', $mail_comments, $authorid); + serendipity_set_user_var('right_publish', 1, $authorid); + + + echo ' ' . DONE . '
'; + + echo SETTING_DEFAULT_TEMPLATE .'... '; + serendipity_set_config_var('template', $serendipity['defaultTemplate']); + echo ' ' . DONE . '
'; + + echo INSTALLING_DEFAULT_PLUGINS .'... '; + include_once S9Y_INCLUDE_PATH . 'include/plugin_api.inc.php'; + serendipity_plugin_api::register_default_plugins(); + echo ' ' . DONE . '
'; + + } + + echo sprintf(ATTEMPT_WRITE_FILE, '.htaccess') . '... '; + $errors = serendipity_installFiles($basedir); + if ( $errors === true ) { + echo ' ' . DONE . '
'; + } else { + echo ' ' . FAILED . '
'; + foreach ( $errors as $error ) { + echo '
'. $error .'
'; + } + } + + if ( serendipity_updateConfiguration() ) { + echo '
'. SERENDIPITY_INSTALLED .'
'; + echo ''; + echo '
'. THANK_YOU_FOR_CHOOSING .'
'; + } else { + echo '
'. ERROR_DETECTED_IN_INSTALL .'
'; + } +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/admin/overview.inc.php b/include/admin/overview.inc.php new file mode 100644 index 0000000..bcc32a1 --- /dev/null +++ b/include/admin/overview.inc.php @@ -0,0 +1,18 @@ + + + . + + + + diff --git a/include/admin/personal.inc.php b/include/admin/personal.inc.php new file mode 100644 index 0000000..dfe1d20 --- /dev/null +++ b/include/admin/personal.inc.php @@ -0,0 +1,46 @@ + $serendipity['serendipityUserlevel']) { + echo '
' . CREATE_NOT_AUTHORIZED_USERLEVEL . '
'; + } else { + foreach($config as $category) { + foreach ($category['items'] as $item) { + if ( serendipity_checkConfigItemFlags($item, 'local') ) { + serendipity_set_user_var($item['var'], $_POST[$item['var']], $serendipity['authorid'], true); + } + + if ( serendipity_checkConfigItemFlags($item, 'configuration') ) { + serendipity_set_config_var($item['var'], $_POST[$item['var']], $serendipity['authorid']); + } + } + } + $from = $_POST; +?> +
+ + +
+ +
+
+ + diff --git a/include/admin/plugins.inc.php b/include/admin/plugins.inc.php new file mode 100644 index 0000000..6b19ecb --- /dev/null +++ b/include/admin/plugins.inc.php @@ -0,0 +1,711 @@ + +
+ + + + + + + + + += USERLEVEL_ADMIN); + $is_plugin_editable = ($is_plugin_owner || $plugin_data['authorid'] == '0'); + + if (!is_object($plugin)) { + $name = ERROR . ': ' . $plugin_data['name']; + $desc = ERROR . '!'; + } else { + /* query for its name, description and configuration data */ + + $bag = new serendipity_property_bag; + $plugin->introspect($bag); + + $name = htmlspecialchars($bag->get('name')); + $desc = htmlspecialchars($bag->get('description')); + + $title = serendipity_plugin_api::get_plugin_title($plugin, '[' . $name . ']'); + + if ($bag->is_set('configuration') && ($plugin->protected === FALSE || $plugin_data['authorid'] == '0' || $plugin_data['authorid'] == $serendipity['authorid'] || $serendipity['serendipityUserlevel'] >= USERLEVEL_ADMIN)) { + $can_configure = true; + } else { + $can_configure = false; + } + } + + if ($event_only) { + $place = ''; + $event_only_uri = '&serendipity[event_plugin]=true'; + } else { + $place = placement_box('serendipity[placement][' . $plugin_data['name'] . ']', $plugin_data['placement'], $is_plugin_editable); + $event_only_uri = ''; + } + + /* Only display UP/DOWN links if there's somewhere for the plugin to go */ + if ($sort_idx == 0) { + $moveup = ' '; + } else { + $moveup = '' . UP . ''; + } + + if ($sort_idx == (count($plugins)-1)) { + $movedown = ' '; + } else { + $movedown = ($moveup != '' ? ' ' : '') . ''. DOWN .''; + } +?> + + + + + + + + + + + + +
   + +
+
+ + + +   + +
+
+ + + +   + + + + + + +
+
+
+
+
+ + +
+
+ + + LEFT, + 'right' => RIGHT, + 'hide' => HIDDEN + ); + + $x = "\n\n"; +} + +if (isset($_GET['serendipity']['plugin_to_move']) && isset($_GET['submit'])) { + if (isset($_GET['serendipity']['event_plugin'])) { + $plugins = serendipity_plugin_api::enum_plugins('event', false); + } else { + $plugins = serendipity_plugin_api::enum_plugins('event', true); + } + + /* Renumber the sort order to be certain that one actually exists + Also look for the one we're going to move */ + $idx_to_move = -1; + for($idx = 0; $idx < count($plugins); $idx++) { + $plugins[$idx]['sort_order'] = $idx; + + if ($plugins[$idx]['name'] == $_GET['serendipity']['plugin_to_move']) { + $idx_to_move = $idx; + } + } + + /* If idx_to_move is still -1 then we never found it (shouldn't happen under normal conditions) + Also make sure the swaping idx is around */ + if ($idx_to_move >= 0 && (($_GET['submit'] == 'move down' && $idx_to_move < (count($plugins)-1)) || ($_GET['submit'] == 'move up' && $idx_to_move > 0))) { + + /* Swap the one were moving with the one that's in the spot we're moving to */ + $tmp = $plugins[$idx_to_move]['sort_order']; + + $plugins[$idx_to_move]['sort_order'] = (int)$plugins[$idx_to_move + ($_GET['submit'] == 'move down' ? 1 : -1)]['sort_order']; + $plugins[$idx_to_move + ($_GET['submit'] == 'move down' ? 1 : -1)]['sort_order'] = (int)$tmp; + + /* Update table */ + foreach($plugins as $plugin) { + $key = serendipity_db_escape_string($plugin['name']); + serendipity_db_query("UPDATE {$serendipity['dbPrefix']}plugins SET sort_order = {$plugin['sort_order']} WHERE name='$key'"); + } + } + + /* TODO: Moving The first Right oriented plugin up, + or the last left oriented plugin down + should not be displayed to the user as an option. + It's a behavior which really has no meaning. */ +} + +if (isset($_GET['serendipity']['plugin_to_conf'])) { + /* configure a specific instance */ + $plugin =& serendipity_plugin_api::load_plugin($_GET['serendipity']['plugin_to_conf']); + + if (!($plugin->protected === FALSE || $plugin->serendipity_owner == '0' || $plugin->serendipity_owner == $serendipity['authorid'] || $serendipity['serendipityUserlevel'] >= USERLEVEL_ADMIN)) { + return; + } + + $bag = new serendipity_property_bag; + $plugin->introspect($bag); + $name = htmlspecialchars($bag->get('name')); + $desc = htmlspecialchars($bag->get('description')); + + $config_names = $bag->get('configuration'); + + if (isset($_POST['SAVECONF'])) { + /* enum properties and set their values */ + + foreach ($config_names as $config_item) { + $cbag = new serendipity_property_bag; + if ($plugin->introspect_config_item($config_item, $cbag)) { + $plugin->set_config($config_item, $_POST['serendipity']['plugin'][$config_item]); + } + } + + $plugin->cleanup(); + } +?> + + +
+ + +
+ + + + + + + + + + +
+
+ +introspect_config_item($config_item, $cbag); + + $cname = htmlspecialchars($cbag->get('name')); + $cdesc = htmlspecialchars($cbag->get('description')); + $value = $plugin->get_config($config_item, 'unset'); + $lang_direction = htmlspecialchars($cbag->get('lang_direction')); + + if (empty($lang_direction)) { + $lang_direction = LANG_DIRECTION; + } + + /* Apparently no value was set for this config item */ + if ($value === 'unset') { + /* Try and the default value for the config item */ + $value = $cbag->get('default'); + + /* Still, we don't have a value, try and get (bool)false - from an old plugin */ + if ($value === '') { + $value = $plugin->get_config($config_item, false, true); + } + } + $hvalue = (isset($_POST['serendipity']['plugin'][$config_item]) ? htmlspecialchars($_POST['serendipity']['plugin'][$config_item]) : htmlspecialchars($value)); + $radio = array(); + $select = array(); + $per_row = null; + + switch ($cbag->get('type')) { + case 'seperator': +?> + + + +get('select_values'); +?> + + + + + 0) { + $radio = $cbag->get('radio'); + } + + if (empty($per_row)) { + $per_row = $cbag->get('radio_per_row'); + if (empty($per_row)) { + $per_row = 2; + } + } +?> + + + + + + + + + + + + + + + + + +get('type') == 'html') { + serendipity_emit_htmlarea_code('nugget', 'nugget'); + } + break; + + case 'content': + ?> +

+ +
  + +
+
+ +
+
+ +
  + +
+ $radio_value) { + $id = htmlspecialchars($config_item . $radio_value); + $counter++; + $checked = ""; + + if ($radio_value == 'true' && ($hvalue === '1' || $hvalue === 'true')) { + $checked = " checked"; + } elseif ($radio_value == 'false' && ($hvalue === '' || $hvalue === 'false')) { + $checked = " checked"; + } elseif ($radio_value == $hvalue) { + $checked = " checked"; + } + + if ($counter == 1) { +?> +
+ + title="" /> + + +
+ +
+ +
  +
+
+ +
+
+    +
+
+ +
+
get('default'); ?>
+
+
+ +
+ +
+ example() ?> +
+ + +
+ + +

+ +

+ + +
+
+ + + + + + + 0) { + $pluginstack = $foreignPlugins['pluginstack']; + $errorstack = $foreignPlugins['errorstack']; + } else { + $plugins = serendipity_plugin_api::get_installed_plugins(); + + $errorstack = $pluginstack = array(); + $classes = serendipity_plugin_api::enum_plugin_classes(($serendipity['GET']['type'] == 'event')); + foreach ($classes as $class_data) { + $plugin =& serendipity_plugin_api::load_plugin($class_data['name'], null, $class_data['pluginPath']); + if (is_object($plugin)) { + $bag = new serendipity_property_bag; + $plugin->introspect($bag); + $pluginstack[] = array('plugin_class' => $class_data['name'], + 'class_name' => get_class($plugin), + 'name' => $bag->get('name'), + 'desc' => $bag->get('description'), + 'installable' => !($bag->get('stackable') === false && in_array($class_data['name'], $plugins)), + 'author' => $bag->get('author'), + 'version' => $bag->get('version'), + 'requirements' => $bag->get('requirements'), + 'website' => $bag->get('website'), + 'pluginPath' => $class_data['pluginPath']); + } else { + $errorstack[] = $class_data['name']; + } + } + } + + usort($pluginstack, 'serendipity_pluginListSort'); + foreach($errorstack as $e_idx => $e_name) { + echo ERROR . ': ' . $e_name . '
'; + } +?> +') ) { + $notice['requirements_failures'][] = 's9y ' . $plug['requirements']['serendipity']; + } + + if ( !empty($plug['requirements']['serendipity']) && version_compare($plug['requirements']['php'], phpversion(), '>') ) { + $notice['requirements_failures'][] = 'PHP ' . $plug['requirements']['php']; + } + + /* Enable after Smarty 2.6.7 upgrade. + * TODO: How can we get current Smarty version here? $smarty is not created! + if ( !empty($plug['requirements']['smarty']) && version_compare($plug['requirements']['smarty'], '2.6.7', '>') ) { + $notice['requirements_failures'][] = 'Smarty: ' . $plug['requirements']['smarty']; + } + */ + + if (count($notice['requirements_failures']) > 0) { + $plug['requirements_fail'] = true; + } + +?> + + + + +
PluginAction
> + + + + + + + + + 0) { ?> + + + + +
+ + + + <?php echo UPGRADE ?> + + <?php echo INSTALL ?> + + + +
+
+ + $placement) { + serendipity_plugin_api::update_plugin_placement( + addslashes($plugin_name), + addslashes($placement) + ); + + serendipity_plugin_api::update_plugin_owner( + addslashes($plugin_name), + addslashes($_POST['serendipity']['ownership'][$plugin_name]) + ); + } + } + + if (isset($serendipity['GET']['install_plugin'])) { + $authorid = $serendipity['authorid']; + if ($serendipity['serendipityUserlevel'] >= USERLEVEL_ADMIN) { + $authorid = '0'; + } + + $fetchplugin_data = array('GET' => &$serendipity['GET'], + 'install' => true); + serendipity_plugin_api::hook_event('backend_plugins_fetchplugin', $fetchplugin_data); + + if ($fetchplugin_data['install']) { + $inst = serendipity_plugin_api::create_plugin_instance($serendipity['GET']['install_plugin'], null, (serendipity_plugin_api::is_event_plugin($serendipity['GET']['install_plugin']) ? 'event': 'right'), $authorid, serendipity_db_escape_string($serendipity['GET']['pluginPath'])); + + /* Load the new plugin */ + $plugin = &serendipity_plugin_api::load_plugin($inst); + $bag = new serendipity_property_bag; + $plugin->introspect($bag); + + if ($bag->is_set('configuration')) { + /* Only play with the plugin if there is something to play with */ + echo ''; + die(); + } else { + /* If no config is available, redirect to plugin overview, because we do not want that a user can install the plugin a second time via accidental browser refresh */ + echo ''; + die(); + } + } + } + + if (isset($_POST['REMOVE'])) { + if (is_array($_POST['serendipity']['plugin_to_remove'])) { + foreach ($_POST['serendipity']['plugin_to_remove'] as $key) { + $plugin =& serendipity_plugin_api::load_plugin($key); + + if ($plugin->serendipity_owner == '0' || $plugin->serendipity_owner == $serendipity['authorid'] || $serendipity['serendipityUserlevel'] >= USERLEVEL_ADMIN) { + serendipity_plugin_api::remove_plugin_instance($key); + } + } + } + } +?> + +
+
+ +

+ + + + +
+
+ +

+ + + + + diff --git a/include/admin/templates.inc.php b/include/admin/templates.inc.php new file mode 100644 index 0000000..2587edd --- /dev/null +++ b/include/admin/templates.inc.php @@ -0,0 +1,91 @@ +'. sprintf(TEMPLATE_SET, $serendipity['GET']['theme']) .''; +} +?> + +'. WARNING_TEMPLATE_DEPRECATED .''; + } +?> + + + +'; + } else { + $preview = ' '; + } + + $unmetRequirements = array(); + if ( isset($info['require serendipity']) && version_compare($info['require serendipity'], serendipity_getCoreVersion($serendipity['version']), '>') ) { + $unmetRequirements[] = 'Serendipity '. $info['require serendipity']; + } + + /* TODO: Smarty versioncheck */ + + $class = (($i % 2) ? 'even' : 'uneven'); + +?> +
+ + + + + + + + + + +
+ + <?php echo SET_AS_TEMPLATE ?> + + + +
+ :
+ : +
+
+ + diff --git a/include/admin/upgrader.inc.php b/include/admin/upgrader.inc.php new file mode 100644 index 0000000..ede20b1 --- /dev/null +++ b/include/admin/upgrader.inc.php @@ -0,0 +1,336 @@ +'. $s .''; + } + + if ( $result === S9Y_U_WARNING ) { + return ''. $s .''; + } + + if ( $result === S9Y_U_ERROR ) { + $errorCount++; + return ''. $s .''; + } +} + +// Setting this value to 'FALSE' is recommended only for SHARED BLOG INSTALLATIONS. This enforces all shared blogs with a common +// codebase to only allow upgrading, no bypassing and thus causing instabilities. +// This variable can also be set as $serendipity['UpgraderShowAbort'] inside serendipity_config_local.inc.php to prevent +// your setting being changed when updating serendipity in first place. +$showAbort = (isset($serendipity['UpgraderShowAbort']) ? $serendipity['UpgraderShowAbort'] : true); + +$abortLoc = $serendipity['serendipityHTTPPath'] . 'serendipity_admin.php?serendipity[action]=ignore'; +$upgradeLoc = $serendipity['serendipityHTTPPath'] . 'serendipity_admin.php?serendipity[action]=upgrade'; + +/* Functions which needs to be run if installed version is equal or lower */ +$tasks = array(array('version' => '0.5.1', + 'function' => 'serendipity_syncThumbs', + 'title' => 'Image Sync', + 'desc' => 'Version 0.5.1 introduces image sync with the database'. "\n" . + 'With your permission I would like to perform the image sync'), + + array('version' => '0.6.5', + 'function' => 'serendipity_rebuildCategoryTree', + 'title' => 'Nested subcategories, post to multiple categories', + 'desc' => 'This update will update the categories table of your database and update the relations from entries to categories.'. "\n" . + 'This is a possibly dangerous task to perform, so make sure you have a backup of your database!'), + + array('version' => '0.6.8', + 'function' => 'serendipity_installFiles', + 'title' => 'Update of .htaccess file', + 'desc' => 'Changes were made to the .htaccess file, you need to regenerate it'), + + array('version' => '0.6.10', + 'functon' => 'serendipity_installFiles', + 'title' => 'Update of .htaccess file', + 'desc' => 'Changes were made to the .htaccess file, you need to regenerate it'), + + array('version' => '0.6.12', + 'function' => 'serendipity_installFiles', + 'title' => 'Update of .htaccess file', + 'desc' => 'Changes were made to the .htaccess file, you need to regenerate it'), + + array('version' => '0.8-alpha3', + 'function' => 'serendipity_removeFiles', + 'title' => 'Removal of obsolete files', + 'arguments' => array($obsolete_files), + 'desc' => 'The directory structure has been reworked. The following files will be moved to a folder called "backup". If you made manual changes to those files, be sure to read the file docs/CHANGED_FILES to re-implement your changes.
' . implode(', ', $obsolete_files) . '
'), + + array('version' => '0.8-alpha4', + 'function' => 'serendipity_removeFiles', + 'title' => 'Removal of serendipity_entries.php', + 'arguments' => array(array('serendipity_entries.php')), + 'desc' => 'In order to implement the new administration, we have to remove the leftovers'), + + array('version' => '0.8-alpha4', + 'function' => 'serendipity_installFiles', + 'title' => 'Update of .htaccess file', + 'desc' => 'In order to implement the new administration, changes were made to the .htaccess file, you need to regenerate it'), + + array('version' => '0.8-alpha7', + 'function' => 'serendipity_removeObsoleteVars', + 'title' => 'Removal of obsolete configuration variables', + 'desc' => 'Because of the new configuration parsing methods, some database variables are now only stored in serendipity_config_local.inc.php. Those obsolete variables will be removed from the database'), + + array('version' => '0.8-alpha8', + 'function' => array('serendipity_plugin_api', 'create_plugin_instance'), + 'arguments' => array('serendipity_event_browsercompatibility', null, 'event'), + 'title' => 'Plugin for Browser Compatibility', + 'desc' => 'Includes some CSS-behaviours and other functions to maximize browser compatibility'), + + array('version' => '0.8-alpha9', + 'function' => 'serendipity_installFiles', + 'title' => 'Update of .htaccess file', + 'desc' => 'In order to implement author views, changes were made to the .htaccess file, you need to regenerate it'), + + array('version' => '0.8-alpha11', + 'function' => 'serendipity_installFiles', + 'title' => 'Update of .htaccess file', + 'desc' => 'In order to implement URL rewrite improvement, changes were made to the .htaccess file, you need to regenerate it'), + + array('version' => '0.8-alpha12', + 'type' => 'TEMPLATE_NOTICE', + 'function' => '', + 'title' => 'TEMPLATE_NOTICE: The template file "entries.tpl" has changed.', + 'desc' => 'Authors can now have longer real names instead of only their loginnames. Those new fields need to be displayed in your Template, if you manually created one. Following variables were changes: + {$entry.username} => {$entry.author} + {$entry.link_username} => {$entry.link_author} + Those variables have been replaced in all bundled templates and those in our additional_themes repository. + ' . serendipity_upgraderResultDiagnose(S9Y_U_WARNING, 'Manual user interaction is required! This can NOT be done automatically!')), + + array('version' => '0.8-beta3', + 'function' => 'serendipity_fixPlugins', + 'arguments' => array('markup_column_names'), + 'title' => 'Configuration options of markup plugins', + 'desc' => 'Because of the latest multilingual improvements in Serendipity, the database key names for certain configuration directives only found in markup plugins need to be renamed.
' + . 'This will be automatically handled by Serendipity for all internally bundled and external plugins. If you are using the external plugins "GeShi" and "Markdown", please make sure you will upgrade to their latest versions!
' + . 'We also advise that you check the plugin configuration of all your markup plugins (like emoticate, nl2br, s9ymarkup, bbcode) and see if the settings you made are all properly migrated.'), + + array('version' => '0.8-beta5', + 'function' => 'serendipity_smarty_purge', + 'title' => 'Clear Smarty compiled templates', + 'desc' => 'Smarty has been upgraded to its latest stable version, and we therefore need to purge all compiled templates and cache'), +); + +/* Fetch SQL files which needs to be run */ +$dir = opendir(S9Y_INCLUDE_PATH . 'sql/'); +$tmpfiles = array(); +while (($file = readdir($dir)) !== false ) { + if (preg_match('@db_update_(.*)_(.*)_(.*).sql@', $file, $res)) { + list(, $verFrom, $verTo, $dbType) = $res; + if (version_compare($verFrom, $serendipity['versionInstalled']) >= 0) { + $tmpFiles[$verFrom][$dbType] = $file; + } + } +} + +$sqlfiles = array(); +if (is_array($tmpFiles)) { + foreach ($tmpFiles as $version => $db) { + if (array_key_exists($serendipity['dbType'], $db) === false ) { + $sqlfiles[$version] = $db['mysql']; + } else { + $sqlfiles[$version] = $db[$serendipity['dbType']]; + } + } +} + +@uksort($sqlfiles, "strnatcasecmp"); + +if ($serendipity['GET']['action'] == 'ignore') { + /* Todo: Don't know what to put here? */ + +} elseif ($serendipity['GET']['action'] == 'upgrade') { + + $errors = array(); + + /* Install SQL files */ + foreach ($sqlfiles as $sqlfile) { + $sql = file_get_contents(S9Y_INCLUDE_PATH .'sql/'. $sqlfile); + $sql = str_replace('{PREFIX}', $serendipity['dbPrefix'], $sql); + preg_match_all("@(.*);@iUs", $sql, $res); + foreach ($res[0] as $sql) { + $r = serendipity_db_schema_import($sql); + if (is_string($r)) { + $errors[] = trim($r); + } + } + } + + /* Call functions */ + foreach ($tasks as $task) { + if (!empty($task['function']) && version_compare($serendipity['versionInstalled'], $task['version'], '<') ) { + if (is_callable($task['function'])) { + echo sprintf('Calling %s ...
', (is_array($task['function']) ? $task['function'][0] . '::'. $task['function'][1] : $task['function']));; + + if (empty($task['arguments'])) { + call_user_func($task['function']); + } else { + call_user_func_array($task['function'], $task['arguments']); + } + } else { + $errors[] = 'Unable to call '. $task['function']; + } + } + } + + if (sizeof($errors)) { + echo DIAGNOSTIC_ERROR . '

'; + echo '- ' . implode('
', $errors) . '


'; + } + + /* I don't care what you told me, I will always nuke Smarty cache */ + serendipity_smarty_purge(); + +} + +if (($showAbort && $serendipity['GET']['action'] == 'ignore') || $serendipity['GET']['action'] == 'upgrade') { + $privateVariables = array(); + if (isset($serendipity['UpgraderShowAbort'])) { + $privateVariables['UpgraderShowAbort'] = $serendipity['UpgraderShowAbort']; + } + + $r = serendipity_updateLocalConfig( + $serendipity['dbName'], + $serendipity['dbPrefix'], + $serendipity['dbHost'], + $serendipity['dbUser'], + $serendipity['dbPass'], + $serendipity['dbType'], + $serendipity['dbPersistent'], + $privateVariables + ); + + if ($serendipity['GET']['action'] == 'ignore') { + echo SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED; + } elseif ($serendipity['GET']['action'] == 'upgrade') { + printf('
'. SERENDIPITY_UPGRADER_NOW_UPGRADED .'
', $serendipity['version']); + } + echo '
'; + printf('
'. SERENDIPITY_UPGRADER_RETURN_HERE .'
', '', ''); + $_SESSION['serendipityAuthedUser'] = false; + @session_destroy(); +} else { + echo '

' . SERENDIPITY_UPGRADER_WELCOME . '

'; + printf(SERENDIPITY_UPGRADER_PURPOSE . '
', $serendipity['versionInstalled']); + printf(SERENDIPITY_UPGRADER_WHY . '.', $serendipity['version']); + echo '
' . FIRST_WE_TAKE_A_LOOK . '.'; +?> +

+
.
+ +
+ + + + + + + + + + + + + + + + + + +
+
+ +
+ 0) { ?> +
+
+

+
+ +
+ + 0) { ?> +
+

:

+:
+'. $sqlfile .''; + } + } +?> +
+ +

:

+'. $task['version'] .' - '. $task['title'] .''; + echo '
'. nl2br($task['desc']) .'

'; + $taskCount++; + } + } + + if ($taskCount == 0) { + echo SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC; + } +?> + +

+
+ 0 || sizeof($sqlfiles) > 0) { ?> + +

+ + +

+ diff --git a/include/admin/users.inc.php b/include/admin/users.inc.php new file mode 100644 index 0000000..a72300b --- /dev/null +++ b/include/admin/users.inc.php @@ -0,0 +1,190 @@ += $serendipity['serendipityUserlevel'] && $serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { + echo '
' . CREATE_NOT_AUTHORIZED . '
'; + } elseif ($_POST['userlevel'] > $serendipity['serendipityUserlevel']) { + echo '
' . CREATE_NOT_AUTHORIZED_USERLEVEL . '
'; + } else { + serendipity_deleteAuthor($user[0]['authorid']); + printf('
' . DELETED_USER . '
', $serendipity['POST']['user'], $user[0]['realname']); + } +} + + +/* Save new user */ +if (isset($_POST['SAVE_NEW'])) { + if ($_POST['userlevel'] >= $serendipity['serendipityUserlevel'] && $serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { + echo '
' . CREATE_NOT_AUTHORIZED . '
'; + } else { + $serendipity['POST']['user'] = serendipity_addAuthor($_POST['username'], $_POST['pass'], $_POST['realname'], $_POST['email'], $_POST['userlevel']); + + /* Save all the properties */ + $config = serendipity_parseTemplate(S9Y_CONFIG_USERTEMPLATE); + foreach($config as $category) { + foreach ($category['items'] as $item) { + if ( serendipity_checkConfigItemFlags($item, 'local') ) { + serendipity_set_user_var($item['var'], $_POST[$item['var']], $serendipity['POST']['user'], ($serendipity['authorid'] == $serendipity['POST']['authorid'] ? true : false)); + } + if ( serendipity_checkConfigItemFlags($item, 'configuration') ) { + serendipity_set_config_var($item['var'], $_POST[$item['var']], $serendipity['POST']['user']); + } + } + } + + printf('
' . CREATED_USER . '
', '#' . $serendipity['POST']['user'] . ', ' . $_POST['realname']); + } +} + + +/* Edit a user */ +if (isset($_POST['SAVE_EDIT'])) { + $user = serendipity_fetchUsers($serendipity['POST']['authorid']); + if ($user[0]['userlevel'] >= $serendipity['serendipityUserlevel'] && $serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { + echo '
' . CREATE_NOT_AUTHORIZED . '
'; + } elseif ($_POST['userlevel'] > $serendipity['serendipityUserlevel']) { + echo '
' . CREATE_NOT_AUTHORIZED_USERLEVEL . '
'; + } else { + $config = serendipity_parseTemplate(S9Y_CONFIG_USERTEMPLATE); + foreach($config as $category) { + foreach ($category['items'] as $item) { + if ( serendipity_checkConfigItemFlags($item, 'local') ) { + serendipity_set_user_var($item['var'], $_POST[$item['var']], $serendipity['POST']['user'], ($serendipity['authorid'] == $serendipity['POST']['authorid'] ? true : false)); + } + if ( serendipity_checkConfigItemFlags($item, 'configuration') ) { + serendipity_set_config_var($item['var'], $_POST[$item['var']], $serendipity['POST']['user']); + } + } + } + printf('
' . MODIFIED_USER . '
', $_POST['realname']); + } +} + +if ( $serendipity['GET']['adminAction'] != 'delete' ) { +?> + + + + + + + + + + + + + + +
 
+= USERLEVEL_ADMIN ) { + + if ( $user['userlevel'] >= USERLEVEL_ADMIN ) { + $img = serendipity_getTemplateFile('admin/img/user_admin.png'); + } elseif ( $user['userlevel'] >= USERLEVEL_CHIEF ) { + $img = serendipity_getTemplateFile('admin/img/user_chief.png'); + } else { + $img = serendipity_getTemplateFile('admin/img/user_editor.png'); + } +?> +
+ + + + + + + +
[] + - []
+
+ +
+
+ +
+
+ + +
+
+
+
+
+

+= $serendipity['serendipityUserlevel'] && $user[0]['authorid'] != $serendipity['authorid'] && $serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { + echo '' . CREATE_NOT_AUTHORIZED . '
'; + echo EDIT; + $from = array(); + } else { + echo EDIT; + $from = &$user[0]; + unset($from['password']); + echo ''; + } +} else { + echo CREATE; + $from = array(); +} +?> +

+ + + + + + + +
+
+ +
+
+ +

+ + + +
+
+ diff --git a/include/compat.inc.php b/include/compat.inc.php new file mode 100644 index 0000000..b9ee22a --- /dev/null +++ b/include/compat.inc.php @@ -0,0 +1,173 @@ + $v) { + if (is_array($v)) { + array_walk($var[$k], 'serendipity_strip_quotes'); + } else { + $var[$k] = stripslashes($v); + } + } + } else { + $var = stripslashes($var); + } +} + +if (ini_get('magic_quotes_gpc')) { + if (@count($_REQUEST)) { + array_walk($_REQUEST, 'serendipity_strip_quotes'); + } + + if (@count($_GET)) { + array_walk($_GET, 'serendipity_strip_quotes'); + } + + if (@count($_POST)) { + array_walk($_POST, 'serendipity_strip_quotes'); + } + + if (@count($_COOKIE)) { + array_walk($_COOKIE, 'serendipity_strip_quotes'); + } + + if (@count($_FILES) && strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') { + array_walk($_FILES, 'serendipity_strip_quotes'); + } +} + + +// Merge get and post into the serendipity array +$serendipity['GET'] = &$_GET['serendipity']; +$serendipity['POST'] = &$_POST['serendipity']; +$serendipity['COOKIE'] = &$_COOKIE['serendipity']; + +// Some security issues +if (isset($serendipity['GET']['searchTerm'])) { + $serendipity['GET']['searchTerm'] = htmlspecialchars(strip_tags($serendipity['GET']['searchTerm'])); +} + +function serendipity_get_bool($item) { + static $translation = array('true' => true, + 'false' => false); + + if (isset($translation[$item])) { + return $translation[$item]; + } else { + return $item; + } +} + +// Needs to be included here so that it's globally available also when installing +function serendipity_detectLang($use_include = false) { + global $serendipity; + + $supported_languages = array_keys($serendipity['languages']); + $possible_languages = explode(',', (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '')); + if (is_array($possible_languages)) { + foreach($possible_languages as $index => $lang) { + $preferred_language = strtolower(preg_replace('@^([^\-_;]*)_?.*$@', '\1', $lang)); + if (in_array($preferred_language, $supported_languages)) { + if ($use_include) { + @include_once(S9Y_INCLUDE_PATH . 'lang/serendipity_lang_' . $preferred_language . '.inc.php'); + $serendipity['autolang'] = $preferred_language; + } + return $preferred_language; + } // endif + } // endforeach + } // endif + + return $serendipity['lang']; +} + +function serendipity_getCoreVersion($version) { + return preg_replace('@^([0-9\.]+).*$@', '\1', $version); +} + +function serendipity_die($html) { + die( + ' + + + + ' . $html . ' + '); +} + +/* + * Some defaults for our config vars. + * They are likely to be overwritten later in the code + */ +$serendipity['templatePath'] = 'templates/'; +if (!isset($serendipity['serendipityPath'])) { + $serendipity['serendipityPath'] = (defined('S9Y_INCLUDE_PATH') ? S9Y_INCLUDE_PATH : './'); +} + +$serendipity['indexFile'] = 'index.php'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/db/db.inc.php b/include/db/db.inc.php new file mode 100644 index 0000000..6ef09e4 --- /dev/null +++ b/include/db/db.inc.php @@ -0,0 +1,94 @@ + $v) { + if (strlen($set)) + $set .= ', '; + $set .= $k . '=\'' . serendipity_db_escape_string($v) . '\''; + } + + $where = ''; + foreach ($keys as $k => $v) { + if (strlen($where)) + $where .= ' AND '; + $where .= $k . '=\'' . serendipity_db_escape_string($v) . '\''; + } + + if (strlen($where)) { + $where = " WHERE $where"; + } + + return serendipity_db_query("UPDATE {$serendipity['dbPrefix']}$table SET $set $where"); +} + +function serendipity_db_insert($table, $values) +{ + global $serendipity; + + $names = implode(',', array_keys($values)); + + $vals = ''; + foreach ($values as $k => $v) { + if (strlen($vals)) + $vals .= ', '; + $vals .= '\'' . serendipity_db_escape_string($v) . '\''; + } + + return serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}$table ($names) values ($vals)"); +} + +function serendipity_db_bool ($val) +{ + if(($val === true) || ($val == 'true') || ($val == 't') || ($val == '1')) + return true; + #elseif (($val === false || $val == 'false' || $val == 'f')) + else + return false; +} + +function serendipity_db_get_interval($val, $ival = 900) { + global $serendipity; + + switch($serendipity['dbType']) { + case 'sqlite': + $interval = $ival; + $ts = time(); + break; + + case 'postgres': + $interval = "interval '$ival'"; + $ts = 'NOW()'; + break; + + case 'mysql': + case 'mysqli': + default: + $interval = $ival; + $ts = 'NOW()'; + break; + } + + switch($val) { + case 'interval': + return $interval; + + default: + case 'ts': + return $ts; + } +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/db/mysql.inc.php b/include/db/mysql.inc.php new file mode 100644 index 0000000..51dc47b --- /dev/null +++ b/include/db/mysql.inc.php @@ -0,0 +1,200 @@ + MYSQL_ASSOC, + 'num' => MYSQL_NUM, + 'both' => MYSQL_BOTH + ); + + // highlight_string(var_export($sql, 1)); + + if ($expectError) { + $c = @mysql_query($sql, $serendipity['dbConn']); + } else { + $c = mysql_query($sql, $serendipity['dbConn']); + } + + if (!$expectError && mysql_error($serendipity['dbConn']) != '') { + return '
' . $sql . '
/ ' . mysql_error($serendipity['dbConn']); + } + + if (!$c) { + if (!$expectError && !$serendipity['production']) { + print '
' . $sql . '
/ ' . mysql_error($serendipity['dbConn']); + if (function_exists('debug_backtrace') && $reportErr == true) { + highlight_string(var_export(debug_backtrace(), 1)); + } + } + + return false; + } + if ($c === true) { + return true; + } + + $result_type = $type_map[$result_type]; + + switch(mysql_num_rows($c)) { + case 0: + if ($single) { + return false; + } + return true; + case 1: + if ($single) { + return mysql_fetch_array($c, $result_type); + } + default: + if ($single) { + return mysql_fetch_array($c, $result_type); + } + + $rows = array(); + while (($row = mysql_fetch_array($c, $result_type))) { + if (!empty($assocKey) && !empty($assocVal)) { + // You can fetch a key-associated array via the two function parameters assocKey and assocVal + $rows[$row[$assocKey]] = $row[$assocVal]; + } else { + $rows[] = $row; + } + } + return $rows; + } +} + +function serendipity_db_insert_id() { + global $serendipity; + + return mysql_insert_id($serendipity['dbConn']); +} + +function serendipity_db_affected_rows() { + global $serendipity; + + return mysql_affected_rows($serendipity['dbConn']); +} + +function serendipity_db_updated_rows() { + global $serendipity; + + preg_match( + "/^[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)/", + mysql_info(), + $arr); + // mysql_affected_rows returns 0 if rows were matched but not changed. + // mysql_info returns rows matched AND rows changed + return $arr[2]; +} + +function serendipity_db_matched_rows() { + global $serendipity; + + preg_match( + "/^[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)/", + mysql_info(), + $arr); + // mysql_affected_rows returns 0 if rows were matched but not changed. + // mysql_info returns rows matched AND rows changed + return $arr[1]; +} + +function serendipity_db_escape_string($string) { + return mysql_escape_string($string); +} + +function serendipity_db_limit($start, $offset) { + return $start . ', ' . $offset; +} + +function serendipity_db_limit_sql($limitstring) { + return ' LIMIT ' . $limitstring; +} + +function serendipity_db_connect() { + global $serendipity; + + if (isset($serendipity['dbConn'])) { + return $serendipity['dbConn']; + } + + if (isset($serendipity['dbPersistent']) && $serendipity['dbPersistent']) { + $function = 'mysql_pconnect'; + } else { + $function = 'mysql_connect'; + } + + $serendipity['dbConn'] = $function($serendipity['dbHost'], $serendipity['dbUser'], $serendipity['dbPass']); + mysql_select_db($serendipity['dbName']); + return $serendipity['dbConn']; +} + +function serendipity_db_schema_import($query) { + static $search = array('{AUTOINCREMENT}', '{PRIMARY}', + '{UNSIGNED}', '{FULLTEXT}', '{FULLTEXT_MYSQL}', '{BOOLEAN}'); + static $replace = array('int(11) not null auto_increment', 'primary key', + 'unsigned' , 'FULLTEXT', 'FULLTEXT', 'enum (\'true\', \'false\') NOT NULL default \'true\''); + + $query = trim(str_replace($search, $replace, $query)); + if ($query{0} == '@') { + // Errors are expected to happen (like duplicate index creation) + return serendipity_db_query(substr($query, 1), false, 'both', false, false, false, true); + } else { + return serendipity_db_query($query); + } +} + +/* probes the usability of the DB during installation */ +function serendipity_db_probe($hash, &$errs) { + global $serendipity; + + if (!function_exists('mysql_connect')) { + $errs[] = 'No mySQL extension found. Please check your webserver installation or contact your systems administrator regarding this problem.'; + return false; + } + + if (!($c = @mysql_connect($hash['dbHost'], $hash['dbUser'], $hash['dbPass']))) { + $errs[] = 'Could not connect to database; check your settings.'; + $errs[] = 'The mySQL error was: ' . mysql_error(); + return false; + } + + $serendipity['dbConn'] = $c; + + if (!@mysql_select_db($hash['dbName'])) { + $errs[] = 'The database you specified does not exist.'; + $errs[] = 'The mySQL error was: ' . mysql_error(); + return false; + } + + return true; +} + +function serendipity_db_concat($string) { + return 'concat(' . $string . ')'; +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/db/mysqli.inc.php b/include/db/mysqli.inc.php new file mode 100644 index 0000000..f3549b3 --- /dev/null +++ b/include/db/mysqli.inc.php @@ -0,0 +1,196 @@ + MYSQLI_ASSOC, 'num' => MYSQLI_NUM, 'both' => MYSQLI_BOTH); + + if ($expectError) { + $c = @mysqli_query($serendipity['dbConn'], $sql); + } else { + $c = mysqli_query($serendipity['dbConn'], $sql); + } + + if (!$expectError && mysqli_error($serendipity['dbConn']) != '') { + return mysqli_error($serendipity['dbConn']); + } + + if (!$c) { + if (!$expectError && !$serendipity['production']) { + print mysqli_error($serendipity['dbConn']); + if (function_exists('debug_backtrace') && $reportErr == true) { + highlight_string(var_export(debug_backtrace(), 1)); + } + } + + return false; + } + + if ($c === true) { + return true; + } + + $result_type = $type_map[$result_type]; + + switch(mysqli_num_rows($c)) { + case 0: + if ($single) { + return false; + } + return true; + case 1: + if ($single) { + return mysqli_fetch_array($c, $result_type); + } + default: + if ($single) { + return mysqli_fetch_array($c, $result_type); + } + + $rows = array(); + while ($row = mysqli_fetch_array($c, $result_type)) { + if (!empty($assocKey) && !empty($assocVal)) { + // You can fetch a key-associated array via the two function parameters assocKey and assocVal + $rows[$row[$assocKey]] = $row[$assocVal]; + } else { + $rows[] = $row; + } + } + return $rows; + } +} + + +function serendipity_db_insert_id() { + global $serendipity; + return mysqli_insert_id($serendipity['dbConn']); +} + +function serendipity_db_affected_rows() { + global $serendipity; + return mysqli_affected_rows($serendipity['dbConn']); +} + +function serendipity_db_updated_rows() { + global $serendipity; + + preg_match( + "/^[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)/", + mysqli_info(), + $arr); + // mysqli_affected_rows returns 0 if rows were matched but not changed. + // mysqli_info returns rows matched + return $arr[1]; +} + +function serendipity_db_matched_rows() { + global $serendipity; + + preg_match( + "/^[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)/", + mysqli_info(), + $arr); + // mysqli_affected_rows returns 0 if rows were matched but not changed. + // mysqli_info returns rows matched + return $arr[0]; +} + +function serendipity_db_escape_string($string) { + global $serendipity; + return mysqli_escape_string($serendipity['dbConn'], $string); +} + +function serendipity_db_limit($start, $offset) { + return $start . ', ' . $offset; +} + +function serendipity_db_limit_sql($limitstring) { + return ' LIMIT ' . $limitstring; +} + +function serendipity_db_connect() { + global $serendipity; + + if (isset($serendipity['dbConn'])) { + return $serendipity['dbConn']; + } + + if (isset($serendipity['dbPersistent']) && $serendipity['dbPersistent']) { + $function = 'mysqli_pconnect'; + } else { + $function = 'mysqli_connect'; + } + + $serendipity['dbConn'] = $function($serendipity['dbHost'], $serendipity['dbUser'], $serendipity['dbPass']); + mysqli_select_db($serendipity['dbConn'], $serendipity['dbName']); + + return $serendipity['dbConn']; +} + +function serendipity_db_schema_import($query) { + static $search = array('{AUTOINCREMENT}', '{PRIMARY}', + '{UNSIGNED}', '{FULLTEXT}', '{FULLTEXT_MYSQL}', '{BOOLEAN}'); + static $replace = array('int(11) not null auto_increment', 'primary key', + 'unsigned' , 'FULLTEXT', 'FULLTEXT', 'enum (\'true\', \'false\') NOT NULL default \'true\''); + + $query = trim(str_replace($search, $replace, $query)); + if ($query{0} == '@') { + // Errors are expected to happen (like duplicate index creation) + return serendipity_db_query(substr($query, 1), false, 'both', false, false, false, true); + } else { + return serendipity_db_query($query); + } +} + +/* probes the usability of the DB during installation */ +function serendipity_db_probe($hash, &$errs) { + global $serendipity; + + if (!function_exists('mysqli_connect')) { + $errs[] = 'No mySQLi extension found. Please check your webserver installation or contact your systems administrator regarding this problem.'; + return false; + } + + if (!($c = @mysqli_connect($hash['dbHost'], $hash['dbUser'], $hash['dbPass']))) { + $errs[] = 'Could not connect to database; check your settings.'; + $errs[] = 'The mySQL error was: ' . mysqli_connect_error(); + return false; + } + + $serendipity['dbConn'] = $c; + + if ( !@mysqli_select_db($c, $hash['dbName']) ) { + $errs[] = 'The database you specified does not exist.'; + $errs[] = 'The mySQL error was: ' . mysqli_error($c); + return false; + } + + return true; +} + +function serendipity_db_concat($string) { + return 'concat(' . $string . ')'; +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/db/postgres.inc.php b/include/db/postgres.inc.php new file mode 100644 index 0000000..b68fb0b --- /dev/null +++ b/include/db/postgres.inc.php @@ -0,0 +1,208 @@ + 1) { + $limit = ' LIMIT ' . $limit_split[0] . ' OFFSET ' . $limit_split[1]; + } else { + $limit = ' LIMIT ' . $limit_split[0]; + } + return $limit; +} + +function serendipity_db_affected_rows() { + global $serendipity; + return pg_affected_rows($serendipity['dbLastResult']); +} + +function serendipity_db_updated_rows() { + global $serendipity; + // it is unknown whether pg_affected_rows returns number of rows + // UPDATED or MATCHED on an UPDATE statement. + return pg_affected_rows($serendipity['dbLastResult']); +} + +function serendipity_db_matched_rows() { + global $serendipity; + // it is unknown whether pg_affected_rows returns number of rows + // UPDATED or MATCHED on an UPDATE statement. + return pg_affected_rows($serendipity['dbLastResult']); +} + +function serendipity_db_insert_id($table = '', $id = '') { + global $serendipity; + if (empty($table) || empty($id)) { + // BC - will/should never be called with empty parameters! + return pg_last_oid($serendipity['dbLastResult']); + } else { + $query = "SELECT currval('{$serendipity['dbPrefix']}{$table}_{$id}_seq'::text) AS {$id}"; + $res = pg_query($serendipity['dbConn'], $query); + if (pg_num_rows($res)) { + $insert_id = pg_fetch_array($res, 0, PGSQL_ASSOC); + return $insert_id[$id]; + } else { + return pg_last_oid($serendipity['dbLastResult']); // BC - should not happen! + } + } +} + +function &serendipity_db_query($sql, $single = false, $result_type = "both", $reportErr = false, $assocKey = false, $assocVal = false, $expectError = false) { + global $serendipity; + static $type_map = array( + 'assoc' => PGSQL_ASSOC, + 'num' => PGSQL_NUM, + 'both' => PGSQL_BOTH + ); + + if (!isset($serendipity['dbPgsqlOIDS'])) { + $serendipity['dbPgsqlOIDS'] = true; + @serendipity_db_query('SET default_with_oids = true', true, 'both', false, false, false, true); + } + + if (!$expectError && ($reportErr || !$serendipity['production'])) { + $serendipity['dbLastResult'] = pg_query($serendipity['dbConn'], $sql); + } else { + $serendipity['dbLastResult'] = @pg_query($serendipity['dbConn'], $sql); + } + + if (!$serendipity['dbLastResult']) { + if (!$expectError && !$serendipity['production']) { + print "Error in $sql
\n"; + print pg_last_error($serendipity['dbConn']) . "
\n"; + if (function_exists('debug_backtrace')) { + highlight_string(var_export(debug_backtrace(), 1)); + } + print "
$sql\n"; + } + return false; + } + + if ($serendipity['dbLastResult'] === true) { + return true; + } + + $result_type = $type_map[$result_type]; + + $n = pg_num_rows($serendipity['dbLastResult']); + + switch ($n) { + case 0: + if ($single) { + return false; + } + return true; + case 1: + if ($single) { + return pg_fetch_array($serendipity['dbLastResult'], 0, $result_type); + } + default: + $rows = array(); + for ($i = 0; $i < $n; $i++) { + if (!empty($assocKey) && !empty($assocVal)) { + // You can fetch a key-associated array via the two function parameters assocKey and assocVal + $row = pg_fetch_array($serendipity['dbLastResult'], $i, $result_type); + $rows[$row[$assocKey]] = $row[$assocVal]; + } else { + $rows[] = pg_fetch_array($serendipity['dbLastResult'], $i, $result_type); + } + } + return $rows; + } +} + +function serendipity_db_schema_import($query) { + static $search = array('{AUTOINCREMENT}', '{PRIMARY}', '{UNSIGNED}', + '{FULLTEXT}', '{BOOLEAN}', 'int(1)', 'int(10)', 'int(11)', 'int(4)'); + static $replace = array('SERIAL', 'primary key', '', '', 'BOOLEAN NOT NULL', 'int2', + 'int4', 'int4', 'int4'); + + if (stristr($query, '{FULLTEXT_MYSQL}')) { + return true; + } + + $query = trim(str_replace($search, $replace, $query)); + if ($query{0} == '@') { + // Errors are expected to happen (like duplicate index creation) + return serendipity_db_query(substr($query, 1), false, 'both', false, false, false, true); + } else { + return serendipity_db_query($query); + } +} + +function serendipity_db_probe($hash, &$errs) { + global $serendipity; + + if (!function_exists('pg_connect')) { + $errs[] = 'No PostgreSQL extension found. Please check your webserver installation or contact your systems administrator regarding this problem.'; + return false; + } + + $serendipity['dbConn'] = pg_connect( + sprintf( + '%sdbname=%s user=%s password=%s', + + strlen($hash['dbHost']) ? ('host=' . $hash['dbHost'] . ' ') : '', + $hash['dbName'], + $hash['dbUser'], + $hash['dbPass'] + ) + ); + + if (!$serendipity['dbConn']) { + $errs[] = 'Could not connect to database; check your settings.'; + return false; + } + + return true; +} + +function serendipity_db_concat($string) { + return '(' . str_replace(', ', '||', $string) . ')'; +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/db/sqlite.inc.php b/include/db/sqlite.inc.php new file mode 100644 index 0000000..009d12f --- /dev/null +++ b/include/db/sqlite.inc.php @@ -0,0 +1,218 @@ + $v) { + // TODO: If a query of the format 'SELECT a.id, b.text FROM table' is used, + // the sqlite extension will give us key indizes 'a.id' and 'b.text' + // instead of just 'id' and 'text' like in mysql/postgresql extension. + // To fix that, we use a preg-regex; but that is quite performance costy. + // Either we always need to use 'SELECT a.id AS id, b.text AS text' in query, + // or the sqlite extension may get fixed. :-) + $row[preg_replace('@^.+\.(.*)@', '\1', $i)] = str_replace($search, $replace, $v); + } + + return $row; +} + +function &serendipity_db_query($sql, $single = false, $result_type = "both", $reportErr = true, $assocKey = false, $assocVal = false, $expectError = false) +{ + global $serendipity; + static $type_map = array( + 'assoc' => SQLITE_ASSOC, + 'num' => SQLITE_NUM, + 'both' => SQLITE_BOTH + ); + + static $debug = false; + + if ($debug) $fp = @fopen('sqlite.log', 'a'); + + if ($reportErr && !$expectError) { + $res = sqlite_query($sql, $serendipity['dbConn']); + } else { + $res = @sqlite_query($sql, $serendipity['dbConn']); + } + + if (!$res) { + if (!$expectError && !$serendipity['production']) { + var_dump($res); + var_dump($sql); + return "problem with query"; + } + if ($debug) fwrite($fp, '[' . date('d.m.Y H:i') . '] [ERROR] SQLITE QUERY: ' . $sql . "\n\n"); + + return false; + } elseif ($debug) { + fwrite($fp, '[' . date('d.m.Y H:i') . '] SQLITE QUERY: ' . $sql . "\n\n"); + } + + if ($res === true) { + return true; + } + + if (sqlite_num_rows($res) == 0) { + if ($single) { + return false; + } + return true; + } else { + $rows = array(); + + while (($row = serendipity_db_sqlite_fetch_array($res, $type_map[$result_type]))) { + if (!empty($assocKey) && !empty($assocVal)) { + // You can fetch a key-associated array via the two function parameters assocKey and assocVal + $rows[$row[$assocKey]] = $row[$assocVal]; + } else { + $rows[] = $row; + } + } + + if ($debug) fwrite($fp, '[' . date('d.m.Y H:i') . '] SQLITE RESULT: ' . print_r($rows, true). "\n\n"); + if ($debug) fclose($fp); + + if ($single && count($rows) == 1) { + return $rows[0]; + } + + return $rows; + } +} + +function serendipity_db_probe($hash, &$errs) +{ + global $serendipity; + + $dbName = (isset($hash['sqlitedbName']) ? $hash['sqlitedbName'] : $hash['dbName']); + + if (!function_exists('sqlite_open')) { + $errs[] = 'SQLite extension not installed. Run "pear install sqlite" on your webserver or contact your systems administrator regarding this problem.'; + return false; + } + + $serendipity['dbConn'] = sqlite_open($serendipity['serendipityPath'] . $dbName . '.db'); + + if ($serendipity['dbConn']) { + return true; + } + + $errs[] = "Unable to open \"{$serendipity['serendipityPath']}$dbName.db\" - check permissions (directory needs to be writeable for webserver)!"; + return false; +} + +function serendipity_db_schema_import($query) +{ + static $search = array('{AUTOINCREMENT}', '{PRIMARY}', '{UNSIGNED}', '{FULLTEXT}', '{BOOLEAN}'); + static $replace = array('INTEGER', 'PRIMARY KEY', '', '', 'BOOLEAN NOT NULL'); + + if (stristr($query, '{FULLTEXT_MYSQL}')) { + return true; + } + + $query = trim(str_replace($search, $replace, $query)); + if ($query{0} == '@') { + // Errors are expected to happen (like duplicate index creation) + return serendipity_db_query(substr($query, 1), false, 'both', false, false, false, true); + } else { + return serendipity_db_query($query); + } +} + +function serendipity_db_limit($start, $offset) { + return $start . ', ' . $offset; +} + +function serendipity_db_limit_sql($limitstring) { + return ' LIMIT ' . $limitstring; +} + +function serendipity_db_concat($string) { + return 'concat(' . $string . ')'; +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/functions.inc.php b/include/functions.inc.php new file mode 100644 index 0000000..30c270e --- /dev/null +++ b/include/functions.inc.php @@ -0,0 +1,681 @@ + ($len+3) ) { + $s = serendipity_mb('substr', $s, 0, $len) . '...'; + } + return $s; +} + +function serendipity_gzCompression() { + global $serendipity; + if (isset($serendipity['useGzip']) && serendipity_db_bool($serendipity['useGzip']) && function_exists('ob_gzhandler') && extension_loaded('zlib') && serendipity_ini_bool(ini_get('zlib.output_compression')) == false) { + ob_start("ob_gzhandler"); + } +} + +function serendipity_serverOffsetHour($timestamp = null, $negative = false) { + global $serendipity; + + if ($timestamp == null) { + $timestamp = time(); + } + + if (empty($serendipity['serverOffsetHours']) || !is_numeric($serendipity['serverOffsetHours']) || $serendipity['serverOffsetHours'] == 0) { + return $timestamp; + } else { + return $timestamp + (($negative ? -$serendipity['serverOffsetHours'] : $serendipity['serverOffsetHours']) * 60 * 60); + } +} + +function serendipity_strftime($format, $timestamp = null, $useOffset = true) { + if ($timestamp == null) { + $timestamp = serendipity_serverOffsetHour(); + } elseif ($useOffset) { + $timestamp = serendipity_serverOffsetHour($timestamp); + } + + return strftime($format, $timestamp); +} + +function serendipity_formatTime($format, $time, $useOffset = true) { + static $cache; + if (!isset($cache)) { + $cache = array(); + } + + if (!isset($cache[$format])) { + $cache[$format] = $format; + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $cache[$format] = str_replace('%e', '%d', $cache[$format]); + } + } + return serendipity_mb('ucfirst', serendipity_strftime($cache[$format], (int)$time, $useOffset)); +} + +function serendipity_fetchTemplates() { + global $serendipity; + $dir = opendir($serendipity['serendipityPath'] . $serendipity['templatePath']); + while (($file = readdir($dir)) !== false) { + if (is_dir($serendipity['serendipityPath'] . $serendipity['templatePath'] . $file) && !ereg('^(\.|CVS)', $file) && !file_exists($serendipity['serendipityPath'] . $serendipity['templatePath'] . $file . '/inactive.txt') && file_exists($serendipity['serendipityPath'] . $serendipity['templatePath'] . $file . '/info.txt')) { + $rv[] = $file; + } + } + natcasesort($rv); + return $rv; +} + +function serendipity_fetchTemplateInfo($theme) { + global $serendipity; + + $lines = @file($serendipity['serendipityPath'] . $serendipity['templatePath'] . $theme . '/info.txt'); + if ( !$lines ) { + return array(); + } + + for($x=0; $x $v) { + $data[$k] = implode("\n", $v); + } + + return $data; +} + +function serendipity_walkRecursive($ary, $child_name = 'id', $parent_name = 'parent_id', $parentid = 0, $depth = 0) { + global $serendipity; + static $_resArray; + + if ( sizeof($ary) == 0 ) { + return array(); + } + + if ($parentid === VIEWMODE_THREADED) { + $parentid = 0; + } + + if ( $depth == 0 ) { + $_resArray = array(); + } + + foreach ($ary as $data) { + if ($parentid === VIEWMODE_LINEAR || !isset($data[$parent_name]) || $data[$parent_name] == $parentid) { + $data['depth'] = $depth; + $_resArray[] = $data; + if ($data[$child_name] && $parentid !== VIEWMODE_LINEAR ) { + serendipity_walkRecursive($ary, $child_name, $parent_name, $data[$child_name], ($depth+1)); + } + } + } + + /* We are inside a recusive child, and we need to break out */ + if ($depth !== 0) { + return true; + } + + return $_resArray; +} + +function serendipity_fetchUsers($user = '') { + global $serendipity; + + $where = ''; + if (!empty($user)) { + $where = "WHERE authorid = '" . (int)$user ."'"; + } + + $querystring = "SELECT * FROM {$serendipity['dbPrefix']}authors $where ORDER BY realname ASC"; + + return serendipity_db_query($querystring); +} + + +function serendipity_sendMail($to, $subject, $message, $fromMail, $headers = NULL, $fromName = NULL) { + global $serendipity; + + if ( !is_null($headers) && !is_array($headers) ) { + trigger_error(__FUNCTION__ . ': $headers must be either an array or null', E_USER_ERROR); + } + + if ( is_null($fromName) ) { + $fromName = $serendipity['blogTitle']; + } + + if ( is_null($fromMail) ) { + $fromMail = $to; + } + + // Fix special characters + $fromName = str_replace(array('"'), array("'"), $fromName); + + /* Prefix all mail with weblog title */ + $subject = '['. $serendipity['blogTitle'] . '] '. $subject; + + /* Append signature to every mail */ + $message .= "\n" . sprintf(SIGNATURE, $serendipity['blogTitle']); + + + /* Check for mb_* function, and use it to encode headers etc. */ + if ( function_exists('mb_encode_mimeheader') ) { + // Funky mb_encode_mimeheader function insertes linebreaks after 74 chars. + // Most MTA I've personally spoken with told me they don't like this at all. ;) + // Regards to Mark Kronsbein for finding this issue! + $subject = str_replace(array("\n", "\r"), array('', ''), mb_encode_mimeheader($subject, LANG_CHARSET)); + $fromName = str_replace(array("\n", "\r"), array('', ''), mb_encode_mimeheader($fromName, LANG_CHARSET)); + } + + + /* Always add these headers */ + $headers[] = 'From: "'. $fromName .'" <'. $fromMail .'>'; + $headers[] = 'X-Mailer: Serendipity/'. $serendipity['version']; + $headers[] = 'X-Engine: PHP/'. phpversion(); + $headers[] = 'Message-ID: <'. md5(microtime() . uniqid(time())) .'@'. $_SERVER['HTTP_HOST'] .'>'; + $headers[] = 'MIME-Version: 1.0'; + $headers[] = 'Content-Type: text/plain; charset="' . LANG_CHARSET .'"'; + + return mail($to, $subject, $message, implode("\n", $headers)); +} + +function serendipity_makeFilename($str) { + static $from = array( + ' ', + + 'Ä', + 'ä', + + 'Ö', + 'ö', + + 'Ü', + 'ü', + + 'ß', + + 'é', + 'è', + 'ê', + + 'í', + 'ì', + 'î', + + 'á', + 'à', + 'â', + 'å', + + 'ó', + 'ò', + 'ô', + 'õ', + + 'ú', + 'ù', + 'û', + + 'ç', + 'Ç', + + 'ñ', + + 'ý'); + + static $to = array( + '-', + + 'AE', + 'ae', + + 'OE', + 'oe', + + 'UE', + 'ue', + + 'ss', + + 'e', + 'e', + 'e', + + 'i', + 'i', + 'i', + + 'a', + 'a', + 'a', + 'a', + + 'o', + 'o', + 'o', + 'o', + + 'u', + 'u', + 'u', + + 'c', + 'C', + + 'n', + + 'y'); + + // Replace international chars not detected by every locale + $str = str_replace($from, $to, $str); + + // Nuke chars not allowed in our URI + $str = preg_replace('#[^' . PAT_FILENAME . ']#i', '', $str); + + // Remove consecutive separators + $str = preg_replace('#'. $to[0] .'{2,}#s', $to[0], $str); + + // Remove excess separators + $str = trim($str, $to[0]); + + return $str; +} + +function serendipity_fetchReferences($id) { + global $serendipity; + + $query = "SELECT name,link FROM {$serendipity['dbPrefix']}references WHERE entry_id = '" . (int)$id . "'"; + + return serendipity_db_query($query); +} + + +function serendipity_utf8_encode($string) { + if (strtolower(LANG_CHARSET) != 'utf-8') { + if (function_exists('iconv')) { + return iconv(LANG_CHARSET, 'UTF-8', $string); + } else { + return utf8_encode($string); + } + } else { + return $string; + } +} + +function serendipity_rss_getguid($entry, $comments = false) { + $guid = serendipity_archiveURL((isset($entry['entryid']) && $entry['entryid'] != '' ? $entry['entryid'] : $entry['id']), 'guid'); + if ($comments == true) { + $guid .= '#c' . $entry['commentid']; + } + + return $guid; +} + +// jbalcorn: starter function to clean up xhtml for atom feed. Add things to this as we find common +// mistakes, unless someone finds a better way to do this. +// DONE: +// since someone encoded all the urls, we can now assume any amp followed by +// whitespace or a HTML tag (i.e. &
)should be +// encoded and most not with a space are intentional +// TODO: +// check ALL ampersands, find out if it's a valid code, and encode if not +function xhtml_cleanup($html) { + static $p = array( + '/\&([\s\<])/', // ampersand followed by whitespace or tag + '/\&$/', // ampersand at end of body + '/<(br|hr|img)([^\/>]*)>/i', // unclosed br tag - attributes included + '/\ /' + ); + + static $r = array( + '&\1', + '&', + '<\1\2 />', + ' ' + ); + + return preg_replace($p, $r, $html); +} + +/* Uses logic to figure out how the URI should look, based on current rewrite rule */ +function serendipity_rewriteURL($path, $key='baseURL') { + global $serendipity; + return $serendipity[$key] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . $path; +} + +function serendipity_makePermalink($format, $data) { + static $keys = array('%id%', '%title%'); + $replacements = array((int)$data['id'], serendipity_makeFilename($data['title'])); + return str_replace($keys, $replacements, $format); +} + +function serendipity_makePermalinkRegex($format) { + static $keys = array('%id%', '%title%'); + static $regexValues = array('([0-9]+)', '[0-9a-z\.\_!;,\+\-]+'); + return str_replace($keys, $regexValues, preg_quote($format)); +} + +function serendipity_archiveURL($id, $title, $key = 'baseURL', $checkrewrite = true) { + $path = PATH_ARCHIVES . '/' . serendipity_makePermalink(PERM_ARCHIVES, array('id'=>$id, 'title' => $title)); + if ( $checkrewrite ) { + $path = serendipity_rewriteURL($path, $key); + } + return $path; +} + +function serendipity_archiveDateUrl($range, $summary=false, $key='baseURL') { + return serendipity_rewriteURL(PATH_ARCHIVES . '/' . $range . ($summary ? '/summary' : '') . '.html', $key); +} + +function serendipity_fetchAuthor($author) { + global $serendipity; + + return serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}authors WHERE " . (is_numeric($author) ? "authorid={$author};" : "username='" . serendipity_db_escape_string($author) . "';")); +} + +/** +* Split up a filename +**/ +function serendipity_parseFileName($file) { + $x = explode('.', $file); + $suf = array_pop($x); + $f = @implode('.', $x); + return array($f, $suf); +} + +function serendipity_track_referrer($entry = 0) { + global $serendipity; + + if (isset($_SERVER['HTTP_REFERER'])) { + if (stristr($_SERVER['HTTP_REFERER'], $serendipity['baseURL']) !== false) { + return; + } + + if (!isset($serendipity['_blockReferer']) || !is_array($serendipity['_blockReferer'])) { + // Only generate an array once per call + $serendipity['_blockReferer'] = array(); + $serendipity['_blockReferer'] = @explode(';', $serendipity['blockReferer']); + } + + $url_parts = parse_url($_SERVER['HTTP_REFERER']); + $host_parts = explode('.', $url_parts['host']); + if (!$url_parts['host'] || + strstr($url_parts['host'], $_SERVER['SERVER_NAME'])) { + return; + } + + foreach($serendipity['_blockReferer'] AS $idx => $hostname) { + if (@strstr($url_parts['host'], $hostname)) { + return; + } + } + + if (rand(0, 100) < 1) { + serendipity_track_referrer_gc(); + } + + $ts = serendipity_db_get_interval('ts'); + $interval = serendipity_db_get_interval('interval', 900); + + $suppressq = "SELECT count(1) + FROM $serendipity[dbPrefix]suppress + WHERE ip = '" . serendipity_db_escape_string($_SERVER['REMOTE_ADDR']) . "' + AND scheme = '" . serendipity_db_escape_string($url_parts['scheme']) . "' + AND port = '" . serendipity_db_escape_string($url_parts['port']) . "' + AND host = '" . serendipity_db_escape_string($url_parts['host']) . "' + AND path = '" . serendipity_db_escape_string($url_parts['path']) . "' + AND query = '" . serendipity_db_escape_string($url_parts['query']) . "' + AND last > $ts - $interval"; + + $suppressp = "DELETE FROM $serendipity[dbPrefix]suppress + WHERE ip = '" . serendipity_db_escape_string($_SERVER['REMOTE_ADDR']) . "' + AND scheme = '" . serendipity_db_escape_string($url_parts['scheme']) . "' + AND host = '" . serendipity_db_escape_string($url_parts['host']) . "' + AND port = '" . serendipity_db_escape_string($url_parts['port']) . "' + AND query = '" . serendipity_db_escape_string($url_parts['query']) . "' + AND path = '" . serendipity_db_escape_string($url_parts['path']) . "'"; + $suppressu = "INSERT INTO $serendipity[dbPrefix]suppress + (ip, last, scheme, host, port, path, query) + VALUES ( + '" . serendipity_db_escape_string($_SERVER['REMOTE_ADDR']) . "', + $ts, + '" . serendipity_db_escape_string($url_parts['scheme']) . "', + '" . serendipity_db_escape_string($url_parts['host']) . "', + '" . serendipity_db_escape_string($url_parts['port']) . "', + '" . serendipity_db_escape_string($url_parts['path']) . "', + '" . serendipity_db_escape_string($url_parts['query']) . "' + )"; + + $count = serendipity_db_query($suppressq, true); + + if ($count[0] == 0) { + serendipity_db_query($suppressu); + return; + } + + serendipity_db_query($suppressp); + serendipity_db_query($suppressu); + + serendipity_track_url('referrers', $_SERVER['HTTP_REFERER'], $entry); + } +} + +function serendipity_track_referrer_gc() { + global $serendipity; + + $ts = serendipity_db_get_interval('ts'); + $interval = serendipity_db_get_interval('interval', 900); + $gc = "DELETE FROM $serendipity[dbPrefix]suppress WHERE last <= $ts - $interval"; + serendipity_db_query($gc); +} + +function serendipity_track_url($list, $url, $entry_id = 0) { + global $serendipity; + + $url_parts = parse_url($url); + + serendipity_db_query( + @sprintf( + "UPDATE %s%s + SET count = count + 1 + WHERE scheme = '%s' + AND host = '%s' + AND port = '%s' + AND path = '%s' + AND query = '%s' + AND day = '%s' + %s", + + $serendipity['dbPrefix'], + $list, + serendipity_db_escape_string($url_parts['scheme']), + serendipity_db_escape_string($url_parts['host']), + serendipity_db_escape_string($url_parts['port']), + serendipity_db_escape_string($url_parts['path']), + serendipity_db_escape_string($url_parts['query']), + date('Y-m-d'), + ($entry_id != 0) ? "AND entry_id = '". (int)$entry_id ."'" : '' + ) + ); + + if (serendipity_db_affected_rows() == 0) { + serendipity_db_query( + sprintf( + "INSERT INTO %s%s + (entry_id, day, count, scheme, host, port, path, query) + VALUES (%d, '%s', 1, '%s', '%s', '%s', '%s', '%s')", + + $serendipity['dbPrefix'], + $list, + (int)$entry_id, + date('Y-m-d'), + serendipity_db_escape_string($url_parts['scheme']), + serendipity_db_escape_string($url_parts['host']), + serendipity_db_escape_string($url_parts['port']), + serendipity_db_escape_string($url_parts['path']), + serendipity_db_escape_string($url_parts['query']) + ) + ); + } +} + +function serendipity_displayTopReferrers($limit = 10, $use_links = true) { + serendipity_displayTopUrlList('referrers', $limit, $use_links); +} + +function serendipity_displayTopExits($limit = 10, $use_links = true) { + serendipity_displayTopUrlList('exits', $limit, $use_links); +} + +function serendipity_displayTopUrlList($list, $limit, $use_links = true) { + global $serendipity; + + if ($limit){ + $limit = serendipity_db_limit_sql($limit); + } + + /* HACK */ + if (preg_match('/^mysqli?/', $serendipity['dbType'])) { + /* Nonportable SQL due to MySQL date functions, + * but produces rolling 7 day totals, which is more + * interesting + */ + $query = "SELECT scheme, host, SUM(count) AS total + FROM {$serendipity['dbPrefix']}$list + WHERE day > date_sub(current_date, interval 7 day) + GROUP BY host + ORDER BY total DESC, host + $limit"; + } else { + /* Portable version of the same query */ + $query = "SELECT scheme, host, SUM(count) AS total + FROM {$serendipity['dbPrefix']}$list + GROUP BY scheme, host + ORDER BY total DESC, host + $limit"; + } + + $rows = serendipity_db_query($query); + echo ""; + if (is_array($rows)) { + foreach ($rows as $row) { + if ($use_links) { + printf( + '%2$s (%3$s)
', + $row['scheme'], + $row['host'], + $row['total'] + ); + } else { + printf( + '%1$s (%2$s)
', + $row['host'], + $row['total'] + ); + } + } + } + echo "
"; +} + +function serendipity_xhtml_target($target) { + global $serendipity; + + if ($serendipity['enablePopup'] != true) + return ""; + + if ($serendipity['XHTML11']) { + return ' onclick="window.open(this.href, \'target' . time() . '\'); return false;" '; + } else { + return ' target="' . $target . '" '; + } +} + +function serendipity_discover_rss($name, $ext) { + static $default = '2.0'; + + /* Detect type */ + if ( $name == 'comments' ) { + $type = 'comments'; + } else { + $type = 'content'; + } + + /* Detect version */ + if ( $name == 'atom' || $ext == 'atom' ) { + $ver = 'atom0.3'; + } elseif ( $name == 'opml' || $ext == 'opml' ) { + $ver = 'opml1.0'; + } elseif ( $ext == 'rss' ) { + $ver = '0.91'; + } elseif ( $ext == 'rss1' ) { + $ver = '1.0'; + } else { + $ver = $default; + } + + return array($ver, $type); +} + +function serendipity_isResponseClean($d) { + return (strpos($d, "\r") === false && strpos($d, "\n") === false); +} + +function serendipity_currentURL() { + global $serendipity; + + // All that URL getting humpty-dumpty is necessary to allow a user to change the template in the + // articles view. POSTing data to that page only works with mod_rewrite and not the ErrorDocument + // redirection, so we need to generate the ErrorDocument-URI here. + + $uri = parse_url($_SERVER['REQUEST_URI']); + $qst = ''; + if (!empty($uri['query'])) { + $qst = '&' . str_replace('&', '&', $uri['query']); + } + $uri['path'] = str_replace($serendipity['serendipityHTTPPath'], '', $uri['path']); + $url = $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?' . $uri['path'] . $qst; + $url = str_replace($serendipity['indexFile'] . '&', '', $url); // Kill possible looped repitions which could occur + + return $url; +} + +function serendipity_getUriArguments($uri, $wildcard = false) { +global $serendipity; + + /* Explode the path into sections, to later be able to check for arguments and add our own */ + preg_match('/^'. preg_quote($serendipity['serendipityHTTPPath'], '/') . '(' . preg_quote($serendipity['indexFile'], '/') . '\?\/)?(' . ($wildcard ? '.+' : '[a-z0-9\-*\/%\+]+') . ')/i', $uri, $_res); + if (strlen($_res[2]) != 0) { + $args = explode('/', $_res[2]); + if ($args[0] == 'index') { + unset($args[0]); + } + return $args; + } else { + return array(); + } +} + +define("serendipity_FUNCTIONS_LOADED", true); +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/functions_comments.inc.php b/include/functions_comments.inc.php new file mode 100644 index 0000000..7b3be7d --- /dev/null +++ b/include/functions_comments.inc.php @@ -0,0 +1,486 @@ + $serendipity['POST']['url'], + 'name' => $serendipity['POST']['name'], + 'email' => $serendipity['POST']['email'], + 'remember' => 'checked="checked"' + ) + ); + } elseif (isset($serendipity['POST']['comment'])) { + serendipity_forgetCommentDetails(array('url', 'name', 'email', 'remember')); + } +} + +function serendipity_rememberCommentDetails($details) { + global $serendipity; + + foreach ($details as $n => $v) { + serendipity_setCookie($n, $v); + } +} + +function serendipity_forgetCommentDetails($keys) { + global $serendipity; + if (!$serendipity['COOKIE']) { + return; + } + + foreach ($keys AS $n) { + serendipity_deleteCookie($n); + } +} + +function serendipity_displayCommentForm($id, $url = '', $comments = NULL, $data = NULL, $showToolbar = true, $moderate_comments = true, $entry = null) { + global $serendipity; + + if ($comments == NULL) { + $comments = serendipity_fetchComments($id); + } + + $serendipity['smarty']->assign( + array( + 'commentform_action' => $url, + 'commentform_id' => $id, + 'commentform_name' => isset($data['name']) ? $data['name'] : (isset($serendipity['COOKIE']['name']) ? $serendipity['COOKIE']['name'] : ''), + 'commentform_email' => isset($data['email']) ? $data['email'] : (isset($serendipity['COOKIE']['email']) ? $serendipity['COOKIE']['email'] : ''), + 'commentform_url' => isset($data['url']) ? $data['url'] : (isset($serendipity['COOKIE']['url']) ? $serendipity['COOKIE']['url'] : ''), + 'commentform_remember' => isset($data['remember']) ? 'checked="checked"' : (isset($serendipity['COOKIE']['remember']) ? $serendipity['COOKIE']['remember'] : ''), + 'commentform_replyTo' => serendipity_generateCommentList($id, $comments, ((isset($data['replyTo']) && ($data['replyTo'])) ? $data['replyTo'] : 0)), + 'commentform_subscribe' => isset($data['subscribe']) ? 'checked="checked"' : '', + 'commentform_data' => isset($data['comment']) ? $data['comment'] : '', + 'is_commentform_showToolbar' => $showToolbar, + 'is_allowSubscriptions' => $serendipity['allowSubscriptions'], + 'is_moderate_comments' => $moderate_comments, + 'commentform_entry' => $entry + ) + ); + + serendipity_smarty_fetch('COMMENTFORM', 'commentform.tpl'); +} + +function serendipity_fetchComments($id, $limit = null, $order = '', $showAll = false) { + global $serendipity; + $and = ''; + + if (!empty($limit)) { + $limit = serendipity_db_limit_sql($limit); + } else { + $limit = ''; + } + + if (!empty($id)) { + $and .= " AND co.entry_id = '" . (int)$id ."'"; + } + + if (!$showAll) { + $and .= ' AND co.status = \'approved\''; + } + + if ($serendipity['dbType'] == 'postgres') { + $group = ''; + $distinct = 'DISTINCT'; + } else { + $group = 'GROUP BY co.id'; + $distinct = ''; + } + + $query = "SELECT $distinct + co.id, + co.entry_id, co.timestamp, co.title, co.email, co.url, co.ip, co.body, co.type, co.subscribed, + co.author, + e.title, + e.id AS entryid, + e.authorid, + co.id AS commentid, + co.parent_id AS parent_id + FROM + {$serendipity['dbPrefix']}comments co + LEFT JOIN {$serendipity['dbPrefix']}entries e ON (co.entry_id = e.id) + WHERE co.type LIKE 'NORMAL' AND co.entry_id > 0 $and + $group + ORDER BY + co.id " . ($order != '' ? $order : '') . " + $limit"; + + $comments = serendipity_db_query($query); + + if (!is_array($comments)) { + return array(); + } + + serendipity_plugin_api::hook_event('fetchcomments', $comments); + return $comments; +} + +function serendipity_generateCommentList($id, $comments = NULL, $selected = 0, $parent = 0, $level = 0, $indent = '') { + global $serendipity; + + if (!is_array($comments)) { + if (empty($id)) { + $comments = array(); + } else { + $comments = serendipity_fetchComments($id); + } + } + + $retval = $parent ? '' : ''; + + return $retval; +} + +function serendipity_printComments($comments, $parentid = 0, $depth = 0, $trace = null) { + global $serendipity; + static $_smartyComments; + + /* - $_smartyComments holds the ending smarty array. + - $depth is the current depth of the recurrence. + - $i is the position in the current depth. */ + + if ($parentid === VIEWMODE_THREADED) { + $parentid = 0; + } + + /* Wait a second, we just got attacked by a call with level 0, + this must mean we've started over */ + if ( $depth == 0 ) { + $_smartyComments = array(); + } + + $i = 0; + foreach ($comments as $comment) { + if ($parentid === VIEWMODE_LINEAR || !isset($comment['parent_id']) || $comment['parent_id'] == $parentid) { + $i++; + + $comment['comment'] = htmlspecialchars(strip_tags($comment['body'])); + $comment['url'] = strip_tags($comment['url']); + $comment['link_delete'] = $serendipity['baseURL'] . 'comment.php?serendipity[delete]=' . $comment['id'] . '&serendipity[entry]=' . $comment['entry_id'] . '&serendipity[type]=comments'; + + /* Fix fucked links */ + if (!empty($comment['url']) && substr($comment['url'], 0, 7) != 'http://' && substr($comment['url'], 0, 8) != 'https://') { + $comment['url'] = 'http://' . $comment['url']; + } + + serendipity_plugin_api::hook_event('frontend_display', $comment); + + if (isset($comment['no_email']) && $comment['no_email']) { + $comment['email'] = false; + } elseif (!empty($comment['email'])) { + $comment['email'] = htmlspecialchars(str_replace('@', '[at]', $comment['email'])); + } + + $comment['body'] = $comment['comment']; + $comment['pos'] = $i; + $comment['trace'] = $trace . $i; + $comment['depth'] = $depth; + $comment['author'] = htmlspecialchars($comment['author']); + + $_smartyComments[] = $comment; + if ($comment['id'] && $parentid !== VIEWMODE_LINEAR ) { + serendipity_printComments($comments, $comment['id'], ($depth+1), ($trace . $i . '.')); + } + } + } + + /* We are inside a recusive child, and we need to break out */ + if ($depth !== 0) { + return true; + } + + $serendipity['smarty']->assign('comments', $_smartyComments); + unset($_smartyComments); + + return serendipity_smarty_fetch('COMMENTS', 'comments.tpl'); +} + +function serendipity_deleteComment($id, $entry_id, $type='comments') { + global $serendipity; + + if ($_SESSION['serendipityAuthedUser'] === true) { + $admin = ''; + if ($_SESSION['serendipityUserlevel'] < USERLEVEL_CHIEF) { + $admin = " AND authorid = " . (int)$_SESSION['serendipityAuthorid'] ."'"; + } + + /* We have to figure out if the comment we are about to delete, is awaiting approval, + if so - we should *not* subtract it from the entries table */ + $sql = serendipity_db_query("SELECT status, parent_id FROM {$serendipity['dbPrefix']}comments + WHERE entry_id = '". (int)$entry_id ."' + AND id = '". (int)$id ."' + $admin", true); + + serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}comments + WHERE entry_id = '". (int)$entry_id ."' + AND id = '". (int)$id ."' + $admin"); + + if ($sql['status'] !== 'pending') { + serendipity_db_query("UPDATE {$serendipity['dbPrefix']}entries SET $type = $type-1 WHERE id = '". (int)$entry_id ."' $admin"); + } + + serendipity_db_query("UPDATE {$serendipity['dbPrefix']}comments SET parent_id = " . (int)$sql['parent_id'] . " WHERE parent_id = '" . (int)$id . "'"); + + return true; + } else { + return false; + } +} + +function serendipity_allowCommentsToggle($entry_id, $switch = 'disable') { + global $serendipity; + + if ($_SESSION['serendipityAuthedUser'] === true) { + $admin = ''; + if ($_SESSION['serendipityUserlevel'] < USERLEVEL_CHIEF) { + $admin = " AND authorid = '" . (int)$_SESSION['serendipityAuthorid'] ."'"; + } + + $query = "UPDATE {$serendipity['dbPrefix']}entries SET allow_comments = '" . ($switch == 'disable' ? 'false' : 'true') . "' WHERE id = '". (int)$entry_id ."' $admin"; + serendipity_db_query($query); + if (serendipity_isResponseClean($_SERVER['HTTP_REFERER'])) { + header('Location: '. $_SERVER['HTTP_REFERER']); + } + } else { + die('What are you up to? You need to be an admin to close comments'); + } +} + +function serendipity_approveComment($cid, $entry_id, $force = false) { + global $serendipity; + + /* Get data about the comment, we need this query because this function can be called from anywhere */ + /* This also makes sure we are either the author of the comment, or a USERLEVEL_ADMIN */ + $sql = "SELECT c.*, e.title, a.email as authoremail, a.mail_comments, e.timestamp AS entry_timestamp, e.last_modified AS entry_last_modified + FROM {$serendipity['dbPrefix']}comments c + LEFT JOIN {$serendipity['dbPrefix']}entries e ON (e.id = c.entry_id) + LEFT JOIN {$serendipity['dbPrefix']}authors a ON (e.authorid = a.authorid) + WHERE c.id = '". (int)$cid ."' + ". (($serendipity['serendipityUserlevel'] != USERLEVEL_ADMIN && $force !== true) ? "AND e.authorid = '". (int)$serendipity['authorid'] ."'" : '') ." + ". (($force === true) ? "" : "AND status = 'pending'"); + $rs = serendipity_db_query($sql, true); + + /* It's already approved, don't spam people */ + if ( $rs === false ) { + return false; + } + + $sql = "UPDATE {$serendipity['dbPrefix']}comments SET status = 'approved' WHERE id = ". (int)$cid; + serendipity_db_query($sql); + + $field = ($rs['type'] == 'NORMAL' ? 'comments' : 'trackbacks'); + // Check when the entry was published. If it is older than max_last_modified allows, the last_modified date of that entry + // will not be pushed. With this we make sure that an RSS feed will not be updated on a client's reader and marked as new + // only because someone made an comment to an old entry. + if ($rs['entry_timestamp'] > time() - $serendipity['max_last_modified']) { + $lm = time(); + } else { + $lm = (int)$rs['entry_last_modified']; + } + + $query = "UPDATE {$serendipity['dbPrefix']}entries SET $field=$field+1, last_modified=". $lm ." WHERE id='". (int)$entry_id ."'"; + serendipity_db_query($query); + + if ($serendipity['allowSubscriptions']) { + serendipity_mailSubscribers($entry_id, $rs['author'], $rs['email'], $rs['title'], $rs['authoremail']); + } + return true; +} + +function serendipity_saveComment($id, $commentInfo, $type = 'NORMAL', $source = 'internal') { + global $serendipity; + + $query = "SELECT id, allow_comments, moderate_comments, last_modified, timestamp FROM {$serendipity['dbPrefix']}entries WHERE id = '". (int)$id ."'"; + $ca = serendipity_db_query($query, true); + + $commentInfo['type'] = $type; + $commentInfo['source'] = $source; + serendipity_plugin_api::hook_event('frontend_saveComment', $ca, $commentInfo); + if (!is_array($ca) || serendipity_db_bool($ca['allow_comments'])) { + $title = serendipity_db_escape_string(isset($commentInfo['title']) ? $commentInfo['title'] : ''); + $comments = $commentInfo['comment']; + $ip = serendipity_db_escape_string(isset($commentInfo['ip']) ? $commentInfo['ip'] : $_SERVER['REMOTE_ADDR']); + $commentsFixed = serendipity_db_escape_string($commentInfo['comment']); + $name = serendipity_db_escape_string($commentInfo['name']); + $url = serendipity_db_escape_string($commentInfo['url']); + $email = serendipity_db_escape_string($commentInfo['email']); + $parentid = (isset($commentInfo['parent_id']) && is_numeric($commentInfo['parent_id'])) ? $commentInfo['parent_id'] : 0; + $status = serendipity_db_escape_string(isset($commentInfo['status']) ? $commentInfo['status'] : (serendipity_db_bool($ca['moderate_comments']) ? 'pending' : 'approved')); + $t = serendipity_db_escape_string(isset($commentInfo['time']) ? $commentInfo['time'] : time()); + $referer = (isset($_SESSION['HTTP_REFERER']) ? serendipity_db_escape_string($_SESSION['HTTP_REFERER']) : ''); + + if (isset($commentInfo['subscribe'])) { + $subscribe = 'true'; + } else { + $subscribe = 'false'; + } + + $query = "INSERT INTO {$serendipity['dbPrefix']}comments (entry_id, parent_id, ip, author, email, url, body, type, timestamp, title, subscribed, status, referer)"; + $query .= " VALUES ('". (int)$id ."', '$parentid', '$ip', '$name', '$email', '$url', '$commentsFixed', '$type', '$t', '$title', '$subscribe', '$status', '$referer')"; + + serendipity_db_query($query); + $cid = serendipity_db_insert_id('comments', 'id'); + + $query = "SELECT a.email, e.title, a.mail_comments, a.mail_trackbacks + FROM {$serendipity['dbPrefix']}entries e, {$serendipity['dbPrefix']}authors a + WHERE e.id = '". (int)$id ."' + AND e.authorid = a.authorid"; + $row = serendipity_db_query($query, true); // Get info on author/entry + + // Send mail to the author if he chose to receive these mails, or if the comment is awaiting moderation + if (serendipity_db_bool($ca['moderate_comments']) + || ($type == 'NORMAL' && serendipity_db_bool($row['mail_comments'])) + || ($type == 'TRACKBACK' && serendipity_db_bool($row['mail_trackbacks']))) { + serendipity_sendComment($cid, $row['email'], $name, $email, $url, $id, $row['title'], $comments, $type, serendipity_db_bool($ca['moderate_comments'])); + } + + // Approve with force, if moderation is disabled + if (empty($ca['moderate_comments']) || serendipity_db_bool($ca['moderate_comments']) == false) { + serendipity_approveComment($cid, $id, true); + } + serendipity_purgeEntry($id, $t); + return true; + } else { + return false; + } +} + +function serendipity_mailSubscribers($entry_id, $poster, $posterMail, $title, $fromEmail = 'none@example.com') { + global $serendipity; + + $entryURI = serendipity_archiveURL($entry_id, $title, 'baseURL'); + $subject = sprintf(NEW_COMMENT_TO_SUBSCRIBED_ENTRY, $title); + + $pgsql_insert = ''; + $mysql_insert = ''; + if ($serendipity['dbType'] == 'postgres') { + $pgsql_insert = 'DISTINCT ON (email)'; + } else { + $mysql_insert = 'GROUP BY email'; + } + + $sql = "SELECT $pgsql_insert author, email, type + FROM {$serendipity['dbPrefix']}comments + WHERE entry_id = '". (int)$entry_id ."' + AND email <> '" . serendipity_db_escape_string($posterMail) . "' + AND subscribed = 'true' $mysql_insert"; + $subscribers = serendipity_db_query($sql); + + if (!is_array($subscribers)) { + return; + } + + foreach ($subscribers as $subscriber) { + if ($subscriber['type'] == 'TRACKBACK') { + $text = sprintf( + SUBSCRIPTION_TRACKBACK_MAIL, + + $subscriber['author'], + $serendipity['blogTitle'], + $title, + $poster, + $entryURI, + serendipity_rewriteURL('unsubscribe/' . urlencode($subscriber['email']) . '/' . (int)$entry_id, 'baseURL') + ); + } else { + $text = sprintf( + SUBSCRIPTION_MAIL, + + $subscriber['author'], + $serendipity['blogTitle'], + $title, + $poster, + $entryURI, + serendipity_rewriteURL('unsubscribe/' . urlencode($subscriber['email']) . '/' . (int)$entry_id, 'baseURL') + ); + } + + serendipity_sendMail($subscriber['email'], $subject, $text, $fromEmail); + } +} + +function serendipity_cancelSubscription($email, $entry_id) { + global $serendipity; + $sql = "UPDATE {$serendipity['dbPrefix']}comments + SET subscribed = 'false' + WHERE entry_id = '". (int)$entry_id ."' + AND email = '" . serendipity_db_escape_string($email) . "'"; + serendipity_db_query($sql); + + return serendipity_db_affected_rows(); +} + +function serendipity_sendComment($comment_id, $to, $fromName, $fromEmail, $fromUrl, $id, $title, $comment, $type = 'NORMAL', $moderate_comment = false) { + global $serendipity; + + if (empty($fromName)) { + $fromName = ANONYMOUS; + } + + $entryURI = serendipity_archiveURL($id, $title, 'baseURL'); + $path = ($type == 'TRACKBACK') ? 'trackback' : 'comment'; + $deleteURI = serendipity_rewriteURL(PATH_DELETE . '/'. $path .'/' . $comment_id . '/'. $id .'_' . serendipity_makeFilename($title) . '.html', 'baseURL'); + $approveURI = serendipity_rewriteURL(PATH_APPROVE . '/'. $path .'/' . $comment_id . '/'. $id .'_' . serendipity_makeFilename($title) . '.html', 'baseURL'); + + if ($type == 'TRACKBACK') { + + /******************* TRACKBACKS *******************/ + $subject = ($moderate_comment ? '[' . REQUIRES_REVIEW . '] ' : '') . NEW_TRACKBACK_TO . ' ' . $title; + $text = sprintf(A_NEW_TRACKBACK_BLAHBLAH, $title) + . "\n" + . "\n" . REQUIRES_REVIEW . ': ' . (($moderate_comment) ? YES : NO) . (isset($serendipity['moderate_reason']) ? ' (' . $serendipity['moderate_reason'] . ')' : '') + . "\n" . LINK_TO_ENTRY . ': ' . $entryURI + . "\n" . 'Weblog ' . NAME . ': ' . stripslashes($fromName) + . "\n" . LINK_TO_REMOTE_ENTRY . ': ' . $fromUrl + . "\n" + . "\n" . EXCERPT . ':' + . "\n" . strip_tags($comment) + . "\n" + . "\n" . '----' + . "\n" . YOU_HAVE_THESE_OPTIONS + . (($moderate_comment) ? "\n" . str_repeat(' ', 2) . THIS_TRACKBACK_NEEDS_REVIEW : '') + . "\n" . str_repeat(' ', 3) . str_pad(VIEW_ENTRY, 15) . ' -- '. $entryURI + . "\n" . str_repeat(' ', 3) . str_pad(DELETE_TRACKBACK, 15) . ' -- '. $deleteURI + . (($moderate_comment) ? "\n" . str_repeat(' ', 3) . str_pad(APPROVE_TRACKBACK, 15) . ' -- '. $approveURI : ''); + + } else { + + /******************* COMMENTS *********************/ + $subject = ($moderate_comment ? '[' . REQUIRES_REVIEW . '] ' : '') . NEW_COMMENT_TO . ' ' . $title; + $text = sprintf(A_NEW_COMMENT_BLAHBLAH, $serendipity['blogTitle'], $title) + . "\n" . LINK_TO_ENTRY . ': ' . $entryURI + . "\n" + . "\n" . REQUIRES_REVIEW . ': ' . (($moderate_comment) ? YES : NO) . (isset($serendipity['moderate_reason']) ? ' (' . $serendipity['moderate_reason'] . ')' : '') + . "\n" . USER . ' ' . IP_ADDRESS . ': ' . $_SERVER['REMOTE_ADDR'] + . "\n" . USER . ' ' . NAME . ': ' . $fromName + . "\n" . USER . ' ' . EMAIL . ': ' . $fromEmail + . "\n" . USER . ' ' . HOMEPAGE . ': ' . $fromUrl + . "\n" + . "\n" . COMMENTS . ': ' + . "\n" . strip_tags($comment) + . "\n" + . "\n" . '----' + . "\n" . YOU_HAVE_THESE_OPTIONS + . (($moderate_comment) ? "\n" . str_repeat(' ', 2) . THIS_COMMENT_NEEDS_REVIEW : '') + . "\n" . str_repeat(' ', 3) . str_pad(VIEW_COMMENT, 15) . ' -- '. $entryURI .'#c'. $comment_id + . "\n" . str_repeat(' ', 3) . str_pad(DELETE_COMMENT, 15) . ' -- '. $deleteURI + . (($moderate_comment) ? "\n" . str_repeat(' ', 3) . str_pad(APPROVE_COMMENT, 15) . ' -- '. $approveURI : ''); + } + + return serendipity_sendMail($to, $subject, $text, $fromEmail); +} diff --git a/include/functions_config.inc.php b/include/functions_config.inc.php new file mode 100644 index 0000000..7d353d2 --- /dev/null +++ b/include/functions_config.inc.php @@ -0,0 +1,490 @@ + $name, 'value' => $val, 'authorid' => $authorid)); + $serendipity[$name] = $val; + if (is_string($r)) { + echo $r; + } +} + +function serendipity_get_config_var($name, $defval = false, $empty = false) { + global $serendipity; + if (isset($serendipity[$name])) { + if ($empty && gettype($serendipity[$name]) == 'string' && $serendipity[$name] === '') { + return $defval; + } else { + return $serendipity[$name]; + } + } else { + return $defval; + } +} + +function serendipity_get_user_config_var($name, $authorid, $default = '') { + global $serendipity; + + $author_sql = ''; + if (!empty($authorid)) { + $author_sql = "authorid = " . (int)$authorid . " AND "; + } + + $r = serendipity_db_query("SELECT value FROM {$serendipity['dbPrefix']}config WHERE $author_sql name = '" . $name . "' LIMIT 1", true); + + if (is_array($r)) { + return $r[0]; + } else { + return $default; + } +} + +function serendipity_get_user_var($name, $authorid, $default) { + global $serendipity; + + $r = serendipity_db_query("SELECT $name FROM {$serendipity['dbPrefix']}authors WHERE authorid = " . (int)$authorid, true); + + if (is_array($r)) { + return $r[0]; + } else { + return $default; + } +} + +function serendipity_set_user_var($name, $val, $authorid, $copy_to_s9y = true) { + global $serendipity; + + // When inserting a DB value, this array maps the new values to the corresponding s9y variables + static $user_map_array = array( + 'username' => 'serendipityUser', + 'email' => 'serendipityEmail', + 'userlevel' => 'serendipityUserlevel' + ); + + // Special case for inserting a password + switch($name) { + case 'password': + if (empty($val)) { + return; + } + + $val = md5($val); + $copy_to_s9y = false; + break; + + case 'right_publish': + case 'mail_comments': + case 'mail_trackbacks': + $val = (serendipity_db_bool($val) ? 1 : '0'); + break; + } + + serendipity_db_query("UPDATE {$serendipity['dbPrefix']}authors SET $name = '" . serendipity_db_escape_string($val) . "' WHERE authorid = " . (int)$authorid); + + if ($copy_to_s9y) { + if (isset($user_map_array[$name])) { + $key = $user_map_array[$name]; + } else { + $key = 'serendipity' . ucfirst($name); + } + + $_SESSION[$key] = $serendipity[$key] = $val; + } +} + +function serendipity_getTemplateFile($file, $key = 'serendipityHTTPPath') { + global $serendipity; + + $directories = array(); + + $directories[] = isset($serendipity['template']) ? $serendipity['template'] . '/' : ''; + if ( isset($serendipity['template_engine']) ) { + $directories[] = $serendipity['template_engine'] . '/'; + } + $directories[] = $serendipity['defaultTemplate'] .'/'; + $directories[] = 'default/'; + + foreach ($directories as $directory) { + $templateFile = $serendipity['templatePath'] . $directory . $file; + + if (file_exists($serendipity['serendipityPath'] . $templateFile)) { + return $serendipity[$key] . $templateFile; + } + } + return false; +} + +function serendipity_load_configuration($author = null) { + global $serendipity; + + if (!empty($author)) { + // Replace default configuration directives with user-relevant data + $rows = serendipity_db_query("SELECT name,value + FROM {$serendipity['dbPrefix']}config + WHERE authorid = '". (int)$author ."'"); + } else { + // Only get default variables, user-independent (frontend) + $rows = serendipity_db_query("SELECT name,value + FROM {$serendipity['dbPrefix']}config + WHERE authorid = 0"); + } + + if (is_array($rows)) { + foreach ($rows as $row) { + // Convert 'true' and 'false' into booleans + $serendipity[$row['name']] = serendipity_get_bool($row['value']); + } + } +} + +function serendipity_logout() { + $_SESSION['serendipityAuthedUser'] = false; + @session_destroy(); + serendipity_deleteCookie('author_information'); +} + +function serendipity_login($use_external = true) { + global $serendipity; + + if (serendipity_authenticate_author('', '', false, $use_external)) { + #The session has this data already + #we previously just checked the value of $_SESSION['serendipityAuthedUser'] but + #we need the authorid still, so call serendipity_authenticate_author with blank + #params + return true; + } + + if (serendipity_authenticate_author($serendipity['POST']['user'], $serendipity['POST']['pass'], false, $use_external)) { + if (empty($serendipity['POST']['auto'])) { + serendipity_deleteCookie('author_information'); + return false; + } else { + $package = serialize(array('username' => $serendipity['POST']['user'], + 'password' => $serendipity['POST']['pass'])); + serendipity_setCookie('author_information', base64_encode($package)); + return true; + } + } elseif ( isset($serendipity['COOKIE']['author_information']) ) { + $cookie = unserialize(base64_decode($serendipity['COOKIE']['author_information'])); + if (serendipity_authenticate_author($cookie['username'], $cookie['password'], $use_external)) { + return true; + } else { + serendipity_deleteCookie('author_information'); + return false; + } + } +} + +function serendipity_userLoggedIn() { + if ($_SESSION['serendipityAuthedUser'] === true && IS_installed) { + return true; + } else { + return false; + } +} + +function serendipity_restoreVar(&$source, &$target) { + global $serendipity; + + if (isset($source) && !isset($target)) { + $target = $source; + return true; + } + + return false; +} + +function serendipity_JSsetCookie($name, $value) { + $name = str_replace('"', '\"', $name); + $value = str_replace('"', '\"', $value); + + echo '' . "\n"; +} + +function serendipity_setCookie($name,$value) { + global $serendipity; + + setcookie("serendipity[$name]", $value, time()+60*60*24*30, $serendipity['serendipityHTTPPath']); + $_COOKIE[$name] = $value; + $serendipity['COOKIE'][$name] = $value; +} + +function serendipity_deleteCookie($name) { + global $serendipity; + + setcookie("serendipity[$name]", '', time()-4000); + unset($_COOKIE[$name]); + unset($serendipity['COOKIE'][$name]); +} + +function serendipity_authenticate_author($username = '', $password = '', $is_md5 = false, $use_external = true) { + global $serendipity; + + if (isset($_SESSION['serendipityUser']) && isset($_SESSION['serendipityPassword']) && isset($_SESSION['serendipityAuthedUser']) && $_SESSION['serendipityAuthedUser'] == true) { + $username = $_SESSION['serendipityUser']; + $password = $_SESSION['serendipityPassword']; + // For safety reasons when multiple blogs are installed on the same host, we need to check the current author each time to not let him log into a different blog with the same sessiondata + $is_md5 = true; + } + + if ($username != '') { + if ($use_external) { + serendipity_plugin_api::hook_event('backend_auth', $is_md5, array('username' => $username, 'password' => $password)); + } + + if ($is_md5 === false && !empty($password)) { + $password = md5($password); + } + + $query = "SELECT DISTINCT + email, authorid, userlevel, right_publish + FROM + $serendipity[dbPrefix]authors + WHERE + username = '" . serendipity_db_escape_string($username) . "' + AND password = '" . serendipity_db_escape_string($password) . "'"; + $row = serendipity_db_query($query, true, 'assoc'); + + if (is_array($row)) { + $_SESSION['serendipityUser'] = $serendipity['serendipityUser'] = $username; + $_SESSION['serendipityPassword'] = $serendipity['serendipityPassword'] = $password; + $_SESSION['serendipityEmail'] = $serendipity['serendipityEmail'] = $row['email']; + $_SESSION['serendipityAuthorid'] = $serendipity['authorid'] = $row['authorid']; + $_SESSION['serendipityUserlevel'] = $serendipity['serendipityUserlevel'] = $row['userlevel']; + $_SESSION['serendipityAuthedUser'] = $serendipity['serendipityAuthedUser'] = true; + $_SESSION['serendipityRightPublish']= $serendipity['serendipityRightPublish'] = $row['right_publish']; + serendipity_load_configuration($serendipity['authorid']); + return true; + } else { + $_SESSION['serendipityAuthedUser'] = false; + @session_destroy(); + } + } + + return false; +} + +function serendipity_is_iframe() { + global $serendipity; + + if ($serendipity['GET']['is_iframe'] && is_array($_SESSION['save_entry'])) { + // An iframe may NOT contain and tags, that's why we emit different headers here than on serendipity_admin.php +?> + + <?php echo SERENDIPITY_ADMIN_SUITE; ?> + + + + + + +
+
+ +
+
+ +'; + $res = serendipity_updertEntry($entry); + + if (is_string($res)) { + echo '
' . ERROR . ': ' . $res . '
'; + } else { + if (!empty($serendipity['lastSavedEntry'])) { + // Last saved entry must be propagated to entry form so that if the user re-edits it, + // it needs to be stored with the new ID. + echo ''; + } + echo '
' . ENTRY_SAVED . '
'; + } + echo '
'; + + return true; + break; + + case 'preview': + echo '
'; + $serendipity['smarty_raw_mode'] = true; // Force output of Smarty stuff in the backend + serendipity_smarty_init(); + $serendipity['smarty']->assign('is_preview', true); + + serendipity_printEntries(array($entry), ($entry['extended'] != '' ? 1 : 0), true); + echo '
'; + + return true; + break; + } + + return false; +} + +function serendipity_iframe_create($mode, &$entry) { + global $serendipity; + + if (!empty($serendipity['POST']['no_save'])) { + return true; + } + + $_SESSION['save_entry'] = $entry; + $_SESSION['save_entry_POST'] = $serendipity['POST']; + + $attr = ''; + switch($mode) { + case 'save': + $attr = ' height="100" '; + break; + + case 'preview': + $attr = ' height="300" '; + break; + } + + echo '

'; +} + +function serendipity_probeInstallation($item) { + global $serendipity; + $res = NULL; + + switch ( $item ) { + case 'dbType' : + $res = array(); + if (extension_loaded('mysql')) { + $res['mysql'] = 'MySQL'; + } + if (extension_loaded('pgsql')) { + $res['postgres'] = 'PostgreSQL'; + } + if (extension_loaded('mysqli')) { + $res['mysqli'] = 'MySQLi'; + } + if (extension_loaded('sqlite')) { + $res['sqlite'] = 'SQLite'; + } + break; + + case 'rewrite' : + $res = array(); + $res['none'] = 'Disable URL Rewriting'; + $res['errordocs'] = 'Use Apache errorhandling'; + if( !function_exists('apache_get_modules') || in_array('mod_rewrite', apache_get_modules()) ) { + $res['rewrite'] = 'Use Apache mod_rewrite'; + } + break; + } + + return $res; +} + +function serendipity_header($header) { + if (!headers_sent()) { + header($header); + } +} + +/* TODO: + This previously was handled inside a plugin with an event hook, but caching + the event plugins that early in sequence created trouble with plugins not + having loaded the right language. + Find a way to let plugins hook into that sequence :-) */ +function serendipity_getSessionLanguage() { + global $serendipity; + + if ($_SESSION['serendipityAuthedUser']) { + serendipity_header('X-Serendipity-InterfaceLangSource: Database'); + return $serendipity['lang']; + } + + if (isset($_REQUEST['user_language']) && (!empty($serendipity['languages'][$_REQUEST['user_language']])) && !headers_sent()) { + serendipity_setCookie('serendipityLanguage', $_REQUEST['user_language']); + } + + if (isset($serendipity['COOKIE']['serendipityLanguage'])) { + serendipity_header('X-Serendipity-InterfaceLangSource: Cookie'); + $lang = $serendipity['COOKIE']['serendipityLanguage']; + } elseif (!empty($serendipity['languages'][$serendipity['GET']['lang_selected']])) { + serendipity_header('X-Serendipity-InterfaceLangSource: GET'); + $lang = $serendipity['GET']['lang_selected']; + } elseif (serendipity_db_bool($serendipity['lang_content_negotiation'])) { + serendipity_header('X-Serendipity-InterfaceLangSource: Content-Negotiation'); + $lang = serendipity_detectLang(); + } + + if (!isset($lang) || !isset($serendipity['languages'][$lang])) { + $lang = $serendipity['lang']; + } + + serendipity_header('X-Serendipity-InterfaceLang: ' . $lang); + + if ($lang != $serendipity['lang']) { + $serendipity['content_lang'] = $lang; + } + + return $lang; +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/functions_entries.inc.php b/include/functions_entries.inc.php new file mode 100644 index 0000000..5c9f133 --- /dev/null +++ b/include/functions_entries.inc.php @@ -0,0 +1,1666 @@ + 0, 'category_right' => 0)); + } + + return array('category_left' => $res[0]['category_left'], 'category_right' => $res[0]['category_right']); +} + +function serendipity_fetchCategoryInfo($categoryid, $categoryname = '') { + global $serendipity; + + if (!empty($categoryname)) { + $query = "SELECT + c.authorid, + c.categoryid, + c.category_name, + c.category_description, + c.category_icon, + c.parentid + FROM {$serendipity['dbPrefix']}category AS c + WHERE category_name = '" . serendipity_db_escape_string($categoryname) . "'"; + + $ret = serendipity_db_query($query); + return $ret[0]; + } else if (is_numeric($categoryid)) { + $query = "SELECT + c.authorid, + c.categoryid, + c.category_name, + c.category_description, + c.category_icon, + c.parentid + FROM {$serendipity['dbPrefix']}category AS c + WHERE categoryid = {$categoryid}"; + + $ret = serendipity_db_query($query); + return $ret[0]; + } +} + +function serendipity_fetchEntryCategories($entryid) { + global $serendipity; + + if (is_numeric($entryid)) { + $query = "SELECT + c.categoryid, + c.category_name, + c.category_description, + c.category_icon, + c.parentid + FROM {$serendipity['dbPrefix']}category AS c + INNER JOIN {$serendipity['dbPrefix']}entrycat AS ec + ON ec.categoryid = c.categoryid + WHERE ec.entryid = {$entryid}"; + + $cat = serendipity_db_query($query); + if (!is_array($cat)) { + return array(); + } else { + return $cat; + } + } +} + + +/** +* Give it a range in YYYYMMDD format to gather the desired entries +* (For february 2002 you would pass 200202 for all entries withing +* two timestamps you would pass array(timestamp1,timestamp2) +**/ +function serendipity_fetchEntries($range = null, $full = true, $limit = '', $fetchDrafts = false, $modified_since = false, $orderby = 'timestamp DESC', $filter_sql = '', $noCache = false, $noSticky = false) { + global $serendipity; + + $cond = array(); + $cond['orderby'] = $orderby; + if (isset($serendipity['short_archives']) && $serendipity['short_archives']) { + // In the short listing of all titles for a month, we don't want to have a limit applied. And we don't need/want toe + // full article body (consumes memory) + $limit = ''; + $full = false; + } + + if ($full === true) { + $noCache = true; // So no entryproperties related to body/extended caching will be loaded + $body = ', e.body, e.extended'; + } else { + $body = ''; + } + + if ($fetchDrafts === false) { + $drafts = "isdraft = 'false'"; + } + + if ($limit != '') { + $serendipity['fetchLimit'] = $limit; + } + + /* Attempt to grab range from $serendipity, if $range is not an array or null */ + if (!is_array($range) && !is_null($range) && isset($serendipity['range'])) { + $range = $serendipity['range']; + } + + if (is_numeric($range)) { + $year = (int)substr($range, 0, 4); + $month = (int)substr($range, 4, 2); + $day = (int)substr($range, 6, 2); + + $startts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true); + + if ($day == 0) { + $month++; + } else { + $day++; + } + + $endts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true); + + $cond['and'] = " WHERE timestamp >= $startts AND timestamp <= $endts"; + } elseif (is_array($range) && count($range)==2) { + $startts = serendipity_serverOffsetHour((int)$range[0], true); + $endts = serendipity_serverOffsetHour((int)$range[1], true); + $cond['and'] = " WHERE timestamp >= $startts AND timestamp <= $endts"; + } else { + if ($modified_since) { + $unix_modified = strtotime($modified_since); + if ($unix_modified != -1) { + $cond['and'] = ' WHERE last_modified >= ' . (int)$unix_modified; + if (!empty($limit)) { + $limit = ($limit > $serendipity['max_fetch_limit'] ? $limit : $serendipity['max_fetch_limit']); + } + $cond['orderby'] = 'last_modified DESC'; + } + } + } + + if (!empty($drafts)) { + if (!empty($cond['and'])) { + $cond['and'] .= " AND $drafts"; + } else { + $cond['and'] = "WHERE $drafts"; + } + } + + if (isset($serendipity['GET']['viewAuthor'])) { + $cond['and'] .= " AND e.authorid = ". (int)$serendipity['GET']['viewAuthor']; + } + + + if (isset($serendipity['GET']['category'])) { + $categoryid = (int)$serendipity['GET']['category']; + + if ($categoryid != 0) { + if (!empty($cond['and'])) { + $cond['and'] .= " AND c.category_left BETWEEN " . implode(' AND ', serendipity_fetchCategoryRange($categoryid)); + } else { + $cond['and'] = "WHERE c.category_left BETWEEN " . implode(' AND ', serendipity_fetchCategoryRange($categoryid)); + } + } + } + + if (!empty($limit)) { + if (isset($serendipity['GET']['page']) && $serendipity['GET']['page'] > 1 && !strstr($limit, ',')) { + $limit = serendipity_db_limit(($serendipity['GET']['page']-1) * $limit, $limit); + } + + $limit = serendipity_db_limit_sql($limit); + } + + if (isset($serendipity['GET']['adminModule']) && $serendipity['GET']['adminModule'] == 'entries' && $serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF) { + if (!empty($cond['and'])) { + $cond['and'] .= " AND e.authorid = '" . $serendipity['authorid'] . "'"; + } else { + $cond['and'] = "WHERE e.authorid = '" . $serendipity['authorid'] . "'"; + } + } + + if (!isset($serendipity['GET']['adminModule']) && !serendipity_db_bool($serendipity['showFutureEntries'])) { + if (!empty($cond['and'])) { + $cond['and'] .= " AND e.timestamp <= '" . time() . "'"; + } else { + $cond['and'] = "WHERE e.timestamp <= '" . time() . "'"; + } + } + + if (!empty($filter_sql)) { + if (!empty($cond['and'])) { + $cond['and'] .= ' AND ' . $filter_sql; + } else { + $cond['and'] = 'WHERE ' . $filter_sql; + } + } + + serendipity_plugin_api::hook_event('frontend_fetchentries', $cond, array('noCache' => $noCache, 'noSticky' => $noSticky)); + + if ($serendipity['dbType'] == 'postgres') { + $group = ''; + $distinct = 'DISTINCT'; + } else { + $group = 'GROUP BY e.id'; + $distinct = ''; + } + + // Store the unique query condition for entries for later reference, like getting the total article count. + $serendipity['fullCountQuery'] = " + FROM + {$serendipity['dbPrefix']}entries AS e + LEFT JOIN {$serendipity['dbPrefix']}authors a + ON e.authorid = a.authorid + LEFT JOIN {$serendipity['dbPrefix']}entrycat ec + ON e.id = ec.entryid + LEFT JOIN {$serendipity['dbPrefix']}category c + ON ec.categoryid = c.categoryid + {$cond['joins']} + {$cond['and']}"; + + $query = "SELECT $distinct + {$cond['addkey']} + + e.id, + e.title, + e.timestamp, + e.comments, + e.exflag, + e.authorid, + e.trackbacks, + e.isdraft, + e.allow_comments, + e.last_modified, + + a.realname AS author, + a.email + + $body + {$serendipity['fullCountQuery']} + $group + ORDER BY {$cond['orderby']} + $limit"; + + $ret = serendipity_db_query($query); + + if (is_string($ret)) { + die("Query failed: $ret"); + } + + if (is_array($ret)) { + // The article's query LIMIT operates on a flattened entries layer so that + // an article having 5 associated categories won't count as 5 entries. + // But to store the expanded list of categories, we need to send a new + // query once for all entries we have just fetched. + // First code for this was sending 15 queries for 15 fetched entries, + // this is now limited to just one query per fetched articles group + + $search_ids = array(); // An array to hold all ids of the entry we want to fetch. + $assoc_ids = array(); // A temporary key association container to not have to loop through the return array once again. + + foreach($ret AS $i => $entry) { + $search_ids[] = $entry['id']; + $ret[$i]['categories'] = array(); // make sure every article gets its category association + $assoc_ids[$entry['id']] = $i; // store temporary reference + } + + serendipity_plugin_api::hook_event('frontend_entryproperties', $ret, $assoc_ids); + + $query = "SELECT + ec.entryid, + c.categoryid, + c.category_name, + c.category_description, + c.category_icon, + c.parentid + FROM {$serendipity['dbPrefix']}category AS c + LEFT JOIN {$serendipity['dbPrefix']}entrycat AS ec + ON ec.categoryid = c.categoryid + WHERE ec.entryid IN (" . implode(', ', $search_ids) . ")"; + + $search_ret = serendipity_db_query($query); + + if (is_array($search_ret)) { + foreach($search_ret AS $i => $entry) { + $ret[$assoc_ids[$entry['entryid']]]['categories'][] = $entry; + } + } + } + + return $ret; +} + +/** +* Fetches a specific entry +**/ +function serendipity_fetchEntry($key, $val, $full = true, $fetchDrafts = 'false') { + global $serendipity; + + $cond = array(); + $cond['and'] = " "; // intentional dummy string to attach dummy AND parts to the WHERE clauses + + if ($fetchDrafts == 'false') { + $cond['and'] = " AND e.isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : ''); + } + + if (isset($serendipity['GET']['adminModule']) && $serendipity['GET']['adminModule'] == 'entries' && $serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF) { + $cond['and'] = " AND e.authorid = '" . $serendipity['authorid'] . "'"; + } + + serendipity_plugin_api::hook_event('frontend_fetchentry', $cond, array('noSticky' => true)); + + $querystring = "SELECT + *, + a.realname AS author, + a.email + FROM + {$serendipity['dbPrefix']}entries e + LEFT JOIN {$serendipity['dbPrefix']}authors a + ON e.authorid = a.authorid + {$cond['joins']} + WHERE + e.$key LIKE '" . serendipity_db_escape_string($val) . "' + {$cond['and']} + LIMIT 1"; + + $ret = serendipity_db_query($querystring, true); + if (is_array($ret)) { + $ret['categories'] = serendipity_fetchEntryCategories($ret['id']); + $ret['properties'] = serendipity_fetchEntryProperties($ret['id']); + } + + return $ret; +} + +function serendipity_fetchEntryProperties($id) { + global $serendipity; + + $parts = array(); + serendipity_plugin_api::hook_event('frontend_entryproperties_query', $parts); + + $properties = serendipity_db_query("SELECT property, value FROM {$serendipity['dbPrefix']}entryproperties WHERE entryid = " . (int)$id . " " . $parts['and']); + if (!is_array($properties)) { + $properties = array(); + } + + $property = array(); + foreach($properties AS $idx => $row) { + $property[$row['property']] = $row['value']; + } + + return $property; +} + +/** +* Fetches a users categories +**/ +function serendipity_fetchCategories($authorid = null, $name = '') { + global $serendipity; + + if (!isset($authorid) || $authorid === null) { + $authorid = ((isset($serendipity['authorid']) && !empty($serendipity['GET']['adminModule'])) ? $serendipity['authorid'] : 1); + } + + if ($serendipity['serendipityUserlevel'] == USERLEVEL_ADMIN) { + $authorid = 'all'; + } + + if ($authorid != 'all' && is_numeric($authorid)) { + $where = " WHERE ((c.authorid = $authorid OR c.authorid = 0) " . (!empty($serendipity['serendipityUserlevel']) ? " OR a.userlevel < {$serendipity['serendipityUserlevel']}" : '') . ')'; + } else { + $where = ''; + } + + if (!empty($name)) { + if ($where == '') { + $where = ' WHERE '; + } else { + $where = ' AND '; + } + + $where .= " c.category_name = '" . serendipity_db_escape_string($name) . "'"; + } + + $querystring = "SELECT + c.*, + a.username, + a.realname + FROM {$serendipity['dbPrefix']}category AS c + LEFT OUTER JOIN {$serendipity['dbPrefix']}authors AS a + ON c.authorid = a.authorid $where + ORDER BY category_name"; + return serendipity_db_query($querystring); +} + +function serendipity_rebuildCategoryTree($parent = 0, $left = 0) { + // Based on http://www.sitepoint.com/article/hierarchical-data-database/1 + global $serendipity; + $right = $left + 1; + + $result = serendipity_db_query("SELECT categoryid FROM {$serendipity['dbPrefix']}category WHERE parentid = '" . (int)$parent . "'"); + if ( is_array($result) ) { + foreach ( $result as $category ) { + $right = serendipity_rebuildCategoryTree($category['categoryid'], $right); + } + } + if ( $parent > 0 ) { + serendipity_db_query("UPDATE {$serendipity['dbPrefix']}category SET category_left='{$left}', category_right='{$right}' WHERE categoryid='{$parent}'"); + } + + return $right + 1; +} + +/** +* Give it a raw searchstring, it'll search +**/ +function serendipity_searchEntries($term, $limit = '') { + global $serendipity; + + if ($limit == '') { + $limit = $serendipity['fetchLimit']; + } + + if (isset($serendipity['GET']['page']) && $serendipity['GET']['page'] > 1 && !strstr($limit, ',')) { + $limit = serendipity_db_limit(($serendipity['GET']['page']-1) * $limit, $limit); + } + + $limit = serendipity_db_limit_sql($limit); + + $term = serendipity_db_escape_string($term); + if ($serendipity['dbType'] == 'postgres') { + $group = ''; + $distinct = 'DISTINCT'; + $find_part = "(title~'$term' OR body~'$term' OR extended~'$term')"; + } elseif ($serendipity['dbType'] == 'sqlite') { + // Very extensive SQLite search. There currently seems no other way to perform fulltext search in SQLite + // But it's better than no search at all :-D + $group = 'GROUP BY e.id'; + $distinct = ''; + $term = serendipity_mb('strtolower', $term); + $find_part = "(lower(title) LIKE '%$term%' OR lower(body) LIKE '%$term%' OR lower(extended) LIKE '%$term%')"; + } else { + $group = 'GROUP BY e.id'; + $distinct = ''; + $find_part = "MATCH(title,body,extended) AGAINST('$term')"; + } + + $cond = array(); + $cond['and'] = " AND isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . time() : ''); + serendipity_plugin_api::hook_event('frontend_fetchentries', $cond); + + $serendipity['fullCountQuery'] = " + FROM + {$serendipity['dbPrefix']}entries e + LEFT JOIN {$serendipity['dbPrefix']}authors a + ON e.authorid = a.authorid + LEFT JOIN {$serendipity['dbPrefix']}entrycat ec + ON e.id = ec.entryid + {$cond['joins']} + WHERE + $find_part + {$cond['and']}"; + + $querystring = "SELECT $distinct + e.id, + e.authorid, + a.realname AS author, + a.email, + ec.categoryid, + e.timestamp, + e.comments, + e.title, + e.body, + e.extended, + e.trackbacks, + e.exflag + {$serendipity['fullCountQuery']} + $group + ORDER BY timestamp DESC + $limit"; + + $search = serendipity_db_query($querystring); + return $search; +} + +function serendipity_printEntryFooter() { + global $serendipity; + + $totalEntries = serendipity_getTotalEntries(); + $totalPages = ceil($totalEntries / $serendipity['fetchLimit']); + + if (!isset($serendipity['GET']['page'])) { + $serendipity['GET']['page'] = 1; + } + + if ($totalPages <= 0 ) { + $totalPages = 1; + } + + if ($serendipity['GET']['page'] > 1) { + $uriArguments = $serendipity['uriArguments']; + $uriArguments[] = 'P'. ($serendipity['GET']['page'] - 1); + $serendipity['smarty']->assign('footer_prev_page', serendipity_rewriteURL(implode('/', $uriArguments) .'.html')); + } + + $serendipity['smarty']->assign('footer_info', sprintf(PAGE_BROWSE_ENTRIES, (int)$serendipity['GET']['page'], $totalPages, $totalEntries)); + + if ($serendipity['GET']['page'] < $totalPages) { + $uriArguments = $serendipity['uriArguments']; + $uriArguments[] = 'P'. ($serendipity['GET']['page'] + 1); + $serendipity['smarty']->assign('footer_next_page', serendipity_rewriteURL(implode('/', $uriArguments) .'.html')); + } +} + +function serendipity_getTotalEntries() { + global $serendipity; + + // The unique query condition was built previously in serendipity_fetchEntries() + if ($serendipity['dbType'] == 'sqlite') { + $querystring = "SELECT count(e.id) {$serendipity['fullCountQuery']} GROUP BY e.id"; + } else { + $querystring = "SELECT count(distinct e.id) {$serendipity['fullCountQuery']}"; + } + + $query = serendipity_db_query($querystring); + + if (is_array($query) && isset($query[0])) { + if ($serendipity['dbType'] == 'sqlite') { + return count($query); + } else { + return $query[0][0]; + } + } + + return 0; +} + +/** +* Prints the entries you fetched with serendipity_fetchEntries/searchEntries in HTML. +**/ +function serendipity_printEntries($entries, $extended = 0, $preview = false) { + global $serendipity; + + $addData = array('extended' => $extended, 'preview' => $preview); + serendipity_plugin_api::hook_event('entry_display', $entries, $addData); + + if (isset($entries['clean_page']) && $entries['clean_page'] === true) { + $serendipity['smarty']->assign('plugin_clean_page', true); + serendipity_smarty_fetch('ENTRIES', 'entries.tpl', true); + return; // no display of this item + } + + // We shouldn't return here, because we want Smarty to handle the output + if (!is_array($entries) || $entries[0] == false || !isset($entries[0]['timestamp'])) { + $entries = array(); + } + + $dategroup = array(); + for ($x = 0, $num_entries = count($entries); $x < $num_entries; $x++) { + if (!empty($entries[$x]['properties']['ep_is_sticky']) && serendipity_db_bool($entries[$x]['properties']['ep_is_sticky'])) { + $entries[$x]['is_sticky'] = true; + $key = 'sticky'; + } else { + $key = date('Ymd', serendipity_serverOffsetHour($entries[$x]['timestamp'])); + } + + if (!empty($entries[$x]['properties']['ep_cache_body'])) { + $entries[$x]['body'] = &$entries[$x]['properties']['ep_cache_body']; + $entries[$x]['is_cached'] = true; + } + + if (!empty($entries[$x]['properties']['ep_cache_extended'])) { + $entries[$x]['extended'] = &$entries[$x]['properties']['ep_cache_extended']; + $entries[$x]['is_cached'] = true; + } + + $dategroup[$key]['date'] = $entries[$x]['timestamp']; + $dategroup[$key]['is_sticky'] = (isset($entries[$x]['is_sticky']) && serendipity_db_bool($entries[$x]['is_sticky']) ? true : false); + $dategroup[$key]['entries'][] = &$entries[$x]; + } + + foreach($dategroup as $properties) { + foreach($properties['entries'] as $x => $_entry) { + $entry = &$properties['entries'][$x]; // PHP4 Compat + serendipity_plugin_api::hook_event('frontend_display', $entry); + + $entry['link'] = serendipity_archiveURL($entry['id'], $entry['title'], 'serendipityHTTPPath'); + $entry['commURL'] = serendipity_archiveURL($entry['id'], $entry['title'], 'baseURL', false); + $entry['rdf_ident'] = serendipity_archiveURL($entry['id'], $entry['title'], 'baseURL'); + $entry['title'] = htmlspecialchars($entry['title']); + + $entry['link_allow_comments'] = $serendipity['baseURL'] . 'comment.php?serendipity[switch]=enable&serendipity[entry]=' . $entry['id']; + $entry['link_deny_comments'] = $serendipity['baseURL'] . 'comment.php?serendipity[switch]=disable&serendipity[entry]=' . $entry['id']; + $entry['allow_comments'] = serendipity_db_bool($entry['allow_comments']); + $entry['moderate_comments'] = serendipity_db_bool($entry['moderate_comments']); + $entry['viewmode'] = ($serendipity['GET']['cview'] == VIEWMODE_LINEAR ? VIEWMODE_LINEAR : VIEWMODE_THREADED); + $entry['link_popup_comments'] = $serendipity['serendipityHTTPPath'] .'comment.php?serendipity[entry_id]='. $entry['id'] .'&serendipity[type]=comments'; + $entry['link_popup_trackbacks'] = $serendipity['serendipityHTTPPath'] .'comment.php?serendipity[entry_id]='. $entry['id'] .'&serendipity[type]=trackbacks'; + $entry['link_edit'] = $serendipity['baseURL'] .'serendipity_admin.php?serendipity[action]=admin&serendipity[adminModule]=entries&serendipity[adminAction]=edit&serendipity[id]='. $entry['id']; + $entry['link_trackback'] = $serendipity['baseURL'] .'comment.php?type=trackback&entry_id='. $entry['id']; + $entry['link_rdf'] = serendipity_rewriteURL(PATH_FEEDS . '/ei_'. $entry['id'] .'.rdf'); + $entry['link_viewmode_threaded'] = $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] .'?url='. $entry['commURL'] .'&serendipity[cview]='. VIEWMODE_THREADED; + $entry['link_viewmode_linear'] = $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] .'?url='. $entry['commURL'] .'&serendipity[cview]='. VIEWMODE_LINEAR; + $entry['link_author'] = serendipity_rewriteURL(PATH_AUTHORS .'/'. serendipity_makePermalink(PERM_AUTHORS, array('id' => $entry['authorid'], 'title' => $entry['author']))); + + if (is_array($entry['categories'])) { + foreach ($entry['categories'] as $k => $v) { + $entry['categories'][$k]['category_link'] = serendipity_rewriteURL(PATH_CATEGORIES . '/' . serendipity_makePermalink(PERM_CATEGORIES, array('id' => $entry['categories'][$k]['categoryid'], 'title' => $entry['categories'][$k]['category_name']))); + } + } + + if (strlen($entry['extended'])) { + $entry['has_extended'] = true; + } + + if (isset($entry['exflag']) && $entry['exflag'] && ($extended || $preview)) { + $entry['is_extended'] = true; + } + + if (serendipity_db_bool($entry['allow_comments']) || !isset($entry['allow_comments']) || $entry['comments'] > 0) { + $entry['has_comments'] = true; + $entry['label_comments'] = $entry['comments'] == 1 ? COMMENT : COMMENTS; + } + + if (serendipity_db_bool($entry['allow_comments']) || !isset($entry['allow_comments']) || $entry['trackbacks'] > 0) { + $entry['has_trackbacks'] = true; + $entry['label_trackbacks'] = $entry['trackbacks'] == 1 ? TRACKBACK : TRACKBACKS; + } + + if ($_SESSION['serendipityAuthedUser'] === true && ($_SESSION['serendipityUserlevel'] >= USERLEVEL_CHIEF || $_SESSION['serendipityAuthorid'] == $entry['authorid'])) { + $entry['is_entry_owner'] = true; + } + + $entry['display_dat'] = ''; + serendipity_plugin_api::hook_event('frontend_display:html:per_entry', $entry); + $entry['plugin_display_dat'] =& $entry['display_dat']; + + if ($preview) { + ob_start(); + serendipity_plugin_api::hook_event('backend_preview', $entry); + $entry['backend_preview'] = ob_get_contents(); + ob_end_clean(); + } + + /* IF WE ARE DISPLAYING A FULL ENTRY */ + if (isset($serendipity['GET']['id'])) { + $serendipity['smarty']->assign( + array( + 'comments_messagestack' => (isset($serendipity['messagestack']['comments']) ? (array)$serendipity['messagestack']['comments'] : array()), + 'is_comment_added' => (isset($serendipity['GET']['csuccess']) && $serendipity['GET']['csuccess'] == 'true' ? true: false), + 'is_comment_moderate' => (isset($serendipity['GET']['csuccess']) && $serendipity['GET']['csuccess'] == 'moderate' ? true: false) + ) + ); + + serendipity_displayCommentForm( + $entry['id'], + $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?url=' . $entry['commURL'], + true, + $serendipity['POST'], + true, + serendipity_db_bool($entry['moderate_comments']), + $entry + ); + } // END FULL ENTRY LOGIC + } // end foreach-loop (entries) + } // end foreach-loop (dates) + + if (!isset($serendipity['GET']['id']) && + (!isset($serendipity['hidefooter']) || $serendipity['hidefooter'] == false) && + ($num_entries <= $serendipity['fetchLimit'])) { + serendipity_printEntryFooter(); + } + + $serendipity['smarty']->assign('entries', $dategroup); + unset($entries, $dategroup); + + if (isset($serendipity['short_archives']) && $serendipity['short_archives']) { + serendipity_smarty_fetch('ENTRIES', 'entries_summary.tpl', true); + } else { + serendipity_smarty_fetch('ENTRIES', 'entries.tpl', true); + } + +} // end function serendipity_printEntries + +function serendipity_printEntries_rss($entries, $version, $comments = false, $fullFeed = false, $showMail = true) { + global $serendipity; + + if (is_array($entries)) { + foreach ($entries as $entry) { + $id = (isset($entry['entryid']) && !empty($entry['entryid']) ? $entry['entryid'] : $entry['id']); + $guid = serendipity_rss_getguid($entry, $comments); + $entryLink = serendipity_archiveURL($id, $entry['title']); + if ($comments == true) { + // Display username as part of the title for easier feed-readability + $entry['title'] = $entry['author'] . ': ' . $entry['title']; + } + + // Embed a link to extended entry, if existing + if ($fullFeed) { + $entry['body'] .= ' ' . $entry['extended']; + } elseif ($entry['exflag']) { + $ext = '
' . sprintf(VIEW_EXTENDED_ENTRY, htmlspecialchars($entry['title'])) . ''; + } else { + $ext = ''; + } + + serendipity_plugin_api::hook_event('frontend_display', $entry); + // Do some relative -> absolute URI replacing magic. Replaces all HREF/SRC (, , ...) references to only the serendipitypath with the full baseURL URI + // garvin: Could impose some problems. Closely watch this one. + $entry['body'] = preg_replace('@(href|src)=("|\')(' . preg_quote($serendipity['serendipityHTTPPath']) . ')(.*)("|\')(.*)>@imsU', '\1=\2' . $serendipity['baseURL'] . '\4\2\6>', $entry['body']); + // jbalcorn: clean up body for XML compliance as best we can. + $entry['body'] = xhtml_cleanup($entry['body']); + + // extract author information + if ((isset($entry['no_email']) && $entry['no_email']) || !$showMail) { + $entry['email'] = 'nospam@example.com'; // RSS Feeds need an E-Mail address! + } elseif (empty($entry['email'])) { + $query = "select email FROM {$serendipity['dbPrefix']}authors WHERE authorid = '". serendipity_db_escape_string($entry['authorid']) ."'"; + $results = serendipity_db_query($query); + $entry['email'] = $results[0]['email']; + } + + if (!is_array($entry['categories'])) { + $entry['categories'] = array(0 => array('category_name' => $entry['category_name'])); + } + + if ($version == 'atom0.3') { + /*********** ATOM 0.3 FEED *************/ +?> + + + + + + + + + + + wfwcomment.php?cid= + + + + rss.php?version=&type=comments&cid= + + + + <?php echo serendipity_utf8_encode(htmlspecialchars($entry['title'])); ?> + +
+ +
+
+
+ + + <?php echo serendipity_utf8_encode(htmlspecialchars($entry['title'])); ?> + + $cat) { + ?> + #comments + wfwcomment.php?cid= + + + rss.php?version=&type=comments&cid= + + + + + + + + + + + + + + + $cat) { + $categories[] = $cat['category_name']; + } + +?> + + <?php echo serendipity_utf8_encode(htmlspecialchars($entry['title'])); ?> + + + + + + + + + + wfwcomment.php?cid= + + + rss.php?version=&type=comments&cid= + + + + + 0) { + // Return error message(s) + return implode("\n", $errors); + } + + serendipity_plugin_api::hook_event('backend_entry_presave', $entry); + + $categories = $entry['categories']; + unset($entry['categories']); + + $newEntry = 0; + $exflag = 0; + + if (!is_numeric($entry['timestamp'])) { + $entry['timestamp'] = time(); + } + + if (!isset($entry['last_modified']) || !is_numeric($entry['last_modified'])) { + $entry['last_modified'] = time(); + } + + /* WYSIWYG-editor inserts empty ' ' for extended body; this is reversed here */ + if (isset($entry['extended']) && trim($entry['extended']) == '') { + $entry['extended'] = ''; + } + + if (strlen($entry['extended'])) { + $exflag = 1; + } + + $entry['exflag'] = $exflag; + + if (!is_numeric($entry['id'])) { + /* we need to insert */ + + unset($entry['id']); + $entry['comments'] = 0; + + // New entries need an author + $entry['author'] = $serendipity['user']; + if (!isset($entry['authorid']) || empty($entry['authorid'])) { + $entry['authorid'] = $serendipity['authorid']; + } + + if (!$_SESSION['serendipityRightPublish']) { + $entry['isdraft'] = 'true'; + } + + if(!isset($entry['allow_comments'])){ + $entry['allow_comments']='false'; + } + if(!isset($entry['moderate_comments'])){ + $entry['moderate_comments']='false'; + } + + $res = serendipity_db_insert('entries', $entry); + + if ($res) { + $entry['id'] = $serendipity['lastSavedEntry'] = serendipity_db_insert_id('entries', 'id'); + if (is_array($categories)) { + foreach ($categories as $cat) { + if (is_numeric($cat)) + serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}entrycat (entryid, categoryid) VALUES ({$entry['id']}, {$cat})"); + } + } + } + else { + //Some error message here + return ENTRIES_NOT_SUCCESSFULLY_INSERTED; + } + $newEntry = 1; + } else { + /* we need to update */ + + // Get settings from entry if already in DB, which should not be alterable with POST methods + $_entry = serendipity_fetchEntry('id', $entry['id'], 1, 1); + $entry['authorid'] = $_entry['authorid']; + + if (isset($serendipity['GET']['adminModule']) && $serendipity['GET']['adminModule'] == 'entries' && $serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF && $entry['authorid'] != $serendipity['authorid']) { + // Only chiefs and admins can change other's entry. Else update fails. + return; + } + + if (!$_SESSION['serendipityRightPublish']) { + unset($entry['isdraft']); + } + + if (is_array($categories)) { + serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}entrycat WHERE entryid={$entry['id']}"); + foreach ($categories as $cat) { + serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}entrycat (entryid, categoryid) VALUES ({$entry['id']}, {$cat})"); + } + } + + $res = serendipity_db_update('entries', array('id' => $entry['id']), $entry); + $newEntry = 0; + } + + if (is_string($res)) { + return $res; + } + + if ($entry['isdraft'] == 'false') { + serendipity_plugin_api::hook_event('frontend_display', $entry, array('no_scramble' => true)); + serendipity_handle_references($entry['id'], $serendipity['blogTitle'], $entry['title'], $entry['body'] . $entry['extended'], $newEntry); + } + + serendipity_purgeEntry($entry['id'], $entry['timestamp']); + + // Send publish tags if either a new article has been inserted from scratch, or if the entry was previously + // stored as draft and is now published + if ($entry['isdraft'] == 'false' && ($newEntry || $_entry['isdraft'] == 'true')) { + serendipity_plugin_api::hook_event('backend_publish', $entry, $newEntry); + } else { + serendipity_plugin_api::hook_event('backend_save', $entry, $newEntry); + } + + return (int)$entry['id']; +} + +/** +* Deletes an entry and everything that belongs to it (comments, etc...) from +* the database +**/ +function serendipity_deleteEntry($id) { + global $serendipity; + + if (!is_numeric($id)) { + return false; + } + + // Purge the daily/monthly entries so they can be rebuilt + $result = serendipity_db_query("SELECT timestamp, authorid FROM {$serendipity['dbPrefix']}entries WHERE id = '". (int)$id ."'", true); + + if ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF && $result[1] != $serendipity['authorid']) { + // Only admins and chief users can delete entries which do not belong to the author + return; + } + + serendipity_purgeEntry($id, $result[0]); + + serendipity_db_query("DELETE FROM {$serendipity["dbPrefix"]}entries WHERE id=$id"); + serendipity_db_query("DELETE FROM {$serendipity["dbPrefix"]}entrycat WHERE entryid=$id"); + serendipity_db_query("DELETE FROM {$serendipity["dbPrefix"]}entryproperties WHERE entryid=$id"); + serendipity_db_query("DELETE FROM {$serendipity["dbPrefix"]}comments WHERE entry_id=$id"); + serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}references WHERE entry_id='$id'"); +} + +/** +* Print a list of categories +* +* Prints a list of categories for use in forms, the sidebar, or whereever... +* @param array An array of categories, typically gathered by serendipity_fetchCategories() +* @param array Select +* @param int Type +* @param int ID +* @param int Level +* @param string Tells the function, whether or not to display the XML button for each category. +* If empty, no links to the xml feeds will be displayed; If you want to, you can +* pass an image here (this setting is only used, when type==3). +* @see serendipity_fetchCategories() +*/ +function serendipity_generateCategoryList($cats, $select = array(0), $type = 0, $id = 0, $level = 0, $xmlImg = '') { + global $serendipity; + + if ( !is_array($cats) || !count($cats) ) + return; + + $ret = ''; + foreach ($cats as $cat) { + if ($cat['parentid'] == $id) { + switch ($type) { + case 0: + $ret .= str_repeat(' ', $level * 2).'• 
' . (!empty($cat['category_icon']) ? '' . $cat['category_name'] . ' ' : '') . htmlspecialchars($cat['category_name']) . (!empty($cat['category_description']) ? ' - ' . htmlspecialchars($cat['category_description']) : '') . '
' . "\n"; + break; + case 1: + case 2: + $ret .= ''; + break; + case 3: + $category_id = serendipity_makeFilename($cat['category_name']); + if (!empty($xmlImg)) { + $ret .= sprintf( + '
' . + 'xml %s' . + '%s' . + '
', + $serendipity['serendipityHTTPPath'] . 'rss.php?category=' . $cat['categoryid'] . '_' . $category_id, + htmlspecialchars($cat['category_description']), + $xmlImg, + str_repeat(' ', $level * 3), + serendipity_rewriteURL(PATH_CATEGORIES . '/' . serendipity_makePermalink(PERM_CATEGORIES, array('id' => $cat['categoryid'], 'title' => $category_id)), 'serendipityHTTPPath'), + htmlspecialchars($cat['category_description']), + htmlspecialchars($cat['category_name'])); + } else { + $ret .= sprintf( + '%s%s
', + str_repeat(' ', $level * 3), + serendipity_rewriteURL(PATH_CATEGORIES . '/' . serendipity_makePermalink(PERM_CATEGORIES, array('id' => $cat['categoryid'], 'title' => $category_id)), 'serendipityHTTPPath'), + htmlspecialchars($cat['category_description']), + htmlspecialchars($cat['category_name'])); + } + break; + case 4: + $ret .= $cat['categoryid'] . '|||' . str_repeat(' ', $level * 2) . $cat['category_name'] . '@@@'; + break; + } + $ret .= serendipity_generateCategoryList($cats, $select, $type, $cat['categoryid'], $level + 1, $xmlImg); + } + } + return $ret; +} + +/** +* Prints a form to enter new diary entries +**/ +function serendipity_printEntryForm($targetURL, $hiddens = array(), $entry = array(), $errMsg = "") { + global $serendipity; + + $serendipity['EditorBrowsers'] = '(IE|Mozilla)'; + + $draftD = ''; + $draftP = ''; + $categoryselector_expanded = false; + + serendipity_plugin_api::hook_event('backend_entryform', $entry); + + if ( (isset($entry['isdraft']) && $entry['isdraft'] == 'true') || + (!isset($entry['isdraft']) && $serendipity['publishDefault'] == 'draft') ) { + $draftD = ' selected="selected"'; + } else { + $draftP = ' selected="selected"'; + } + + if (isset($entry['moderate_comments']) && (serendipity_db_bool($entry['moderate_comments']))) { + $moderate_comments = ' checked="checked"'; + } elseif (!isset($entry['moderate_comments']) && ($serendipity['moderateCommentsDefault'] == 'true' || $serendipity['moderateCommentsDefault'] === true)) { + // This is the default on creation of a new entry and depends on the "moderateCommentsDefault" variable of the configuration. + $moderate_comments = ' checked="checked"'; + } else { + $moderate_comments = ''; + } + + + if (isset($entry['allow_comments']) && (serendipity_db_bool($entry['allow_comments']))) { + $allow_comments = ' checked="checked"'; + } elseif ((!isset($entry['allow_comments']) || $entry['allow_comments'] !== 'false') && (!isset($serendipity['allowCommentsDefault']) || $serendipity['allowCommentsDefault'] == 'true' || $serendipity['allowCommentsDefault'] === true)) { + // This is the default on creation of a new entry and depends on the "allowCommentsDefault" variable of the configuration. + $allow_comments = ' checked="checked"'; + } else { + $allow_comments = ''; + } + + // Fix category list. If the entryForm is displayed after a POST request, the additional category information is lost. + if (is_array($entry['categories']) && !is_array($entry['categories'][0])) { + $categories = (array)$entry['categories']; + $entry['categories'] = array(); + foreach ($categories as $catid) { + $entry['categories'][] = serendipity_fetchCategoryInfo($catid); + } + } + + $n = "\n"; + $cat_list = '' . $n; + + if (!empty($serendipity['GET']['title'])) { + $entry['title'] = utf8_decode(urldecode($serendipity['GET']['title'])); + } + + if (!empty($serendipity['GET']['body'])) { + $entry['body'] = utf8_decode(urldecode($serendipity['GET']['body'])); + } + + if (!empty($serendipity['GET']['url'])) { + $entry['body'] .= "\n" . '
' . $entry['title'] . ''; + } + + $hidden = ''; + foreach($hiddens as $key => $value) { + $hidden .= ' ' . $n; + } + $hidden .= ' ' . $n; + $hidden .= ' ' . $n; + $hidden .= ' '; + + if (!empty($errMsg)) { +?> +
+ +
="serendipityEntry" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + + + + + +
+ +
+
+ : + + + + <?php echo RESET_DATE ?> + + + + + : + +
+ + + + + + + + +
+ +
+ + + + + +
+ />
+ /> +
+
+ +
+
+
+ + +/- + + + + +
+ + + + +
+
+
+ + +
+
+
+ + + +'; + echo ' '; +} + +function serendipity_emit_htmlarea_code($item, $jsname) { + static $init = false; + global $serendipity; + + if (isset ($serendipity['wysiwyg']) && $serendipity['wysiwyg']) { + + if (!$init) { +?> + + + + + + + + $categories); + } + + foreach($categories AS $idx => $cat) { + $query = "INSERT INTO $serendipity[dbPrefix]entrycat (categoryid, entryid) VALUES (" . (int)$cat . ", " . (int)$postid . ")"; + serendipity_db_query($query); + } +} + +function serendipity_printArchives() { + global $serendipity; + + $f = serendipity_db_query("SELECT timestamp FROM {$serendipity['dbPrefix']}entries ORDER BY timestamp ASC LIMIT 1"); + $lastYear = date('Y', serendipity_serverOffsetHour($f[0][0])); + $lastMonth = date('m', serendipity_serverOffsetHour($f[0][0])); + $thisYear = date('Y', serendipity_serverOffsetHour()); + $thisMonth = date('m', serendipity_serverOffsetHour()); + $max = 0; + + $output = array(); + for ($y = $thisYear; $y >= $lastYear; $y--) { + $output[$y]['year'] = $y; + for ($m = 12; $m >= 1; $m--) { + + /* If the month we are checking are in the future, we drop it */ + if ($m > $thisMonth && $y == $thisYear) { + continue; + } + + /* If the month is lower than the lowest month containing entries, we're done */ + if ($m < $lastMonth && $y <= $lastYear) { + break; + } + + $s = serendipity_serverOffsetHour(mktime(0, 0, 0, $m, 1, $y), true); + $e = serendipity_serverOffsetHour(mktime(23, 59, 59, $m, date('t', $s), $y), true); + $entries = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}entries + WHERE isdraft = 'false' + AND timestamp >= $s + AND timestamp <= $e + " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . time() : '')); + $entry_count = $entries[0][0]; + + /* A silly hack to get the maximum amount of entries per month */ + if ($entry_count > $max) { + $max = $entry_count; + } + + $data = array(); + $data['entry_count'] = $entry_count; + $data['link'] = serendipity_archiveDateUrl($y . '/'. sprintf('%02s', $m)); + $data['link_summary'] = serendipity_archiveDateUrl($y . '/'. sprintf('%02s', $m), true); + $data['date'] = $s; + $output[$y]['months'][] = $data; + } + } + $serendipity['smarty']->assign(array('archives' => $output, + 'max_entries' => $max)); + + serendipity_smarty_fetch('ARCHIVES', 'entries_archives.tpl', true); +} + diff --git a/include/functions_images.inc.php b/include/functions_images.inc.php new file mode 100644 index 0000000..222a111 --- /dev/null +++ b/include/functions_images.inc.php @@ -0,0 +1,1289 @@ + 0) { + foreach ($updates as $k => $v) { + $q[] = $k ." = '" . serendipity_db_escape_string($v) . "'"; + } + serendipity_db_query("UPDATE {$serendipity['dbPrefix']}images SET ". implode($q, ',') ." WHERE id = " . (int)$id . " $admin"); + $i++; + } + return $i; +} + +function serendipity_deleteImage($id) { + global $serendipity; + $file = serendipity_fetchImageFromDatabase($id); + $dFile = $file['path'] . $file['name'] .'.'. $file['extension']; + $dThumb = $file['path'] . $file['name'] .'.'. $file['thumbnail_name'] .'.'. $file['extension']; + + $admin = ''; + if ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF && $file['authorid'] != '0' && $file['authorid'] != $serendipity['authorid']) { + // A non-admin user may not delete private files from other users. + return; + } + + if (!$file['hotlink']) { + if (file_exists($serendipity['serendipityPath'] . $serendipity['uploadPath'] . $dFile)) { + if (@unlink($serendipity['serendipityPath'] . $serendipity['uploadPath'] . $dFile)) { + printf(DELETE_FILE . '
', $dFile); + } else { + printf(DELETE_FILE_FAIL . '
', $dFile); + } + + if (@unlink($serendipity['serendipityPath'] . $serendipity['uploadPath'] . $dThumb)) { + printf(DELETE_THUMBNAIL . '
', $dThumb); + } + } else { + printf(FILE_NOT_FOUND . '
', $dFile); + } + } else { + printf(DELETE_HOTLINK_FILE . '
', $file['name']); + } + + serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}images WHERE id = ". (int)$id); + +} + +/** +* Get a list of images +**/ +function serendipity_fetchImages($group = false, $start = 0, $end = 20, $images = '', $odir = '') { + global $serendipity; + + // Open directory + $basedir = $serendipity['serendipityPath'] . $serendipity['uploadPath']; + $images = array(); + if ($dir = @opendir($basedir . $odir)) { + while(false !== ($f = readdir($dir))) { + if ($f != '.' && $f != '..' && strpos($f, $serendipity['thumbSuffix']) === false) { + $cdir = ($odir != '' ? $odir . '/' : ''); + if (is_dir($basedir . $odir . '/' . $f)) { + $temp = serendipity_fetchImages($group, $start, $end, $images, $cdir . $f); + foreach($temp AS $tkey => $tval) { + array_push($images, $tval); + } + } else { + array_push($images, $cdir . $f); + } + } + } + } + natsort($images); + + /* BC */ + $serendipity['imageList'] = $images; + return $images; +} + +function serendipity_insertHotlinkedImageInDatabase($filename, $url, $authorid = 0, $time = NULL, $tempfile = NULL) { + global $serendipity; + + if (is_null($time)) { + $time = time(); + } + + list($filebase, $extension) = serendipity_parseFileName($filename); + + if ($tempfile && file_exists($tempfile)) { + $filesize = @filesize($tempfile); + $fdim = @serendipity_getimagesize($tempfile, '', $extension); + $width = $fdim[0]; + $height = $fdim[1]; + $mime = $fdim['mime']; + @unlink($tempfile); + } + + $query = sprintf( + "INSERT INTO {$serendipity['dbPrefix']}images ( + name, + date, + authorid, + extension, + mime, + size, + dimensions_width, + dimensions_height, + path, + hotlink + ) VALUES ( + '%s', + %s, + %s, + '%s', + '%s', + %s, + %s, + %s, + '%s', + 1 + )", + serendipity_db_escape_string($filebase), + (int)$time, + (int)$authorid, + serendipity_db_escape_string($extension), + serendipity_db_escape_string($mime), + (int)$filesize, + (int)$width, + (int)$height, + serendipity_db_escape_string($url) + ); + + $sql = serendipity_db_query($query); + if (is_string($sql)) { + echo $query . '
'; + echo $sql . '
'; + } + + $image_id = serendipity_db_insert_id('images', 'id'); + if ($image_id > 0) { + return $image_id; + } + + return 0; +} + +function serendipity_insertImageInDatabase($filename, $directory, $authorid = 0, $time = NULL) { + global $serendipity; + + if ( is_null($time) ) { + $time = time(); + } + + $filepath = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $directory . $filename; + $filesize = @filesize($filepath); + + list($filebase, $extension) = serendipity_parseFileName($filename); + + $thumbpath = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $directory . $filebase . '.'. $serendipity['thumbSuffix'] . '.'. $extension; + $thumbnail = (file_exists($thumbpath) ? $serendipity['thumbSuffix'] : ''); + + $fdim = @serendipity_getimagesize($filepath, '', $extension); + $width = $fdim[0]; + $height = $fdim[1]; + $mime = $fdim['mime']; + + + $query = sprintf( + "INSERT INTO {$serendipity['dbPrefix']}images ( + name, + extension, + mime, + size, + dimensions_width, + dimensions_height, + thumbnail_name, + date, + authorid, + path + ) VALUES ( + '%s', + '%s', + '%s', + %s, + %s, + %s, + '%s', + %s, + %s, + '%s' + )", + serendipity_db_escape_string($filebase), + serendipity_db_escape_string($extension), + serendipity_db_escape_string($mime), + (int)$filesize, + (int)$width, + (int)$height, + serendipity_db_escape_string($thumbnail), + (int)$time, + (int)$authorid, + serendipity_db_escape_string($directory) + ); + + $sql = serendipity_db_query($query); + if (is_string($sql)) { + echo $query . '
'; + echo $sql . '
'; + } + + $image_id = serendipity_db_insert_id('images', 'id'); + if ($image_id > 0) { + return $image_id; + } + + return 0; +} + + +/** +* Generate a thumbnail +**/ +function serendipity_makeThumbnail($file, $directory = '', $size = false) { + global $serendipity; + + if ($size === false) { + $size = $serendipity['thumbSize']; + } + + $t = serendipity_parseFileName($file); + $f = $t[0]; + $suf = $t[1]; + + + $infile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $directory . $file; + $outfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $directory . $f . '.' . $serendipity['thumbSuffix'] . '.' . $suf; + + $fdim = @serendipity_getimagesize($infile, '', $suf); + if (isset($fdim['noimage'])) { + $r = array(0, 0); + } else { + if ($serendipity['magick'] !== true) { + $r = serendipity_resize_image_gd($infile, $outfile, $size); + } else { + $r = array($size, $size); + $newSize = $size . 'x' . $size; + if ($ft_mime != 'application/pdf') { + $cmd = escapeshellcmd($serendipity['convert']) . ' -antialias -scale '. serendipity_escapeshellarg($newSize) .' '. serendipity_escapeshellarg($infile) .' '. serendipity_escapeshellarg($outfile); + } else { + $cmd = escapeshellcmd($serendipity['convert']) . ' -antialias -flatten -scale '. serendipity_escapeshellarg($newSize) .' '. serendipity_escapeshellarg($infile) .' '. serendipity_escapeshellarg($outfile .'.png'); + } + exec($cmd, $output, $result); + if ( $result != 0 ) { + echo '
'. sprintf(IMAGICK_EXEC_ERROR, $cmd, $output[0], $result) .'
'; + $r = false; // return failure + } + unset($output, $result); + } + } + + return $r; +} + +/** +* Scale an image (ignoring proportions) +**/ +function serendipity_scaleImg($id, $width, $height) { + global $serendipity; + + $file = serendipity_fetchImageFromDatabase($id); + + $admin = ''; + if ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF && $file['authorid'] != '0' && $file['authorid'] != $serendipity['authorid']) { + return; + } + + $infile = $outfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.' . $file['extension']; + + if ($serendipity['magick'] !== true) { + serendipity_resize_image_gd($infile, $outfile, $width, $height); + } else { + $cmd = escapeshellcmd($serendipity['convert']) . ' -scale ' . serendipity_escapeshellarg($width . 'x' . $height) . ' ' . serendipity_escapeshellarg($infile) . ' ' . serendipity_escapeshellarg($outfile); + exec($cmd, $output, $result); + if ( $result != 0 ) { + echo '
'. sprintf(IMAGICK_EXEC_ERROR, $cmd, $output[0], $result) .'
'; + } + unset($output, $result); + } + + serendipity_updateImageInDatabase(array('dimensions_width' => $width, 'dimensions_height' => $height), $id); + return true; +} + +/** + * Rotate an Image + **/ +function serendipity_rotateImg($id, $degrees) { + global $serendipity; + + $file = serendipity_fetchImageFromDatabase($id); + + $admin = ''; + if ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF && $file['authorid'] != '0' && $file['authorid'] != $serendipity['authorid']) { + // A non-admin user may not delete private files from other users. + return false; + } + + $infile = $outfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.' . $file['extension']; + $infileThumb = $outfileThumb = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.' . $file['thumbnail_name'] . '.'. $file['extension']; + + if ($serendipity['magick'] !== true) { + serendipity_rotate_image_gd($infile, $outfile, $degrees); + serendipity_rotate_image_gd($infileThumb, $outfileThumb, $degrees); + } else { + /* Why can't we just all agree on the rotation direction? */ + $degrees = (360 - $degrees); + + /* Resize main image */ + $cmd = escapeshellcmd($serendipity['convert']) . ' -rotate ' . serendipity_escapeshellarg($degrees) . ' ' . serendipity_escapeshellarg($infile) . ' ' . serendipity_escapeshellarg($outfile); + exec($cmd, $output, $result); + if ( $result != 0 ) { + echo '
'. sprintf(IMAGICK_EXEC_ERROR, $cmd, $output[0], $result) .'
'; + } + unset($output, $result); + + /* Resize thumbnail */ + $cmd = escapeshellcmd($serendipity['convert']) . ' -rotate ' . serendipity_escapeshellarg($degrees) . ' ' . serendipity_escapeshellarg($infileThumb) . ' ' . serendipity_escapeshellarg($outfileThumb); + exec($cmd, $output, $result); + if ( $result != 0 ) { + echo '
'. sprintf(IMAGICK_EXEC_ERROR, $cmd, $output[0], $result) .'
'; + } + unset($output, $result); + + } + + $fdim = @getimagesize($outfile); + + serendipity_updateImageInDatabase(array('dimensions_width' => $fdim[0], 'dimensions_height' => $fdim[1]), $id); + + return true; +} + + +/** +* Creates thumbnails for all images in the upload dir +**/ +function serendipity_generateThumbs() { + global $serendipity; + + $i=0; + $serendipity['imageList'] = serendipity_fetchImagesFromDatabase(0, 0, $total); + + foreach ($serendipity['imageList'] as $k => $file) { + $is_image = serendipity_isImage($file); + + if ($is_image && !$file['hotlink']) { + $update = false; + $filename = $file['path'] . $file['name'] .'.'. $file['extension']; + $ffull = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $filename; + + if (!file_exists($ffull)) { + serendipity_deleteImage($file['id']); + continue; + } + + if (empty($file['thumbnail_name'])) { + $file['thumbnail_name'] = $serendipity['thumbSuffix']; + } + + $oldThumb = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.' . $file['thumbnail_name'] . '.' . $file['extension']; + $newThumb = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.' . $serendipity['thumbSuffix'] . '.' . $file['extension']; + $fdim = @getimagesize($ffull); + + if (!file_exists($oldThumb) && !file_exists($newThumb) && ($fdim[0] > $serendipity['thumbSize'] || $fdim[1] > $serendipity['thumbSize'])) { + $returnsize = serendipity_makeThumbnail($file['name'] . '.' . $file['extension'], $file['path']); + if ($returnsize !== false ) { + printf(RESIZE_BLAHBLAH, $filename . ': ' . $returnsize[0] . 'x' . $returnsize[1]); + if (!file_exists($newThumb)) { + printf('' . THUMBNAIL_FAILED_COPY . '
', $filename); + } else { + $update = true; + } + } + } elseif (!file_exists($oldThumb) && !file_exists($newThumb) && $fdim[0] <= $serendipity['thumbSize'] && $fdim[1] <= $serendipity['thumbSize']) { + $res = @copy($ffull, $newThumb); + if (@$res === true) { + printf(THUMBNAIL_USING_OWN . '
', $filename); + $update = true; + } else { + printf('' . THUMBNAIL_FAILED_COPY . '
', $filename); + } + } + + if ($update) { + $i++; + $updates = array('thumbnail_name' => $serendipity['thumbSuffix']); + serendipity_updateImageInDatabase($updates, $file['id']); + } + } else { + // Currently, non-image files have no thumbnail. + } + } + + return $i; +} + +function serendipity_guessMime($extension) { + $mime = ''; + switch (strtolower($extension)) { + case 'jpg': + case 'jpeg': + $mime = 'image/jpeg'; + break; + + case 'aiff': + case 'aif': + $mime = 'audio/x-aiff'; + break; + + case 'gif': + $mime = 'image/gif'; + break; + + case 'png': + $mime = 'image/png'; + break; + + case 'pdf': + $mime = 'application/pdf'; + break; + + case 'doc': + $mime = 'application/msword'; + break; + + case 'rtf': + $mime = 'application/rtf'; + break; + + case 'wav': + case 'wave': + $mime = 'audio/x-wav'; + break; + + case 'mp2': + case 'mpg': + case 'mpeg': + $mime = 'video/x-mpeg'; + break; + + case 'avi': + $mime = 'video/x-msvideo'; + break; + + case 'mp3': + $mime = 'audio/x-mpeg3'; + break; + + case 'xlm': + case 'xlb': + case 'xll': + case 'xla': + case 'xlw': + case 'xlc': + case 'xls': + case 'xlt': + $mime = 'application/vnd.ms-excel'; + break; + + case 'ppt': + case 'pps': + $mime = 'application/vnd.ms-powerpoint'; + break; + + case 'html': + case 'htm': + $mime = 'text/html'; + break; + + case 'xsl': + case 'xslt': + case 'xml': + case 'wsdl': + case 'xsd': + $mime = 'text/xml'; + break; + + case 'zip': + $mime = 'application/zip'; + break; + + case 'tar': + $mime = 'application/x-tar'; + break; + + case 'tgz': + case 'gz': + $mime = 'application/x-gzip'; + break; + + case 'swf': + $mime = 'application/x-shockwave-flash'; + break; + + case 'rm': + case 'ra': + case 'ram': + $mime = 'application/vnd.rn-realaudio'; + break; + + case 'exe': + $mime = 'application/octet-stream'; + break; + + case 'mov': + case 'qt': + $mime = 'video/x-quicktime'; + break; + + case 'midi': + case 'mid': + $mime = 'audio/x-midi'; + break; + + case 'txt': + $mime = 'text/plain'; + break; + + case 'qcp': + $mime = 'audio/vnd.qcelp'; + break; + + case 'emf': + $mime = 'image/x-emf'; + break; + + case 'wmf': + $mime = 'image/x-wmf'; + break; + + case 'snd': + $mime = 'audio/basic'; + break; + + case 'pmd': + $mime = 'application/x-pmd'; + break; + + case 'wbmp': + $mime = 'image/vnd.wap.wbmp'; + break; + + case 'gcd': + $mime = 'text/x-pcs-gcd'; + break; + + case 'mms': + $mime = 'application/vnd.wap.mms-message'; + break; + + case 'ogg': + case 'ogm': + $mime = 'application/ogg'; + break; + + case 'rv': + $mime = 'video/vnd.rn-realvideo'; + break; + + case 'wmv': + $mime = 'video/x-ms-wmv'; + break; + + case 'wma': + $mime = 'audio/x-ms-wma'; + break; + + case 'qcp': + $mime = 'audio/vnd.qcelp'; + break; + + case 'jad': + $mime = 'text/vnd.sun.j2me.app-descriptor'; + break; + + case '3g2': + case '3gp': + $mime = 'video/3gpp'; + break; + + case 'jar': + $mime = 'application/java-archive'; + + default: + $mime = 'application/octet-stream'; + break; + } + + return $mime; +} + +/** +* Creates thumbnails for all images in the upload dir +**/ +function serendipity_syncThumbs() { + global $serendipity; + + $i=0; + $files = serendipity_fetchImages(); + + $fcount = count($files); + for ($x = 0; $x < $fcount; $x++) { + $update = $q = array(); + $f = serendipity_parseFileName($files[$x]); + if (empty($f[1]) || $f[1] == $files[$x]) { + // No extension means bad file most probably. Skip it. + printf(SKIPPING_FILE_EXTENSION . '
', $files[$x]); + continue; + } + + $ffull = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $files[$x]; + $fthumb = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $f[0] . '.' . $serendipity['thumbSuffix'] . '.' . $f[1]; + $fbase = basename($f[0]); + $fdir = dirname($f[0]) . '/'; + if ($fdir == './') { + $fdir = ''; + } + + if (!is_readable($ffull) || filesize($ffull) == 0) { + printf(SKIPPING_FILE_UNREADABLE . '
', $files[$x]); + continue; + } + + $ft_mime = serendipity_guessMime($f[1]); + $fdim = serendipity_getimagesize($ffull, $ft_mime); + + $rs = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}images + WHERE name = '" . serendipity_db_escape_string($fbase) . "' + " . ($fdir != '' ? "AND path = '" . serendipity_db_escape_string($fdir) . "'" : '') . " + AND mime = '" . serendipity_db_escape_string($fdim['mime']) . "'", true, 'assoc'); + if (is_array($rs)) { + $update = array(); + $checkfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $rs['path'] . $rs['name'] . '.' . $rs['thumbnail_name'] . '.' . $rs['extension']; + if (isset($fdim[0]) && $rs['dimensions_width'] != $fdim[0]) { + $update['dimensions_width'] = $fdim[0]; + } + + if (isset($fdim[1]) && $rs['dimensions_height'] != $fdim[1]) { + $update['dimensions_height'] = $fdim[1]; + } + + if ($rs['size'] != filesize($ffull)) { + $update['size'] = filesize($ffull); + } + + if (!file_exists($checkfile) && file_exists($fthumb)) { + $update['thumbnail_name'] = $serendipity['thumbSuffix']; + } + + /* Do the database update, if needed */ + if (sizeof($update) != 0) { + printf(FOUND_FILE . '
', $files[$x]); + serendipity_updateImageInDatabase($update, $rs['id']); + $i++; + } + } else { + printf(FOUND_FILE . '
', $files[$x]); + serendipity_insertImageInDatabase($fbase . '.' . $f[1], $fdir, 0, filemtime($ffull)); + $i++; + } + } + return $i; +} + +function serendipity_functions_gd($infilename) { + if (!function_exists('imagecopyresampled')) { + return false; + } + + $func = array(); + $inf = pathinfo(strtolower($infilename)); + switch ($inf['extension']) { + case 'gif': + $func['load'] = 'imagecreatefromgif'; + $func['save'] = 'imagegif'; + break; + + case 'jpeg': + case 'jpg': + case 'jfif': + $func['load'] = 'imagecreatefromjpeg'; + $func['save'] = 'imagejpeg'; + break; + + case 'png': + $func['load'] = 'imagecreatefrompng'; + $func['save'] = 'imagepng'; + break; + + default: + return false; + } + + /* If our loader does not exist, we are doomed */ + if (!function_exists($func['load'])) { + return false; + } + + /* If the save function does not exist (i.e. read-only GIF), we want to output it as PNG */ + if (!function_exists($func['save'])) { + if (function_exists('imagepng')) { + $func['save'] = 'imagepng'; + } else { + return false; + } + } + + return $func; +} + +function serendipity_rotate_image_gd($infilename, $outfilename, $degrees) +{ + $func = serendipity_functions_gd($infilename); + if (!is_array($func)) { + return false; + } + + $in = $func['load']($infilename); + + $out = imagerotate($in, $degrees, 0); + $func['save']($out, $outfilename); + + $newwidth = imagesx($out); + $newheight = imagesy($out); + + $out = null; + $in = null; + + return array($newwidth, $newheight); +} + + +function serendipity_resize_image_gd($infilename, $outfilename, $newwidth, $newheight=null) +{ + $func = serendipity_functions_gd($infilename); + if (!is_array($func)) { + return false; + } + + $in = $func['load']($infilename); + $width = imagesx($in); + $height = imagesy($in); + + if (is_null($newheight)) { + $newsizes = serendipity_calculate_aspect_size($width, $height, $newwidth); + $newwidth = $newsizes[0]; + $newheight = $newsizes[1]; + } + + $out = imagecreatetruecolor($newwidth, $newheight); + + /* Attempt to copy transparency information, this really only works for PNG */ + if (function_exists('imagesavealpha')) { + imagealphablending($out, false); + imagesavealpha($out, true); + } + + imagecopyresampled($out, $in, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); + $func['save']($out, $outfilename, 100); + $out = null; + $in = null; + + return array($newwidth, $newheight); +} + +function serendipity_calculate_aspect_size($width, $height, $newwidth) { + + // calculate aspect ratio + $div_width = $width / $newwidth; + $div_height = $height / $newwidth; + + if ($div_width <= 1 && $div_height <= 1) { + // do not scale small images where both sides are smaller than the thumbnail dimensions + $newheight = $height; + $newwidth = $width; + } elseif ($div_width >= $div_height) { + // max width - calculate height, keep width as scaling base + $newheight = round($height / $div_width); + // make sure the height is at least 1 pixel for extreme images + $newheight = ($newheight >= 1 ? $newheight : 1); + } else { + // max height - calculate width, keep height as scaling base + $newheight = $newwidth; + $newwidth = round($width / $div_height); + // make sure the width is at least 1 pixel for extreme images + $newwidth = ($newwidth >= 1 ? $newwidth : 1); + } + + return array($newwidth, $newheight); +} + +function serendipity_displayImageList($page = 0, $lineBreak = NULL, $manage = false, $url = NULL, $show_upload = false) { + global $serendipity; + $sort_row_interval = array(8, 16, 50, 100); + $sortParams = array('perpage', 'order', 'ordermode'); + $importParams = array('adminModule', 'htmltarget', 'filename_only', 'textarea', 'subpage'); + $extraParems = ''; + $filterParams = array('only_path', 'only_filename'); + + foreach($importParams AS $importParam) { + if (isset($serendipity['GET'][$importParam])) { + $extraParems .= 'serendipity[' . $importParam . ']='. $serendipity['GET'][$importParam] .'&'; + } + } + + foreach($sortParams AS $sortParam) { + serendipity_restoreVar($serendipity['COOKIE']['sortorder_' . $sortParam], $serendipity['GET']['sortorder'][$sortParam]); + serendipity_JSsetCookie('sortorder_' . $sortParam, $serendipity['GET']['sortorder'][$sortParam]); + $extraParems .= 'serendipity[sortorder]['. $sortParam .']='. $serendipity['GET']['sortorder'][$sortParam] .'&'; + } + + foreach($filterParams AS $filterParam) { + serendipity_restoreVar($serendipity['COOKIE'][$filterParam], $serendipity['GET'][$filterParam]); + serendipity_JSsetCookie($filterParam, $serendipity['GET'][$filterParam]); + if (!empty($serendipity['GET'][$filterParam])) { + $extraParems .= 'serendipity[' . $filterParam . ']='. $serendipity['GET'][$filterParam] .'&'; + } + } + + $serendipity['GET']['only_path'] = serendipity_uploadSecure($serendipity['GET']['only_path'], true); + $serendipity['GET']['only_filename'] = str_replace(array('*', '?'), array('%', '_'), $serendipity['GET']['only_filename']); + + $perPage = (!empty($serendipity['GET']['sortorder']['perpage']) ? $serendipity['GET']['sortorder']['perpage'] : $sort_row_interval[0]); + $start = ($page-1) * $perPage; + + $serendipity['imageList'] = serendipity_fetchImagesFromDatabase( + $start, + $perPage, + $totalImages, // Passed by ref + (isset($serendipity['GET']['sortorder']['order']) ? $serendipity['GET']['sortorder']['order'] : false), + (isset($serendipity['GET']['sortorder']['ordermode']) ? $serendipity['GET']['sortorder']['ordermode'] : false), + (isset($serendipity['GET']['only_path']) ? $serendipity['GET']['only_path'] : ''), + (isset($serendipity['GET']['only_filename']) ? $serendipity['GET']['only_filename'] : '') + ); + + $pages = ceil($totalImages / $perPage); + $linkPrevious = '?' . $extraParems . 'serendipity[page]=' . ($page-1); + $linkNext = '?' . $extraParems . 'serendipity[page]=' . ($page+1); + $sort_order = serendipity_getImageFields(); + $paths = serendipity_traversePath($serendipity['serendipityPath'] . $serendipity['uploadPath']); + + if (is_null($lineBreak)) { + $lineBreak = floor(750 / ($serendipity['thumbSize'] + 20)); + } +?> +
+ $g_val) { + if ( !is_array($g_val) && $g_key != 'page' ) { + echo ''; + } + } +?> + + + + + + + + + + + + + + + + + + + + + + + + +
-
+
+ + +
+ + + + +
+
+ +
- -
+ + + + + + + $file) { + ++$x; $preview = ''; + $img = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . '.' . $file['thumbnail_name'] . '.' . $file['extension']; + $i = @getimagesize($img); + $file['imgsrc'] = $serendipity['uploadHTTPPath'] . $file['path'] . $file['name'] . '.' . $file['thumbnail_name'] . '.' . $file['extension']; + $is_image = serendipity_isImage($file); + + /* If it is an image, and the thumbnail exists */ + if ($is_image && file_exists($img)) { + $preview .= ''. $file['name'] . ''; + if ($url) { + $preview = ''. $preview .''; + } + } elseif ($is_image && $file['hotlink']) { + $sizes = serendipity_calculate_aspect_size($file['dimensions_width'], $file['dimensions_height'], $serendipity['thumbSize']); + $preview .= ''. $file['name'] . ''; + if ($url) { + $preview = ''. $preview .''; + } + /* If it's not an image, or the thumbnail does not exist */ + } else { + $preview .= ''. $file['mime'] .'
- ' . (($file['hotlink']) ? MEDIA_HOTLINKED : $file['mime']) .' -'; + if ($url) { + $preview .= '
' . $file['name'] . '.' . $file['extension'] . ''; + } + $preview .= ''; + } + +?> + + + + + + +
+ + + + + +
+ + + + + +
+
+ + + + + + + + + + + + + +
+= USERLEVEL_CHIEF) { + $popupWidth = ($is_image ? ($file['dimensions_width'] + 20) : 600); + $popupHeight = ($is_image ? ($file['dimensions_height'] + 20) : 500); +?> + <?php echo MEDIA_FULLSIZE; ?>
+ <?php echo MEDIA_RENAME; ?>
+ <?php echo IMAGE_RESIZE; ?>
+ <?php echo IMAGE_ROTATE_LEFT; ?>
+
<?php echo IMAGE_ROTATE_RIGHT; ?>
+
<?php echo MEDIA_DELETE; ?>
+ +
+', 1); + } else { + echo SORT_ORDER_SIZE . ': ' . number_format(round($file['size']/1024, 2), NUMBER_FORMAT_DECIMALS, NUMBER_FORMAT_DECPOINT, NUMBER_FORMAT_THOUSANDS) . 'kb'; + } +?> +
+ +
+ Thumb is PNG + if ($file['mime'] == 'application/pdf') { + $file['imgsrc'] .= '.png'; + $file['displaymime'] = 'image/png'; + } + + return (0 === strpos(strtolower($file['displaymime']), 'image/')); +} + +function serendipity_killPath($basedir, $directory = '', $forceDelete = false) { + static $n = "
\n"; + static $serious = true; + + if ($handle = @opendir($basedir . $directory)) { + while (false !== ($file = @readdir($handle))) { + if ($file != '.' && $file != '..') { + if (is_dir($basedir . $directory . $file)) { + serendipity_killPath($basedir, $directory . $file . '/', $forceDelete); + } else { + $filestack[$file] = $directory . $file; + } + } + } + @closedir($handle); + + printf(CHECKING_DIRECTORY . "
\n", $directory); + + // No, we just don't kill files the easy way. We sort them out properly from the database + // and preserve files not entered therein. + $files = serendipity_fetchImagesFromDatabase(0, 0, $total, false, false, $directory); + if (is_array($files)) { + echo "
    \n"; + foreach($files AS $f => $file) { + echo "
  • \n"; + if ($serious) { + serendipity_deleteImage($file['id']); + } else { + echo $file['name'] . '.' . $file['extension']; + } + echo "
  • \n"; + + unset($filestack[$file['name'] . '.' . $file['extension']]); + unset($filestack[$file['name'] . '.' . $file['thumbnail_name'] . '.' . $file['extension']]); + } + echo "
\n"; + } + + if (count($filestack) > 0) { + if ($forceDelete) { + echo "
    \n"; + foreach($filestack AS $f => $file) { + if ($serious && @unlink($basedir . $file)) { + printf('
  • ' . DELETING_FILE . $n . DONE . "
  • \n", $file); + } else { + printf('
  • ' . DELETING_FILE . $n . ERROR . "
  • \n", $file); + } + } + echo "
\n"; + } else { + echo ERROR_DIRECTORY_NOT_EMPTY . $n; + echo "
    \n"; + foreach($filestack AS $f => $file) { + echo '
  • ' . $file . "
  • \n"; + } + echo "
\n"; + } + } + + echo ''; + if ($serious && !empty($directory) && !preg_match('@^.?/?$@', $directory) && @rmdir($basedir . $directory)) { + printf(DIRECTORY_DELETE_SUCCESS . $n, $directory); + } else { + printf(DIRECTORY_DELETE_FAILED . $n, $directory); + } + echo ''; + } + + return true; +} + + +function serendipity_traversePath($basedir, $dir='', $onlyDirs=true, $pattern = NULL, $depth = 1) { + + + $dh = @opendir($basedir . '/' . $dir); + if ( !$dh ) { + return false; + } + + $files = array(); + while (($file = @readdir($dh)) !== false) { + if ( $file != '.' && $file != '..' ) { + if ( $onlyDirs === false || ($onlyDirs === true && is_dir($basedir . '/' . $dir . '/' . $file)) ) { + if ( is_null($pattern) || preg_match($pattern, $file) ) { + $files[] = array( + 'name' => $file, + 'depth' => $depth, + 'relpath' => ltrim(str_replace('\\', '/', $dir) . basename($file) . '/', '/') + ); + } + } + if ( is_dir($basedir . '/' . $dir . '/' . $file) ) { + $files = array_merge($files, serendipity_traversePath($basedir, $dir . '/' . basename($file) . '/', $onlyDirs, $pattern, ($depth+1))); + } + } + } + + fclose($dh); + return $files; +} + + +function serendipity_deletePath($dir) { + $d = dir($dir); + if ($d) { + while ($f = $d->read() ){ + if ($f != '.' && $f != '..') { + if (is_dir($dir . $f)){ + serendipity_deletePath($dir . $f . '/'); + rmdir($dir . $f); + } + + if (is_file($dir . $f)) { + unlink($dir . $f); + } + } + } + + $d->close(); + } +} + +function serendipity_uploadSecure($var, $strip_paths = true) { + $var = preg_replace('@[^0-9a-z\._/-]@i', '', $var); + if ($strip_paths) { + $var = preg_replace('@(\.+[/\\\\]+)@', '/', $var); + } + + $var = preg_replace('@^(/+)@', '', $var); + + return $var; +} + +function serendipity_getimagesize($file, $ft_mime = '', $suf = '') { + if (empty($ft_mime) && !empty($suf)) { + $ft_mime = serendipity_guessMime($suf); + } + + if ($ft_mime == 'application/pdf') { + $fdim = array(1000,1000,24, '', 'bits'=> 24, 'channels' => '3', 'mime' => 'application/pdf'); + } + + $fdim = @getimagesize($file); + + if (is_array($fdim)) { + if (empty($fdim['mime'])) { + $fdim['mime'] = $ft_mime; + } + + if ($fdim['mime'] == 'image/vnd.wap.wbmp' && $ft_mime == 'video/x-quicktime') { + // PHP Versions prior to 4.3.9 reported .mov files wrongly as WAP. Fix this and mark the file as 'non-image' with 0x0 dimensions + $fdim['mime'] = $ft_mime; + } + } else { + // The file is no image. Return a fake array so that files are inserted (but without a thumb) + $fdim = array( + 0 => 0, + 1 => 0, + 'mime' => $ft_mime, + 'noimage' => true + ); + } + + return $fdim; +} + +function serendipity_getImageFields() { + return array( + 'date' => SORT_ORDER_DATE, + 'name' => SORT_ORDER_NAME, + 'authorid' => AUTHOR, + 'extension' => SORT_ORDER_EXTENSION, + 'size' => SORT_ORDER_SIZE, + 'dimensions_width' => SORT_ORDER_WIDTH, + 'dimensions_height' => SORT_ORDER_HEIGHT + ); +} + +function serendipity_escapeshellarg($string) { + return escapeshellarg(str_replace('%', '', $string)); +} +?> diff --git a/include/functions_installer.inc.php b/include/functions_installer.inc.php new file mode 100644 index 0000000..baaa970 --- /dev/null +++ b/include/functions_installer.inc.php @@ -0,0 +1,869 @@ +\n"; + $file_personal = ''; + + preg_match('@' . preg_quote($file_start) . '.*' . preg_quote($file_mark) . '(.+)' . preg_quote($file_end) . '@imsU', $oldconfig, $match); + if (!empty($match[1])) { + $file_personal = $match[1]; + } + + fwrite($configfp, $file_start); + + fwrite($configfp, "\t Written on ". date('r') ."\n"); + fwrite($configfp, "\t*/\n\n"); + + fwrite($configfp, "\t\$serendipity['versionInstalled'] = '{$serendipity['version']}';\n"); + fwrite($configfp, "\t\$serendipity['dbName'] = '{$dbName}';\n"); + fwrite($configfp, "\t\$serendipity['dbPrefix'] = '{$dbPrefix}';\n"); + fwrite($configfp, "\t\$serendipity['dbHost'] = '{$dbHost}';\n"); + fwrite($configfp, "\t\$serendipity['dbUser'] = '{$dbUser}';\n"); + fwrite($configfp, "\t\$serendipity['dbPass'] = '{$dbPass}';\n"); + fwrite($configfp, "\t\$serendipity['dbType'] = '{$dbType}';\n"); + fwrite($configfp, "\t\$serendipity['dbPersistent'] = ". (serendipity_db_bool($dbPersistent) ? 'true' : 'false') .";\n"); + + if (is_array($privateVariables) && count($privateVariables) > 0) { + foreach($privateVariables AS $p_idx => $p_val) { + fwrite($configfp, "\t\$serendipity['{$p_idx}'] = '{$p_val}';\n"); + } + } + + fwrite($configfp, $file_mark . $file_personal . $file_end); + + fclose($configfp); + + @chmod($path . $file, 0700); + return true; +} + +/** +* Creates the needed tables - beware, they will be empty and need to be stuffed with +* default templates and such... +*/ +function serendipity_installDatabase() { + global $serendipity; + $queries = serendipity_parse_sql_tables(S9Y_INCLUDE_PATH . 'sql/db.sql'); + $queries = str_replace('{PREFIX}', $serendipity['dbPrefix'], $queries); + + foreach ($queries as $query) { + serendipity_db_schema_import($query); + } +} + +function serendipity_query_default($optname, $default, $usertemplate = false, $type = 'string') { + global $serendipity; + + /* I won't tell you the password, it's MD5 anyway, you can't do anything with it */ + if ($type == 'protected' && IS_installed === true) { + return ''; + } + + switch ($optname) { + + case 'dbType' : + if (extension_loaded('mysqli')) { + $type = 'mysqli'; + } + if (extension_loaded('pgsql')) { + $type = 'postgres'; + } + if (extension_loaded('mysql')) { + $type = 'mysql'; + } + return $type; + + case 'serendipityPath': + $test_path1 = $_SERVER['DOCUMENT_ROOT'] . rtrim(dirname($_SERVER['PHP_SELF']), '/') . '/'; + $test_path2 = serendipity_getRealDir(__FILE__); + if (file_exists($test_path1 . 'serendipity_admin.php')) { + return $test_path1; + } else { + return $test_path2; + } + + case 'serendipityHTTPPath': + return rtrim(dirname($_SERVER['PHP_SELF']), '/') .'/'; + + case 'baseURL': + $ssl = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'; + $port = $_SERVER['SERVER_PORT']; + + return sprintf('http%s://%s%s%s', + + $ssl ? 's' : '', + preg_replace('@^([^:]+):?.*$@', '\1', $_SERVER['HTTP_HOST']), + (($ssl && $port != 443) || (!$ssl && $port != 80)) ? (':' . $port) : '', + rtrim(dirname($_SERVER['PHP_SELF']), '/') .'/' + ); + + case 'convert': + $path = array(); + + $path[] = ini_get('safe_mode_exec_dir'); + + if (isset($_SERVER['PATH'])) { + $path = array_merge($path, explode(':', $_SERVER['PATH'])); + } + + /* add some other possible locations to the path while we are at it, + * as these are not always included in the apache path */ + $path[] = '/usr/X11R6/bin'; + $path[] = '/usr/bin'; + $path[] = '/usr/local/bin'; + + foreach ($path as $dir) { + if ((function_exists('is_executable') && @is_executable($dir . '/convert')) || @is_file($dir . '/convert')) { + return $dir . '/convert'; + } + } + return $default; + + case 'rewrite': + return serendipity_check_rewrite($default); + + default: + if ($usertemplate) { + return serendipity_get_user_var($optname, $serendipity['authorid'], $default); + } + + return $default; + } +} + +function serendipity_parseTemplate($filename, $areas = null, $onlyFlags=null) { + global $serendipity; + + $userlevel = $serendipity['serendipityUserlevel']; + + if ( !IS_installed ) { + $userlevel = USERLEVEL_ADMIN; + } + + $config = @include($filename); + + foreach ( $config as $n => $category ) { + /* If $areas is an array, we filter out those categories, not within the array */ + if ( is_array($areas) && !in_array($n, $areas) ) { + unset($config[$n]); + continue; + } + + foreach ( $category['items'] as $i => $item ) { + $items = &$config[$n]['items'][$i]; + if (!isset($items['userlevel']) || !is_numeric($items['userlevel'])) { + $items['userlevel'] = USERLEVEL_ADMIN; + } + + if ($userlevel < $items['userlevel']) { + unset($config[$n]['items'][$i]); + continue; + } + + if (!isset($items['flags']) || !is_array($items['flags'])) { + $items['flags'] = array(); + } + + if ( is_array($onlyFlags) ) { + foreach ( $onlyFlags as $onlyFlag ) { + if ( !in_array($onlyFlag, $items['flags']) ) { + unset($config[$n]['items'][$i]); + continue; + } + } + } + } + + if (sizeof($config[$n]['items']) < 1) { + unset($config[$n]); + } + } + + return $config; +} + +function serendipity_replaceEmbeddedConfigVars ($s) { + return str_replace( + array( + '%clock%' + ), + + array( + date('H:i') + ), + + $s); +} + +function serendipity_guessInput($type, $name, $value='', $default='') { + global $serendipity; + + switch ($type) { + case 'bool' : + $value = serendipity_get_bool($value); + echo ' '; + echo ''; + break; + + case 'protected' : + echo ''; + break; + + case 'list' : + echo ''; + break; + case 'file' : + echo ''; + break; + default : + echo ''; + break; + } +} + +function serendipity_printConfigTemplate($config, $from = false, $noForm = false, $folded = true, $allowToggle = true) { + global $serendipity; + if (!isset($serendipity['XHTML11'])) { + $serendipity['XHTML11'] = FALSE; + } + if ( $allowToggle ) { +?> + + + +
+
+ + +
+ 1 && $allowToggle) { ?> +
+ +/- 
+
+ + + 1) { +?> + + + + + + + +
+ + +/-  + + + +
+ + + + + + + + + + + +
+ +
+ +
+ +
+ ' : ''); ?>' : ''); ?> +


+
+'; + for ($i = 1; $i <= $el_count; $i++) { + echo 'document.getElementById("el' . $i . '").style.display = "none";' . "\n"; + } + echo ''; + } + + if (!$noForm) { +?> + +
+
+ 0 ? $errs : ''); +} + +function serendipity_installFiles($serendipity_core = '') { + global $serendipity; + + // This variable is transmitted from serendipity_admin_installer. If an empty variable is used, + // this means that serendipity_installFiles() was called from the auto-updater facility. + if (empty($serendipity_core)) { + $serendipity_core = $serendipity['serendipityPath']; + } + + $htaccess = @file_get_contents($serendipity_core . '.htaccess'); + + // Let this function be callable outside installation and let it use existing settings. + $import = array('rewrite', 'serendipityHTTPPath', 'indexFile'); + foreach($import AS $key) { + if (empty($_POST[$key]) && isset($serendipity[$key])) { + $$key = $serendipity[$key]; + } else { + $$key = $_POST[$key]; + } + } + + if (php_sapi_name() == 'cgi' || php_sapi_name() == 'cgi-fcgi') { + $htaccess_cgi = '_cgi'; + } else { + $htaccess_cgi = ''; + } + + + /* Detect comptability with php_value directives */ + if ($htaccess_cgi == '') { + $response = ''; + $serendipity_root = dirname($_SERVER['PHP_SELF']) . '/'; + $serendipity_host = preg_replace('@^([^:]+):?.*$@', '\1', $_SERVER['HTTP_HOST']); + + $old_htaccess = @file_get_contents($serendipity_core . '.htaccess'); + $fp = @fopen($serendipity_core . '.htaccess', 'w'); + if ($fp) { + fwrite($fp, 'php_value register_globals off'. "\n" .'php_value session.use_trans_sid 0'); + fclose($fp); + + $sock = @fsockopen($serendipity_host, $_SERVER['SERVER_PORT'], $errorno, $errorstring, 10); + if ($sock) { + fputs($sock, "GET {$serendipityHTTPPath} HTTP/1.0\r\n"); + fputs($sock, "Host: $serendipity_host\r\n"); + fputs($sock, "User-Agent: Serendipity/{$serendipity['version']}\r\n"); + fputs($sock, "Connection: close\r\n\r\n"); + + while (!feof($sock) && strlen($response) < 4096) { + $response .= fgets($sock, 400); + } + fclose($sock); + } + + /* If we get HTTP 500 Internal Server Error, we have to use the .cgi template */ + if (preg_match('@^HTTP/\d\.\d 500@', $response)) { + $htaccess_cgi = '_cgi'; + } + + if (!empty($old_htaccess)) { + $fp = @fopen($serendipity_core . '.htaccess', 'w'); + fwrite($fp, $old_htaccess); + fclose($fp); + } else { + @unlink($serendipity_core . '.htaccess'); + } + } + } + + + if ($rewrite == 'rewrite') { + $template = 'htaccess' . $htaccess_cgi . '_rewrite.tpl'; + } elseif ($rewrite == 'errordocs') { + $template = 'htaccess' . $htaccess_cgi . '_errordocs.tpl'; + } else { + $template = 'htaccess' . $htaccess_cgi . '_normal.tpl'; + } + + if (!($a = file(S9Y_INCLUDE_PATH . 'include/tpl/' . $template, 1))) { + $errs[] = ERROR_TEMPLATE_FILE; + } + + $content = str_replace( + array( + '{PREFIX}', + '{indexFile}', + '{PAT_UNSUBSCRIBE}', '{PATH_UNSUBSCRIBE}', + '{PAT_ARCHIVES}', '{PATH_ARCHIVES}', + '{PAT_FEEDS}', '{PATH_FEEDS}', + '{PAT_FEED}', + '{PAT_ADMIN}', '{PATH_ADMIN}', + '{PAT_ENTRIES}', '{PATH_ENTRIES}', + '{PAT_ARCHIVE}', '{PATH_ARCHIVE}', + '{PAT_CATEGORIES}', '{PATH_CATEGORIES}', + '{PAT_PLUGIN}', '{PATH_PLUGIN}', + '{PAT_DELETE}', '{PATH_DELETE}', + '{PAT_APPROVE}', '{PATH_APPROVE}', + '{PAT_SEARCH}', '{PATH_SEARCH}', + '{PAT_CSS}', + '{PAT_AUTHORS}', '{PATH_AUTHORS}' + ), + + array( + $serendipityHTTPPath, + $indexFile, + trim(PAT_UNSUBSCRIBE, '@/i'), PATH_UNSUBSCRIBE, + trim(PAT_ARCHIVES, '@/i'), PATH_ARCHIVES, + trim(PAT_FEEDS, '@/i'), PATH_FEEDS, + trim(PAT_FEED, '@/i'), + trim(PAT_ADMIN, '@/i'), PATH_ADMIN, + trim(PAT_ENTRIES, '@/i'), PATH_ENTRIES, + trim(PAT_ARCHIVE, '@/i'), PATH_ARCHIVE, + trim(PAT_CATEGORIES, '@/i'), PATH_CATEGORIES, + trim(PAT_PLUGIN, '@/i'), PATH_PLUGIN, + trim(PAT_DELETE, '@/i'), PATH_DELETE, + trim(PAT_APPROVE, '@/i'), PATH_APPROVE, + trim(PAT_SEARCH, '@/i'), PATH_SEARCH, + trim(PAT_CSS, '@/i'), + trim(PAT_AUTHORS, '@/i'), PATH_AUTHORS + ), + + implode('', $a) + ); + + $fp = @fopen($serendipity_core . '.htaccess', 'w'); + if (!$fp) { + $errs[] = sprintf(FILE_WRITE_ERROR, $serendipity_core . '.htaccess') . ' ' . FILE_CREATE_YOURSELF; + $errs[] = sprintf(COPY_CODE_BELOW , $serendipity_core . '.htaccess', 'serendipity', htmlspecialchars($content)); + return $errs; + } else { + // Check if an old htaccess file existed and try to preserve its contents. Otherwise completely wipe the file. + if ($htaccess != '' && preg_match('@^(.*)#\s+BEGIN\s+s9y.*#\s+END\s+s9y(.*)$@isU', $htaccess, $match)) { + // Code outside from s9y-code was found. + fwrite($fp, $match[1] . $content . $match[2]); + } else { + fwrite($fp, $content); + } + fclose($fp); + return true; + } + +} + +/* Takes the item data from a config var, and checks the flags against the current area */ +function serendipity_checkConfigItemFlags(&$item, $area) { + + if ( in_array('nosave', $item['flags']) ) { + return false; + } + + if ( in_array('local', $item['flags']) && $area == 'configuration' ) { + return false; + } + + if ( in_array('config', $item['flags']) && $area == 'local' ) { + return false; + } + + return true; +} + +function serendipity_updateConfiguration() { + global $serendipity, $umask; + + // Save all basic config variables to the database + $config = serendipity_parseTemplate(S9Y_CONFIG_TEMPLATE); + + if (isset($_POST['sqlitedbName']) && !empty($_POST['sqlitedbName'])) { + $_POST['dbName'] = $_POST['sqlitedbName']; + } + + // Password can be hidden in re-configuring, but we need to store old password + if (empty($_POST['dbPass']) && !empty($serendipity['dbPass'])) { + $_POST['dbPass'] = $serendipity['dbPass']; + } + + foreach($config as $category) { + foreach ( $category['items'] as $item ) { + + /* Don't save trash */ + if ( !serendipity_checkConfigItemFlags($item, 'configuration') ) { + continue; + } + + if (!isset($item['userlevel'])) { + $item['userlevel'] = USERLEVEL_ADMIN; + } + + if ( $serendipity['serendipityUserlevel'] >= $item['userlevel'] || IS_installed === false ) { + $authorid = 0; + } else { + $authorid = $serendipity['authorid']; + } + + serendipity_set_config_var($item['var'], $_POST[$item['var']], $authorid); + } + } + + if (IS_installed === false || $serendipity['serendipityUserlevel'] >= USERLEVEL_ADMIN) { + return serendipity_updateLocalConfig($_POST['dbName'], + $_POST['dbPrefix'], + $_POST['dbHost'], + $_POST['dbUser'], + $_POST['dbPass'], + $_POST['dbType'], + $_POST['dbPersistent']); + } else { + return true; + } +} + +function serendipity_httpCoreDir() { + if (!empty($_SERVER['SCRIPT_FILENAME']) && substr(php_sapi_name(), 0, 3) != 'cgi') { + return dirname($_SERVER['SCRIPT_FILENAME']) . '/'; + } + + return $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF']) . '/'; +} + +function serendipity_removeFiles($files = null) { + global $serendipity, $errors; + + if (!is_array($files)) { + return; + } + + $backupdir = S9Y_INCLUDE_PATH . 'backup'; + if (!is_dir($backupdir)) { + @mkdir($backupdir, 0777); + if (!is_dir($backupdir)) { + $errors[] = sprintf(DIRECTORY_CREATE_ERROR, $backupdir); + return false; + } + } + + if (!is_writable($backupdir)) { + $errors[] = sprintf(DIRECTORY_WRITE_ERROR, $backupdir); + return false; + } + + foreach($files AS $file) { + $source = S9Y_INCLUDE_PATH . $file; + $sanefile = str_replace('/', '_', $file); + $target = $backupdir . '/' . $sanefile; + + if (!file_exists($source)) { + continue; + } + + if (file_exists($target)) { + $target = $backupdir . '/' . time() . '.' . $sanefile; // Backupped file already exists. Append with timestamp as name. + } + + if (!is_writable($source)) { + $errors[] = sprintf(FILE_WRITE_ERROR, $source) . '
'; + } else { + rename($source, $target); + } + } +} + +function serendipity_getRealDir($file) { + $dir = str_replace( "\\", "/", dirname($file)); + $base = preg_replace('@/include$@', '', $dir) . '/'; + return $base; +} + +function serendipity_check_rewrite($default) { + global $serendipity; + + if (IS_installed == true) { + return $default; + } + + $serendipity_root = dirname($_SERVER['PHP_SELF']) . '/'; + $serendipity_core = serendipity_httpCoreDir(); + $old_htaccess = @file_get_contents($serendipity_core . '.htaccess'); + $fp = @fopen($serendipity_core . '.htaccess', 'w'); + $serendipity_host = preg_replace('@^([^:]+):?.*$@', '\1', $_SERVER['HTTP_HOST']); + + if (!$fp) { + printf(HTACCESS_ERROR, + 'chmod go+rwx ' . getcwd() . '/' + ); + return $default; + } else { + fwrite($fp, 'ErrorDocument 404 ' . $serendipity_root . 'index.php'); + fclose($fp); + + // Do a request on a nonexistant file to see, if our htaccess allows ErrorDocument + $sock = @fsockopen($serendipity_host, $_SERVER['SERVER_PORT'], $errorno, $errorstring, 10); + $response = ''; + + if ($sock) { + fputs($sock, "GET {$_SERVER['PHP_SELF']}nonexistant HTTP/1.0\r\n"); + fputs($sock, "Host: $serendipity_host\r\n"); + fputs($sock, "User-Agent: Serendipity/{$serendipity['version']}\r\n"); + fputs($sock, "Connection: close\r\n\r\n"); + + while (!feof($sock) && strlen($response) < 4096) { + $response .= fgets($sock, 400); + } + fclose($sock); + } + + if (preg_match('@^HTTP/\d\.\d 200@', $response) && preg_match('@X\-Blog: Serendipity@', $response)) { + $default = 'errordocs'; + } else { + $default = 'none'; + } + + if (!empty($old_htaccess)) { + $fp = @fopen($serendipity_core . '.htaccess', 'w'); + fwrite($fp, $old_htaccess); + fclose($fp); + } else { + @unlink($serendipity_core . '.htaccess'); + } + + return $default; + } +} + +function serendipity_removeObsoleteVars() { +global $serendipity; + + $config = serendipity_parseTemplate(S9Y_CONFIG_TEMPLATE); + foreach($config as $category) { + foreach($category['items'] as $item) { + /* Remove trash */ + if (!serendipity_checkConfigItemFlags($item, 'remove')) { + serendipity_remove_config_var($item['var'], 0); + } + } + } +} + +?> diff --git a/include/functions_smarty.inc.php b/include/functions_smarty.inc.php new file mode 100644 index 0000000..3ac2fc0 --- /dev/null +++ b/include/functions_smarty.inc.php @@ -0,0 +1,243 @@ +fetch('file:'. serendipity_getTemplateFile($file, 'serendipityPath'), null, null, ($echo === true && $serendipity['smarty_raw_mode'])); + $serendipity['smarty']->assign($block, $output); + + return $output; +} + +function serendipity_emptyPrefix($string, $prefix = ': ') { + return (!empty($string) ? $prefix . htmlspecialchars($string) : ''); +} + +function serendipity_smarty_showPlugin($params, &$smarty) { + global $serendipity; + + if (!isset($params['class']) && !isset($params['id'])) { + $smarty->trigger_error(__FUNCTION__ .": missing 'class' or 'id' parameter"); + return; + } + + if (!isset($params['side'])) { + $params['side'] = '*'; + } + + if (!isset($params['negate'])) { + $params['negate'] = null; + } + + return serendipity_plugin_api::generate_plugins($params['side'], null, $params['negate'], $params['class'], $params['id']); +} + +function serendipity_smarty_hookPlugin($params, &$smarty) { + global $serendipity; + static $hookable = array('frontend_header', + 'entries_header', + 'entries_footer', + 'frontend_comment'); + + if (!isset($params['hook'])) { + $smarty->trigger_error(__FUNCTION__ .": missing 'hook' parameter"); + return; + } + + if (!in_array($params['hook'], $hookable) && $params['hookAll'] != 'true') { + $smarty->trigger_error(__FUNCTION__ .": illegal hook '". $params['hook'] ."'"); + return; + } + + if (!isset($params['data'])) { + $params['data'] = &$serendipity; + } + + if (!isset($params['addData'])) { + $params['addData'] = null; + } + + serendipity_plugin_api::hook_event($params['hook'], $params['data'], $params['addData']); +} + + +function serendipity_smarty_printSidebar($params, &$smarty) { + if ( !isset($params['side']) ) { + $smarty->trigger_error(__FUNCTION__ .": missing 'side' parameter"); + return; + } + return serendipity_plugin_api::generate_plugins($params['side']); +} + +function serendipity_smarty_getFile($params, &$smarty) { + if ( !isset($params['file']) ) { + $smarty->trigger_error(__FUNCTION__ .": missing 'file' parameter"); + return; + } + return serendipity_getTemplateFile($params['file']); +} + + +function serendipity_smarty_formatTime($timestamp, $format, $useOffset = true) { + if (defined($format)) { + return serendipity_formatTime(constant($format), $timestamp, $useOffset); + } else { + return serendipity_formatTime($format, $timestamp, $useOffset); + } +} + +function &serendipity_smarty_printComments($params, &$smarty) { + global $serendipity; + + if (!isset($params['entry'])) { + $smarty->trigger_error(__FUNCTION__ .": missing 'entry' parameter"); + return; + } + + if (!isset($params['mode'])) { + $params['mode'] = VIEWMODE_THREADED; + } + + $comments = serendipity_fetchComments($params['entry']); + + if (!empty($serendipity['POST']['preview'])) { + $comments[] = + array( + 'email' => $serendipity['POST']['email'], + 'author' => $serendipity['POST']['name'], + 'body' => $serendipity['POST']['comment'], + 'url' => $serendipity['POST']['url'], + 'parent_id' => $serendipity['POST']['replyTo'], + 'timestamp' => time() + ); + } + + return serendipity_printComments($comments, $params['mode']); +} + +function serendipity_smarty_printTrackbacks($params, &$smarty) { + if ( !isset($params['entry']) ) { + $smarty->trigger_error(__FUNCTION__ .": missing 'entry' parameter"); + return; + } + + return serendipity_printTrackbacks(serendipity_fetchTrackbacks($params['entry'])); +} + +function serendipity_smarty_init() { + global $serendipity; + + if (!isset($serendipity['smarty'])) { + @define('SMARTY_DIR', S9Y_INCLUDE_PATH . 'bundled-libs/Smarty/libs/'); + require_once SMARTY_DIR . 'Smarty.class.php'; + $serendipity['smarty'] = new Smarty; + if ($serendipity['production'] === 'debug') { + $serendipity['smarty']->force_compile = true; + $serendipity['smarty']->debugging = true; + } + $serendipity['smarty']->template_dir = $serendipity['serendipityPath'] . $serendipity['templatePath'] . $serendipity['template']; + $serendipity['smarty']->compile_dir = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE; + $serendipity['smarty']->config_dir = &$serendipity['smarty']->template_dir; + $serendipity['smarty']->secure_dir = array($serendipity['serendipityPath'] . $serendipity['templatePath']); + $serendipity['smarty']->security_settings['MODIFIER_FUNCS'] = array('sprintf', 'sizeof', 'count', 'rand'); + $serendipity['smarty']->security = true; + $serendipity['smarty']->use_sub_dirs = false; + $serendipity['smarty']->compile_check = true; + $serendipity['smarty']->compile_id = &$serendipity['template']; + + $serendipity['smarty']->register_modifier('makeFilename', 'serendipity_makeFilename'); + $serendipity['smarty']->register_modifier('xhtml_target', 'serendipity_xhtml_target'); + $serendipity['smarty']->register_modifier('emptyPrefix', 'serendipity_emptyPrefix'); + $serendipity['smarty']->register_modifier('formatTime', 'serendipity_smarty_formatTime'); + $serendipity['smarty']->register_function('serendipity_printSidebar', 'serendipity_smarty_printSidebar'); + $serendipity['smarty']->register_function('serendipity_hookPlugin', 'serendipity_smarty_hookPlugin'); + $serendipity['smarty']->register_function('serendipity_showPlugin', 'serendipity_smarty_showPlugin'); + $serendipity['smarty']->register_function('serendipity_getFile', 'serendipity_smarty_getFile'); + $serendipity['smarty']->register_function('serendipity_printComments', 'serendipity_smarty_printComments'); + $serendipity['smarty']->register_function('serendipity_printTrackbacks', 'serendipity_smarty_printTrackbacks'); + } + + if (!isset($serendipity['smarty_raw_mode'])) { + if (file_exists($serendipity['smarty']->template_dir . '/layout.php') && $serendipity['template'] != 'default') { + $serendipity['smarty_raw_mode'] = true; + } else { + $serendipity['smarty_raw_mode'] = false; + } + } + + if (!isset($serendipity['smarty_file'])) { + $serendipity['smarty_file'] = 'index.tpl'; + } + + $serendipity['smarty']->assign( + array( + 'head_charset' => LANG_CHARSET, + 'head_version' => $serendipity['version'], + 'head_title' => $serendipity['head_title'], + 'head_subtitle' => $serendipity['head_subtitle'], + 'head_link_stylesheet' => serendipity_rewriteURL('serendipity.css'), + + 'CONST' => get_defined_constants(), + + 'is_xhtml' => $serendipity['XHTML11'], + 'use_popups' => $serendipity['enablePopup'], + 'is_embedded' => (!$serendipity['embed'] || $serendipity['embed'] === 'false' || $serendipity['embed'] === false) ? false : true, + 'is_raw_mode' => $serendipity['smarty_raw_mode'], + + 'entry_id' => (isset($serendipity['GET']['id']) && is_numeric($serendipity['GET']['id'])) ? $serendipity['GET']['id'] : false, + 'is_single_entry' => (isset($serendipity['GET']['id']) && is_numeric($serendipity['GET']['id'])), + + 'blogTitle' => htmlspecialchars($serendipity['blogTitle']), + 'blogSubTitle' => (!empty($serendipity['blogSubTitle']) ? htmlspecialchars($serendipity['blogSubTitle']) : ''), + 'blogDescription' => htmlspecialchars($serendipity['blogDescription']), + + 'serendipityHTTPPath' => $serendipity['serendipityHTTPPath'], + 'serendipityBaseURL' => $serendipity['baseURL'], + 'serendipityRewritePrefix' => $serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '', + 'serendipityIndexFile' => $serendipity['indexFile'], + 'serendipityVersion' => $serendipity['version'], + + 'dateRange' => (!empty($serendipity['range']) ? $serendipity['range'] : array()) + ) + ); + + return true; +} + +/* Nukes all Smarty compiled templates and cache */ +function serendipity_smarty_purge() { + global $serendipity; + + /* Attempt to init Smarty, brrr */ + serendipity_smarty_init(); + + $files = serendipity_traversePath($serendipity['smarty']->compile_dir, '', false, '/.+\.tpl\.php$/'); + + if ( !is_array($files) ) { + return false; + } + + foreach ( $files as $file ) { + @unlink($serendipity['smarty']->compile_dir . DIRECTORY_SEPARATOR . $file['name']); + } +} + +/* Function can be called from foreign applications. ob_start() needs to + have been called before, and will be parsed into Smarty here */ +function serendipity_smarty_shutdown($serendipity_directory = '') { +global $serendipity; + + $cwd = getcwd(); + chdir($serendipity_directory); + $raw_data = ob_get_contents(); + ob_end_clean(); + $serendipity['smarty']->assign('content_message', $raw_data); + + serendipity_smarty_fetch('CONTENT', 'content.tpl'); + if (empty($serendipity['smarty_file'])) { + $serendipity['smarty_file'] = '404.tpl'; + } + $serendipity['smarty']->display(serendipity_getTemplateFile($serendipity['smarty_file'], 'serendipityPath')); +} diff --git a/include/functions_trackbacks.inc.php b/include/functions_trackbacks.inc.php new file mode 100644 index 0000000..d6c0518 --- /dev/null +++ b/include/functions_trackbacks.inc.php @@ -0,0 +1,384 @@ +assign('trackbacks', $trackbacks); + + return serendipity_smarty_fetch('TRACKBACKS', 'trackbacks.tpl'); +} + +/** + * validate trackback response + */ +function serendipity_trackback_is_success($resp) { + if (preg_match('@(\d+)@', $resp, $matches)) { + if ((int) $matches[1] === 0) { + return true; + } else { + if (preg_match('@([^<]+)@', $resp, $matches)) { + return $matches[1]; + } + else { + return 'unknown error'; + } + } + } + return true; +} + +function serendipity_pingback_autodiscover($loc, $body) { + if (!empty($_SERVER['X-PINGBACK'])) { + $pingback = $_SERVER['X-PINGBACK']; + } elseif (preg_match('@@i', $body, $matches)) { + $pingback = $matches[1]; + } else { + return; + } + + // xml-rpc hack + $query = " + + + pingback.ping + + + sourceURI + {$serendipity['baseURL']} + + targetURI + $loc + + +"; + _serendipity_send($pingback, $query); + return; +} + +/** + * Send a trackback ping + */ +function _serendipity_send($loc, $data) { + global $serendipity; + + $target = parse_url($loc); + if ($target['query'] != '') { + $target['query'] = '?' . str_replace('&', '&', $target['query']); + } + + if (!is_numeric($target['port'])) { + $target['port'] = 80; + } + + $sock = @fsockopen($target['host'], $target['port']); + if (!is_resource($sock)) { + return "Couldn't connect to $loc"; + } + + $headers = "POST {$target['path']}{$target['query']} HTTP/1.1\r\n"; + $headers .= "Host: {$target['host']}\r\n"; + $headers .= "User-Agent: Serendipity/{$serendipity['version']}\r\n"; + $headers .= "Content-Type: application/x-www-form-urlencoded; charset=" . LANG_CHARSET . "\r\n"; + $headers .= "Content-Length: " . strlen($data) . "\r\n"; + $headers .= "Connection: close\r\n"; + $headers .= "\r\n"; + $headers .= $data; + + fwrite($sock, $headers); + + $res = ''; + while (!feof($sock)) { + $res .= fgets($sock, 1024); + } + + fclose($sock); + return $res; +} + +function serendipity_trackback_autodiscover($res, $loc, $url, $author, $title, $text) { + if (!preg_match('@trackback:ping(\s*rdf:resource)?\s*=\s*["\'](https?:[^"\']+)["\']@i', $res, $matches)) { + echo '
• ' . sprintf(TRACKBACK_FAILED, TRACKBACK_NOT_FOUND) . '
'; + return false; + } + + $trackURI = trim($matches[2]); + + if (preg_match('@dc:identifier\s*=\s*["\'](https?:[^\'"]+)["\']@i', $res, $test)) { + if ($loc != $test[1]) { + echo '
• ' . sprintf(TRACKBACK_FAILED, TRACKBACK_URI_MISMATCH) . '
'; + return false; + } + } + + $data = 'url=' . rawurlencode($url) + . '&title=' . rawurlencode($title) + . '&blog_name=' . rawurlencode($author) + . '&excerpt=' . rawurlencode(strip_tags($text)); + + printf(TRACKBACK_SENDING, htmlspecialchars($trackURI)); + flush(); + + $response = serendipity_trackback_is_success(_serendipity_send($trackURI, $data)); + + if ($response === true) { + echo '
• ' . TRACKBACK_SENT .'
'; + } else { + echo '
• ' . sprintf(TRACKBACK_FAILED, $response) . '
'; + } + + return $response; +} + +function serendipity_reference_autodiscover($loc, $url, $author, $title, $text) { +global $serendipity; + $timeout = 30; + + $u = parse_url($loc); + + if ($u['scheme'] != 'http' && $u['scheme'] != 'https') { + return; + } elseif ($u['scheme'] == 'https' && !extension_loaded('openssl')) { + return; // Trackbacks to HTTPS URLs can only be performed with openssl activated + } + + echo '
• '. sprintf(TRACKBACK_CHECKING, $loc) .'
'; + flush(); + + if (empty($u['port'])) { + $u['port'] = 80; + $port = ''; + } else { + $port = ':' . $u['port']; + } + + if (!empty($u['query'])) { + $u['path'] .= '?' . $u['query']; + } + + $parsed_loc = $u['scheme'] . '://' . $u['host'] . $port . $u['path']; + $res = ''; + + $fp = @fsockopen($u['host'], $u['port'], $err, $timeout); + if (!$fp) { + echo '
• ' . sprintf(TRACKBACK_COULD_NOT_CONNECT, $u['host'], $u['port']) .'
'; + return; + } else { + fputs($fp, "GET {$u['path']} HTTP/1.0\r\n"); + fputs($fp, "Host: {$u['host']}\r\n"); + fputs($fp, "User-Agent: Serendipity/{$serendipity['version']}\r\n"); + fputs($fp, "Connection: close\r\n\r\n"); + + while ($fp && !feof($fp) && strlen($res) < $serendipity['trackback_filelimit']) { + $res .= fgets($fp, 4096); + } + fclose($fp); + + if (strlen($res) >= $serendipity['trackback_filelimit']) { + echo '
• ' . sprintf(TRACKBACK_SIZE, $serendipity['trackback_filelimit']) .'
'; + return; + } + } + + if (strlen($res) != 0) { + serendipity_trackback_autodiscover($res, $parsed_loc, $url, $author, $title, $text); + serendipity_pingback_autodiscover($loc, $res); + } else { + echo '
• ' . TRACKBACK_NO_DATA . '
'; + } + echo '
'; +} + +/** + * + */ +function add_trackback ($id, $title, $url, $name, $excerpt) { + global $serendipity; + + // We can't accept a trackback if we don't get any URL + // This is a protocol rule. + if ( empty($url) ) { + return 0; + } + + // If title is not provided, the value for url will be set as the title + // This is a protocol rule. + if ( empty($title) ) { + $title = $url; + } + $comment['title'] = $title; + $comment['url'] = $url; + $comment['name'] = $name; + $comment['comment'] = $excerpt; + + serendipity_saveComment($id, $comment, 'TRACKBACK'); + + return 1; +} + +function add_pingback ($id, $postdata) { + global $serendipity; + + if(preg_match('@\s*\s*pingback.ping\s*\s*\s*\s*\s*([^<])*\s*\s*\s*\s*\s*([^<])*\s*\s*\s*\s*@i', $postdata, $matches)) { + $remote = $matches[1]; + $local = $matches[2]; + $comment['title'] = ''; + $comment['url'] = $remote; + $comment['comment'] = ''; + $comment['name'] = ''; + + serendipity_saveComment($id, $comment, 'PINGBACK'); + return 1; + } + return 0; +} + +/** + * Cut text + */ +function serendipity_trackback_excerpt($text) { + return substr(strip_tags($text), 0, 255); +} + +function report_trackback_success () { +print '' . "\n"; +print << + 0 + +SUCCESS; +} + +function report_trackback_failure () { +print '' . "\n"; +print << + 1 + Danger Will Robinson, trackback failed. + +FAILURE; +} + +function report_pingback_success () { +print '' . "\n"; +print << + + + success + + + +SUCCESS; +} + +function report_pingback_failure () { +print '' . "\n"; +print << + + 0 + + +FAILURE; +} + +/** + * search through link body, and automatically send a trackback ping. + */ +function serendipity_handle_references($id, $author, $title, $text) { + global $serendipity; + + if (!preg_match_all('@]+?href\s*=\s*["\']?([^\'" >]+?)[ \'"][^>]*>(.+?)@i', $text, $matches)) { + return; + } + + // remove full matches + array_shift($matches); + + // Make trackback URL + $url = serendipity_archiveURL($id, $title, 'baseURL'); + + // Add URL references + $locations = $matches[0]; + $names = $matches[1]; + + $tmpid = serendipity_db_escape_string($id); + + $checked_locations = array(); + serendipity_plugin_api::hook_event('backend_trackbacks', $locations); + for ($i = 0, $j = count($locations); $i < $j; ++$i) { + if ($locations[$i][0] == '/') { + $locations[$i] = 'http' . (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off' ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $locations[$i]; + } + + if (isset($checked_locations[$locations[$i]])) { + continue; + } + + if (preg_match_all('@]+?alt=["\']?([^\'">]+?)[\'"][^>]+?>@i', $names[$i], $img_alt)) { + if (is_array($img_alt) && is_array($img_alt[0])) { + foreach($img_alt[0] as $alt_idx => $alt_img) { + // Replace all s within a link with their respective ALT tag, so that references + // can be stored with a title. + $names[$i] = str_replace($alt_img, $img_alt[1][$alt_idx], $names[$i]); + } + } + } + + $query = "SELECT COUNT(id) FROM {$serendipity['dbPrefix']}references + WHERE entry_id = '". (int)$tmpid ."' + AND link = '" . serendipity_db_escape_string($locations[$i]) . "'"; + + $row = serendipity_db_query($query, true, 'num'); + if ($row[0] > 0) { + continue; + } + + if (!isset($serendipity['noautodiscovery']) || !$serendipity['noautodiscovery']) { + serendipity_reference_autodiscover($locations[$i], $url, $author, $title, serendipity_trackback_excerpt($text)); + $checked_locations[$locations[$i]] = true; // Store trackbacked link so that no further trackbacks will be sent to the same link + } + } + serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}references WHERE entry_id='" . (int)$tmpid . "'"); + + for ($i = 0; $i < $j; ++$i) { + $query = "INSERT INTO {$serendipity['dbPrefix']}references (entry_id, name, link) VALUES("; + $query .= "'" . (int)$tmpid . "', '" . serendipity_db_escape_string(strip_tags($names[$i])) . "', '"; + $query .= serendipity_db_escape_string($locations[$i]) . "')"; + + serendipity_db_query($query); + } + + // Add citations + preg_match_all('@]*>([^<]+)@i', $text, $matches); + + foreach ($matches[1] as $citation) { + $query = "INSERT INTO {$serendipity['dbPrefix']}references (entry_id, name) VALUES("; + $query .= "'" . (int)$tmpid . "', '" . serendipity_db_escape_string($citation) . "')"; + + serendipity_db_query($query); + } +} diff --git a/include/functions_upgrader.inc.php b/include/functions_upgrader.inc.php new file mode 100644 index 0000000..cf95f17 --- /dev/null +++ b/include/functions_upgrader.inc.php @@ -0,0 +1,113 @@ + diff --git a/include/genpage.inc.php b/include/genpage.inc.php new file mode 100644 index 0000000..7ccfacc --- /dev/null +++ b/include/genpage.inc.php @@ -0,0 +1,72 @@ +template_dir . '/config.inc.php'; + +$serendipity['smarty']->assign( + array( + 'leftSidebarElements' => serendipity_plugin_api::count_plugins('left'), + 'rightSidebarElements' => serendipity_plugin_api::count_plugins('right') + ) +); + +if ($serendipity['smarty_raw_mode']) { + /* For BC reasons, we have to ask for layout.php */ + @include_once(serendipity_getTemplateFile('layout.php', 'serendipityPath')); +} else { + switch ($serendipity['GET']['action']) { + // User wants to read the diary + case 'read': + if (isset($serendipity['GET']['id'])) { + serendipity_printEntries(array(serendipity_fetchEntry('id', $serendipity['GET']['id'])), 1); + } else { + serendipity_printEntries(serendipity_fetchEntries($serendipity['range'], true, $serendipity['fetchLimit'])); + } + break; + + // User searches + case 'search': + $r = serendipity_searchEntries($serendipity['GET']['searchTerm']); + if (strlen($serendipity['GET']['searchTerm']) <= 3) { + $serendipity['smarty']->assign('content_message', SEARCH_TOO_SHORT); + break; + } + + if (is_string($r) && $r !== true) { + $serendipity['smarty']->assign('content_message', sprintf(SEARCH_ERROR, $serendipity['dbPrefix'], $r)); + break; + } elseif ($r === true) { + $serendipity['smarty']->assign('content_message', sprintf(NO_ENTRIES_BLAHBLAH, $serendipity['GET']['searchTerm'])); + break; + } + + $serendipity['smarty']->assign('content_message', sprintf(YOUR_SEARCH_RETURNED_BLAHBLAH, $serendipity['GET']['searchTerm'], count($r))); + serendipity_printEntries($r); + break; + + // Show the archive + case 'archives': + serendipity_printArchives(); + break; + + // Welcome screen or whatever + default: + serendipity_printEntries(serendipity_fetchEntries(null, true, $serendipity['fetchLimit'])); + break; + } + + serendipity_smarty_fetch('CONTENT', 'content.tpl'); +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/lang.inc.php b/include/lang.inc.php new file mode 100644 index 0000000..908d454 --- /dev/null +++ b/include/lang.inc.php @@ -0,0 +1,81 @@ + diff --git a/include/plugin_api.inc.php b/include/plugin_api.inc.php new file mode 100644 index 0000000..9b66da4 --- /dev/null +++ b/include/plugin_api.inc.php @@ -0,0 +1,838 @@ + $default_placement)); + + /* Check for multiple dependencies */ + $plugin =& serendipity_plugin_api::load_plugin($key, $authorid, $pluginPath); + if (is_object($plugin)) { + $bag = new serendipity_property_bag; + $plugin->introspect($bag); + serendipity_plugin_api::get_event_plugins(false, true); // Refresh static list of plugins to allow execution of added plugin + $plugin->register_dependencies(false, $authorid); + $plugin->install(); + } else { + echo ERROR . ': ' . $key . ' (' . $pluginPath . ')
'; + } + + return $key; + } + + function remove_plugin_instance($plugin_instance_id) + { + global $serendipity; + + $plugin =& serendipity_plugin_api::load_plugin($plugin_instance_id); + if (is_object($plugin)) { + $bag = new serendipity_property_bag; + $plugin->introspect($bag); + $plugin->uninstall($bag); + } + + serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}plugins where name='$plugin_instance_id'"); + + if (is_object($plugin)) { + $plugin->register_dependencies(true); + } + + serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}config where name LIKE '$plugin_instance_id/%'"); + } + + function remove_plugin_value($plugin_instance_id, $where) + { + global $serendipity; + $where_sql = array(); + foreach($where AS $key) { + $where_sql[] = "(name LIKE '{$plugin_instance_id}/{$key}_%' AND value = '')"; + } + + $query = "DELETE FROM {$serendipity['dbPrefix']}config + WHERE " . implode(' OR ', $where_sql); + + serendipity_db_query($query); + } + + /* Retrieves a list of available plugins */ + function &enum_plugin_classes($event_only = false) + { + global $serendipity; + + $classes = array(); + + /* built-in classes first */ + $cls = get_declared_classes(); + foreach ($cls as $class_name) { + if (strncmp($class_name, 'serendipity_', 6)) { + continue; + } + + $p = get_parent_class($class_name); + while ($p != 'serendipity_plugin' && $p != 'serendipity_event' && $p !== false) { + $p = get_parent_class($p); + } + + if ($p == 'serendipity_plugin' && $class_name != 'serendipity_event' && (!$event_only || is_null($event_only))) { + $classes[$class_name] = array('name' => '@' . $class_name, + 'pluginPath' => ''); + } elseif ($p == 'serendipity_event' && $class_name != 'serendipity_event' && ($event_only || is_null($event_only))) { + $classes[$class_name] = array('name' => '@' . $class_name, + 'pluginPath' => ''); + } + } + + /* GLOBAL third-party classes next */ + $ppath = serendipity_getRealDir(__FILE__) . 'plugins'; + serendipity_plugin_api::traverse_plugin_dir($ppath, $classes, $event_only); + + /* LOCAL third-party classes next */ + $local_ppath = $serendipity['serendipityPath'] . 'plugins'; + if ($ppath != $local_ppath) { + serendipity_plugin_api::traverse_plugin_dir($local_ppath, $classes, $event_only); + } + + return $classes; + } + + function traverse_plugin_dir($ppath, &$classes, $event_only, $maindir = '') { + $d = @opendir($ppath); + if ($d) { + while (($f = readdir($d)) !== false) { + if ($f{0} == '.' || $f == 'CVS' || !is_dir($ppath . '/' . $f)) { + continue; + } + + $subd = opendir($ppath . '/' . $f); + if (!$subd) { + continue; + } + + // Instead of only looking for directories, search for files within subdirectories + while (($subf = readdir($subd)) !== false) { + if ($subf{0} == '.' || $subf == 'CVS') { + continue; + } + + if (is_dir($ppath . '/' . $f . '/' . $subf) && $maindir != $ppath . '/' . $f) { + // Search for another level of subdirectories + serendipity_plugin_api::traverse_plugin_dir($ppath . '/' . $f, $classes, $event_only, $f . '/'); + } + + if (!preg_match('@^[^_]+_(event|plugin)_.+\.php$@i', $subf)) { + continue; + } + + // If an external plugin/event already exists as internal, remove the internal reference because its redundant + if (isset($classes['@' . $subf])) { + unset($classes['@' . $subf]); + } + + // A local plugin will be preferred over general plugins [used when calling this function the second time] + if (isset($classes[$subf])) { + unset($classes[$subf]); + } + + if (!is_null($event_only) && $event_only && !serendipity_plugin_api::is_event_plugin($subf)) { + continue; + } + + if (!is_null($event_only) && !$event_only && serendipity_plugin_api::is_event_plugin($subf)) { + continue; + } + + $class_name = str_replace('.php', '', $subf); + $classes[$class_name] = array('name' => $class_name, + 'pluginPath' => $maindir . $f); + } + } + } + } + + function get_installed_plugins($filter = '*') { + $plugins = serendipity_plugin_api::enum_plugins($filter); + $res = array(); + foreach ( (array)$plugins as $plugin ) { + list($class_name) = explode(':', $plugin['name']); + if ($class_name{0} == '@') { + $class_name = substr($class_name, 1); + } + $res[] = $class_name; + } + return $res; + } + + /* Retrieves a list of plugin instances */ + function enum_plugins($filter = '*', $negate = false, $classname = null, $id = null) + { + global $serendipity; + + $sql = "SELECT * from {$serendipity['dbPrefix']}plugins "; + $where = array(); + + if ($filter !== '*') { + if ($negate) { + $where[] = " placement != '" . serendipity_db_escape_string($filter) . "' "; + } else { + $where[] = " placement = '" . serendipity_db_escape_string($filter) . "' "; + } + } + + if (!empty($classname)) { + $where[] = " (name LIKE '@" . serendipity_db_escape_string($classname) . "%' OR name LIKE '" . serendipity_db_escape_string($classname) . "%') "; + } + + if (!empty($id)) { + $where[] = " name = '" . serendipity_db_escape_string($id) . "' "; + } + + if (count($where) > 0) { + $sql .= ' WHERE ' . implode(' AND ', $where); + } + + $sql .= ' ORDER BY placement, sort_order'; + + return serendipity_db_query($sql); + } + + /* Retrieves a list of plugin instances */ + function count_plugins($filter = '*', $negate = false) + { + global $serendipity; + + $sql = "SELECT COUNT(placement) AS count from {$serendipity['dbPrefix']}plugins "; + + if ($filter !== '*') { + if ($negate) { + $sql .= "WHERE placement != '$filter' "; + } else { + $sql .= "WHERE placement='$filter' "; + } + } + + $count = serendipity_db_query($sql, true); + if (is_array($count) && isset($count[0])) { + return (int)$count[0]; + } + + return 0; + } + + /* Creates an instance of a named plugin */ + function &load_plugin($instance_id, $authorid = null, $pluginPath = '') + { + global $serendipity; + + $instance = explode(':', $instance_id); + $name = $instance[0]; + + if ($name{0} == '@') { + $class_name = substr($name, 1); + } else { + /* plugin from the plugins/ dir */ + if (!class_exists($name)) { + if (empty($pluginPath)) { + $sql = "SELECT path from {$serendipity['dbPrefix']}plugins WHERE name = '" . $instance_id . "'"; + $plugdata = serendipity_db_query($sql, true, 'both', false, false, false, true); + if (is_array($plugdata) && isset($plugdata[0])) { + $pluginPath = $plugdata[0]; + } + + if (empty($pluginPath)) { + $pluginPath = $name; + } + } + + // First try the local path, and then (if existing) a shared library repository ... + if (file_exists($serendipity['serendipityPath'] . 'plugins/' . $pluginPath . '/' . $name . '.php')) { + include $serendipity['serendipityPath'] . 'plugins/' . $pluginPath . '/' . $name . '.php'; + } elseif (file_exists(S9Y_INCLUDE_PATH . 'plugins/' . $pluginPath . '/' . $name . '.php')) { + include S9Y_INCLUDE_PATH . 'plugins/' . $pluginPath . '/' . $name . '.php'; + } + + if (!class_exists($name)) { + return false; + } + } + + $class_name =& $name; + } + + $p =& new $class_name($instance_id); + if (!is_null($authorid)) { + $p->serendipity_owner = $authorid; + } else { + $sql = "SELECT authorid from {$serendipity['dbPrefix']}plugins WHERE name = '" . $instance_id . "'"; + $owner = serendipity_db_query($sql, true); + if (is_array($owner) && isset($owner[0])) { + $p->serendipity_owner = $owner[0]; + } + } + + return $p; + } + + function update_plugin_placement($name, $placement, $order=null) + { + global $serendipity; + + $admin = ''; + if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN && $placement == 'hidden') { + // Only administrators can set plugins to 'hidden' if they are not the owners. + $admin = " AND (authorid = 0 OR authorid = {$serendipity['authorid']})"; + } + + $sql = "UPDATE {$serendipity['dbPrefix']}plugins set placement='$placement' "; + + if ($order !== null) { + $sql .= ", sort_order=$order "; + } + + $sql .= "WHERE name='$name' $admin"; + + return serendipity_db_query($sql); + } + + function update_plugin_owner($name, $authorid) + { + global $serendipity; + + if (empty($authorid) && $authorid != '0') { + return; + } + + $admin = ''; + if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { + $admin = " AND (authorid = 0 OR authorid = {$serendipity['authorid']})"; + } + + $sql = "UPDATE {$serendipity['dbPrefix']}plugins SET authorid='$authorid' WHERE name='$name' $admin"; + + return serendipity_db_query($sql); + } + + function generate_plugins($side, $tag = '', $negate = false, $class = null, $id = null) + { + global $serendipity; + + /* $tag parameter is deprecated and used in Smarty templates instead. Only use it in function + * header for layout.php BC. + */ + + $plugins = serendipity_plugin_api::enum_plugins($side, $negate, $class, $id); + + if (!is_array($plugins)) { + return; + } + + if (!isset($serendipity['smarty'])) { + $serendipity['smarty_raw_mode'] = true; + serendipity_smarty_init(); + } + + $pluginData = array(); + foreach ($plugins as $plugin_data) { + $plugin =& serendipity_plugin_api::load_plugin($plugin_data['name'], $plugin_data['authorid'], $plugin_data['path']); + if (is_object($plugin)) { + $class = get_class($plugin); + $title = ''; + + /* TODO: make generate_content NOT echo its output */ + ob_start(); + $show_plugin = $plugin->generate_content($title); + $content = ob_get_contents(); + ob_end_clean(); + + if ($show_plugin !== FALSE) { + $pluginData[] = array('side' => $side, + 'class' => $class, + 'title' => $title, + 'content' => $content); + } + } elseif ($show_plugin !== FALSE) { + $pluginData[] = array('side' => $side, + 'title' => ERROR, + 'content' => sprintf(INCLUDE_ERROR, $plugin_data['name'])); + } + } + + $serendipity['smarty']->assign( + array( + 'plugindata' => $pluginData, + 'pluginside' => ucfirst($side) + ) + ); + + + return serendipity_smarty_fetch('sidebar_'. $side, 'sidebar.tpl', true); + } + + function get_plugin_title(&$plugin, $default_title = '') + { + global $serendipity; + + // Generate plugin output. Make sure that by probing the plugin, no events are actually called. After that, + // restore setting of 'no_events'. + + if (!is_null($plugin->title)) { + // Preferred way of fetching a plugins title + $title = &$plugin->title; + } else { + $ne = (isset($serendipity['no_events']) && $serendipity['no_events'] ? TRUE : FALSE); + $serendipity['no_events'] = TRUE; + ob_start(); + $plugin->generate_content($title); + ob_end_clean(); + $serendipity['no_events'] = $ne; + } + + if (strlen(trim($title)) == 0) { + if (!empty($default_title)) { + $title = $default_title; + } else { + $title = $plugin->instance; + } + } + + return $title; + } + + /* conditional to see if the named plugin is an event plugin + Refactoring: decompose conditional */ + function is_event_plugin($name) { + return (strstr($name, '_event_')); + } + + function &get_event_plugins($getInstance = false, $refresh = false) { + static $event_plugins; + + if (!$refresh && isset($event_plugins) && is_array($event_plugins)) { + if ($getInstance) { + if (isset($event_plugins[$getInstance]['p'])) { + return $event_plugins[$getInstance]['p']; + } + return false; + } + return $event_plugins; + } + + $plugins = serendipity_plugin_api::enum_plugins('event'); + + if (!is_array($plugins)) { + return false; + } + + $event_plugins = array(); + foreach($plugins AS $plugin_data) { + if ($event_plugins[$plugin_data['name']]['p'] = &serendipity_plugin_api::load_plugin($plugin_data['name'], $plugin_data['authorid'], $plugin_data['path'])) { + /* query for its name, description and configuration data */ + $event_plugins[$plugin_data['name']]['b'] = new serendipity_property_bag; + $event_plugins[$plugin_data['name']]['p']->introspect($event_plugins[$plugin_data['name']]['b']); + $event_plugins[$plugin_data['name']]['t'] = serendipity_plugin_api::get_plugin_title($event_plugins[$plugin_data['name']]['p']); + } else { + unset($event_plugins[$plugin_data['name']]); // Unset failed plugins + } + } + + if ($getInstance) { + if (isset($event_plugins[$getInstance]['p'])) { + return $event_plugins[$getInstance]['p']; + } + return false; + } + + return $event_plugins; + } + + function hook_event($event_name, &$eventData, $addData = null) { + global $serendipity; + + // Can be bypassed globally by setting $serendipity['no_events'] = TRUE; + if (isset($serendipity['no_events']) && $serendipity['no_events'] == true) { + return false; + } + + $plugins = serendipity_plugin_api::get_event_plugins(); + + if (is_array($plugins)) { + // foreach() operates on copies of values, but we want to operate on references, so we use while() + @reset($plugins); + while(list($plugin, $plugin_data) = each($plugins)) { + $bag = &$plugin_data['b']; + if (array_key_exists($event_name, $bag->get('event_hooks'))) { + // Check for cachable events. + if (isset($eventData['is_cached']) && $eventData['is_cached'] && array_key_exists($event_name, (array)$bag->get('cachable_events'))) { + continue; + } + + $plugin_data['p']->event_hook($event_name, $bag, $eventData, $addData); + } + } + } + + return true; + } + + function exists($instance_id) { + global $serendipity; + + if (!strstr($instance_id, ':')) { + $instance_id .= ':'; + } + + $existing = serendipity_db_query("SELECT name FROM {$serendipity['dbPrefix']}plugins WHERE name LIKE '%$instance_id%'"); + + if (is_array($existing) && !empty($existing[0][0])) { + return $existing[0][0]; + } + + return false; + } + + function &autodetect_instance($plugin_name, $authorid, $is_event_plugin = false) { + if ($is_event_plugin) { + $side = 'event'; + } else { + $side = 'right'; + } + + $classes = serendipity_plugin_api::enum_plugin_classes(null); + if (isset($classes[$plugin_name])) { + return serendipity_plugin_api::create_plugin_instance($plugin_name, null, $side, $authorid, $classes[$plugin_name]['pluginPath']); + } else { + return false; + } + } +} + +/* holds a bunch of properties; since serendipity 0.8 only one value per key is allowed [was never really useful] */ +class serendipity_property_bag { + var $properties = array(); + var $name = null; + + function add($name, $value) + { + $this->properties[$name] = $value; + } + + function &get($name) + { + return $this->properties[$name]; + } + + function is_set($name) + { + if (isset($this->properties[$name])) { + return true; + } + + return false; + } +} + +class serendipity_plugin { + var $instance = null; + var $protected = false; + var $wrap_class = 'serendipitySideBarItem'; + var $title_class = 'serendipitySideBarTitle'; + var $content_class = 'serendipitySideBarContent'; + var $title = null; + + /* Be sure to call this method from your derived classes constructors, + * otherwise your config data will not be stored or retrieved correctly + */ + + function serendipity_plugin($instance) + { + $this->instance = $instance; + } + + /* Called by Serendipity when the plugin is first installed. + * Can be used to install database tables etc. + */ + function install() + { + return true; + } + + /* Called by Serendipity when the plugin is removed/uninstalled. + * Can be used to drop installed database tables etc. + */ + function uninstall(&$propbag) + { + return true; + } + + /* Called by serendipity when it wants to display information + * about your plugin. + * You need to override this method in your child class. + */ + function introspect(&$propbag) + { + $propbag->add('copyright', 'MIT License'); + $propbag->add('name' , get_class($this)); + + // $propbag->add( + // 'configuration', + // array( + // 'text field', + // 'foo bar' + // ) + // ); + + $this->protected = FALSE; // If set to TRUE, only allows the owner of the plugin to modify its configuration + + return true; + } + + /* Called by serendipity when it wants to display the configuration + * editor for your plugin. + * $name is the name of a configuration item you added in + * your instrospect method. + * You need to fill the property bag with appropriate items + * that describe the type and value(s) for that particular + * configuration option. + * You need to override this method in your child class if + * you have configuration options. + */ + function introspect_config_item($name, &$propbag) + { + return false; + } + + /* Called by serendipity when it wants your plugin to display itself. + * You need to set $title to be whatever text you want want to + * appear in the item caption space. + * Simply echo/print your content to the output; serendipity will + * capture it and make things work. + * You need to override this method in your child class. + */ + function generate_content(&$title) + { + $title = 'Sample!'; + echo 'This is a sample!'; + } + + /* Fetches a configuration value for this plugin */ + function get_config($name, $defaultvalue = null, $empty = true) + { + $_res = serendipity_get_config_var($this->instance . '/' . $name, $defaultvalue, $empty); + + if (is_null($_res)) { + // A protected plugin by a specific owner may not have its values stored in $serendipity + // because of the special authorid. To display such contents, we need to fetch it + // seperately from the DB. + $_res = serendipity_get_user_config_var($this->instance . '/' . $name, null, $defaultvalue); + } + + if (is_null($_res)) { + $cbag = new serendipity_property_bag; + $this->introspect_config_item($name, $cbag); + $_res = $cbag->get('default'); + unset($cbag); + } + + return $_res; + } + + function set_config($name, $value) + { + $name = $this->instance . '/' . $name; + + return serendipity_set_config_var($name, $value); + } + + /* Called by serendipity after insertion of a config item. If you want to kick out certain + * elements based on contents, create the corresponding function here. + */ + function cleanup() + { + // Cleanup. Remove all empty configs on SAVECONF-Submit. + // serendipity_plugin_api::remove_plugin_value($this->instance, array('title', 'description')); + return true; + } + + function register_dependencies($remove = false, $authorid = '0') + { + global $serendipity; + + if (isset($this->dependencies) && is_array($this->dependencies)) { + + if ($remove) { + $dependencies = @explode(';', $this->get_config('dependencies')); + $modes = @explode(';', $this->get_config('dependency_modes')); + + if (!empty($dependencies) && is_array($dependencies)) { + foreach($dependencies AS $idx => $dependency) { + if ($modes[$idx] == 'remove' && serendipity_plugin_api::exists($dependency)) { + serendipity_plugin_api::remove_plugin_instance($dependency); + } + } + } + } else { + $keys = array(); + $modes = array(); + foreach($this->dependencies AS $dependency => $mode) { + $exists = serendipity_plugin_api::exists($dependency); + if (!$exists) { + if (serendipity_plugin_api::is_event_plugin($dependency)) { + $keys[] = serendipity_plugin_api::autodetect_instance($dependency, $authorid, true); + } else { + $keys[] = serendipity_plugin_api::autodetect_instance($dependency, $authorid, false); + } + } else { + $keys[] = $exists; + } + + $modes[] = $mode; + } + + $this->set_config('dependencies', implode(';', $keys)); + $this->set_config('dependency_modes', implode(';', $modes)); + } + } + + return true; + } +} + +class serendipity_event extends serendipity_plugin { + /* Events can be called on several occasions when s9y performs an action. + * One or multiple plugin can be registered for each of those hooks. + */ + + /* Be sure to call this method from your derived classes constructors, + * otherwise your config data will not be stored or retrieved correctly + */ + + function serendipity_event($instance) + { + $this->instance = $instance; + } + + function &getFieldReference($fieldname = 'body', &$eventData) { + // Get a reference to a content field (body/extended) of + // $entries input data. This is a unifying function because + // several plugins are using similar fields. + + if (is_array($eventData) && isset($eventData[0]) && is_array($eventData[0]['properties'])) { + if (!empty($eventData[0]['properties']['ep_cache_' . $fieldname])) { + + // It may happen that there is no extended entry to concatenate to. In that case, + // create a dummy extended entry. + if (!isset($eventData[0]['properties']['ep_cache_' . $fieldname])) { + $eventData[0]['properties']['ep_cache_' . $fieldname] = ''; + } + + $key = &$eventData[0]['properties']['ep_cache_' . $fieldname]; + } else { + $key = &$eventData[0][$fieldname]; + } + } elseif (is_array($eventData) && is_array($eventData['properties'])) { + if (!empty($eventData['properties']['ep_cache_' . $fieldname])) { + $key = &$eventData['properties']['ep_cache_' . $fieldname]; + } else { + $key = &$eventData[$fieldname]; + } + } elseif (isset($eventData[0][$fieldname])) { + $key = &$eventData[0][$fieldname]; + } else { + $key = ''; + } + + return $key; + } + + function event_hook($event, &$bag, &$eventData, $addData = null) { + // Define event hooks here, if you want you plugin to execute those instead of being a sidebar item. + // Look at external plugins 'serendipity_event_mailer' or 'serendipity_event_weblogping' for usage. + // Currently available events: + // backend_publish [after insertion of a new article in your s9y-backend] + // backend_display [after displaying an article in your s9y-backend] + // frontend_display [before displaying an article in your s9y-frontend] + // frontend_comment [after displaying the "enter comment" dialog] + return true; + } +} + +include_once S9Y_INCLUDE_PATH . 'include/plugin_internal.inc.php'; + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/plugin_internal.inc.php b/include/plugin_internal.inc.php new file mode 100644 index 0000000..2c4ca7c --- /dev/null +++ b/include/plugin_internal.inc.php @@ -0,0 +1,1012 @@ +add('name', CALENDAR); + $propbag->add('description', QUICKJUMP_CALENDAR); + $propbag->add('configuration', array('beginningOfWeek')); + $propbag->add('stackable', false); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'beginningOfWeek': + $options = array(); + for ( $i = 1; $i <= 7; $i++ ) { + $options[] = serendipity_formatTime('%A', mktime(0,0,0,3,$i-1,2004)); + } + + $propbag->add('type', 'select'); + $propbag->add('select_values', $options); + $propbag->add('name', CALENDAR_BEGINNING_OF_WEEK); + $propbag->add('description', CALENDAR_BOW_DESC); + $propbag->add('default', 1); + break; + + default: + return false; + } + return true; + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; + + // Usage of serendipity_serverOffsetHour is as follow: + // * Whenever a date to display needs to be set, apply the timezone offset + // * Whenever we USE the date anywhere in the database, subtract the timezone offset + // * Whenever we DISPLAY the date, we do not apply additional timezone addition to it. + + if (!isset($serendipity['GET']['calendarZoom'])) { + if (!isset($serendipity['range'])) { + $serendipity['GET']['calendarZoom'] = serendipity_serverOffsetHour(time()); + } else { + $serendipity['GET']['calendarZoom'] = serendipity_serverOffsetHour($serendipity['range'][0]); + } + } + + + $month = date('m', serendipity_serverOffsetHour($serendipity['GET']['calendarZoom'], true)); + $year = date('Y', serendipity_serverOffsetHour($serendipity['GET']['calendarZoom'], true)); + + $bow = (int)$this->get_config('beginningOfWeek', 1); + // Check for faulty input, is so - run the default + if ($bow > 6) { + $bow = 1; + } + + // Catch faulty month + $month = (int)$month; + if ($month < 1) { + $month = 1; + } + + // How many days does the month have? + $ts = strtotime($year . '-' . sprintf('%02d', $month) . '-01'); + $now = serendipity_serverOffsetHour(time(), true); + $nrOfDays = date('t', $ts); + $firstDayWeekDay = date('w', $ts); + + // Calculate the first day of the week, based on the beginning of the week ($bow) + if ($bow > $firstDayWeekDay) { + $firstDayWeekDay = $firstDayWeekDay + 7 - $bow; + } elseif ( $bow < $firstDayWeekDay ) { + $firstDayWeekDay = $firstDayWeekDay - $bow; + } else { + $firstDayWeekDay = 0; + } + + // Calculate the number of next/previous month + if ($month > 1) { + $previousMonth = $month-1; + $previousYear = $year; + } else { + $previousMonth = 12; + $previousYear = $year-1; + } + + if ($month < 12) { + $nextMonth = $month+1; + $nextYear = $year; + } else { + $nextMonth = 1; + $nextYear = $year+1; + } + + $endts = mktime(0, 0, 0, $month + 1, 1, $year); + + // Get first and last entry + $minmax = serendipity_db_query("SELECT MAX(timestamp) AS max, MIN(timestamp) AS min FROM {$serendipity['dbPrefix']}entries"); + if (!is_array($minmax) || !is_array($minmax[0]) || $minmax[0]['min'] < 1 || $minmax[0]['max'] < 1) { + // If no entry is available yet, allow scrolling a year back and forth + $minmax = array( + '0' => array( + 'min' => mktime(0, 0, 0, 1, 1, date('Y', $now) - 1), + 'max' => mktime(0, 0, 0, 1, 1, date('Y', $now) + 1) + ) + ); + } + + // Find out about diary entries + $add_query = ''; + $base_query = ''; + $cond = array(); + $cond['and'] = "WHERE e.timestamp >= " . serendipity_serverOffsetHour($ts, true) . " + AND e.timestamp <= " . serendipity_serverOffsetHour($endts, true) . " + " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : '') . " + AND e.isdraft = 'false'"; + + serendipity_plugin_api::hook_event('frontend_fetchentries', $cond, array('noCache' => false, 'noSticky' => false)); + + if (isset($serendipity['GET']['category'])) { + $categoryid = serendipity_db_escape_string($serendipity['GET']['category']); + + if (is_numeric($categoryid)) { + $base_query = 'C' . $categoryid; + $add_query = '/' . $base_query; + $querystring = "SELECT timestamp + FROM {$serendipity['dbPrefix']}category c, + {$serendipity['dbPrefix']}entrycat ec, + {$serendipity['dbPrefix']}entries e + {$cond['joins']} + {$cond['and']} + AND e.id = ec.entryid + AND c.categoryid = ec.categoryid + AND c.category_left BETWEEN " . implode(' AND ', serendipity_fetchCategoryRange($categoryid)); + } + } + + if (!isset($querystring)) { + $querystring = "SELECT id, timestamp + FROM {$serendipity['dbPrefix']}entries e + {$cond['joins']} + {$cond['and']}"; + } + + $rows = serendipity_db_query($querystring); + + $activeDays = array(); + if (is_array($rows)) { + foreach ($rows as $row) { + $row['timestamp'] = serendipity_serverOffsetHour($row['timestamp']); + $activeDays[date('j', $row['timestamp'])] = $row['timestamp']; + } + } + + // Print the calendar + $currDay = 1; + $nrOfRows = ceil(($nrOfDays+$firstDayWeekDay)/7); + $today_day = date('j', $now); + $today_month = date('m', $now); + $today_year = date('Y', $now); + for ($x = 0; $x < 6; $x++) { + // Break out if we are out of days + if ($currDay > $nrOfDays) { + break; + } + // Prepare row + for ($y = 0; $y < 7; $y++) { + $cellProps = array(); + $printDay = ''; + $link = ''; + + if ($x == 0) { + $cellProps['FirstRow'] = 1; + } + if ($y == 0) { + $cellProps['FirstInRow'] = 1; + } + if ($y == 6) { + $cellProps['LastInRow'] = 1; + } + if ($x == $nrOfRows-1) { + $cellProps['LastRow'] = 1; + } + + // If it's not a blank day, we print the day + if (($x > 0 || $y >= $firstDayWeekDay) && $currDay <= $nrOfDays) { + $printDay = $currDay; + if ($today_year == $year && $today_month == $month && $today_day == $currDay) { + $cellProps['Today'] = 1; + } + if (isset($activeDays[$currDay]) && $activeDays[$currDay] > 1) { + $cellProps['Active'] = 1; + $cellProps['Link'] = serendipity_archiveDateUrl(sprintf('%4d/%02d/%02d', $year, $month, $currDay) . $add_query ); + } + $currDay++; + } + $smartyRows[$x]['days'][] = array('name' => $printDay, + 'properties' => $cellProps, + 'classes' => implode(' ', array_keys($cellProps))); + } // end for + } // end for + + $serendipity['smarty']->assign('plugin_calendar_weeks', $smartyRows); + + + $dow = array(); + for ($i = 1; $i <= 7; $i++) { + $dow[] = array('date' => mktime(0, 0, 0, 3, $bow + $i - 1, 2004)); + } + $serendipity['smarty']->assign('plugin_calendar_dow', $dow); + + $serendipity['smarty']->assign('plugin_calendar_head', array('month_date' => $ts, + 'uri_previous' => serendipity_archiveDateUrl(sprintf('%04d/%02d', $previousYear, $previousMonth). $add_query), + 'uri_month' => serendipity_archiveDateUrl(sprintf('%04d/%02d', $year, $month)), + 'uri_next' => serendipity_archiveDateUrl(sprintf('%04d/%02d',$nextYear, $nextMonth) . $add_query), + 'minScroll' => $minmax[0]['min'], + 'maxScroll' => $minmax[0]['max'])); + echo serendipity_smarty_fetch('CALENDAR', 'plugin_calendar.tpl'); + } // end function +} // end class + +class serendipity_quicksearch_plugin extends serendipity_plugin { + var $title = QUICKSEARCH; + + function introspect(&$propbag) + { + $propbag->add('name', QUICKSEARCH); + $propbag->add('description', SEARCH_FOR_ENTRY); + $propbag->add('stackable', false); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; +?> +
+
+ + +
+ +
+add('name', ARCHIVES); + $propbag->add('description', BROWSE_ARCHIVES); + $propbag->add('stackable', true); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array('frequency', 'count')); + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'count' : + $propbag->add('type', 'string'); + $propbag->add('name', ARCHIVE_COUNT); + $propbag->add('description', ARCHIVE_COUNT_DESC); + $propbag->add('default', 3); + break; + + case 'frequency' : + $propbag->add('type', 'select'); + $propbag->add('name', ARCHIVE_FREQUENCY); + $propbag->add('select_values', array('months' => MONTHS, 'weeks' => WEEKS, 'days' => DAYS)); + $propbag->add('description', ARCHIVE_FREQUENCY_DESC); + $propbag->add('default', 'months'); + break; + default: + return false; + } + return true; + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; + + $ts = mktime(0, 0, 0); + + for($x = 0; $x < $this->get_config('count', 3); $x++) { + + switch($this->get_config('frequency', 'months')) { + case 'months' : + $linkStamp = date('Y/m', $ts); + $ts_title = serendipity_formatTime("%B %Y", $ts, false); + $ts = mktime(0, 0, 0, date('m', $ts)-1, 1, date('Y', $ts)); // Must be last in 'case' statement + break; + case 'weeks' : + $linkStamp = date('Y/\WW', $ts); + $ts_title = WEEK . ' '. date('W, Y', $ts); + $ts = mktime(0, 0, 0, date('m', $ts), date('d', $ts)-7, date('Y', $ts)); + break; + case 'days' : + $linkStamp = date('Y/m/d', $ts); + $ts_title = serendipity_formatTime("%B %e. %Y", $ts, false); + $ts = mktime(0, 0, 0, date('m', $ts), date('d', $ts)-1, date('Y', $ts)); // Must be last in 'case' statement + break; + } + $link = serendipity_rewriteURL(PATH_ARCHIVES.'/' . $linkStamp . '.html', 'serendipityHTTPPath'); + + echo '' . $ts_title . '
' . "\n"; + + } + + echo '' . RECENT . '
' . "\n"; + echo '' . OLDER . ''. "\n"; + } +} + +class serendipity_topreferrers_plugin extends serendipity_plugin { + var $title = TOP_REFERRER; + + function introspect(&$propbag) + { + $propbag->add('name', TOP_REFERRER); + $propbag->add('description', SHOWS_TOP_SITES); + $propbag->add('stackable', false); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array('limit', 'use_links')); + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'limit': + $propbag->add('type', 'string'); + $propbag->add('name', LIMIT_TO_NUMBER); + $propbag->add('description', LIMIT_TO_NUMBER); + $propbag->add('default', 10); + break; + + case 'use_links': + $propbag->add('type', 'tristate'); + $propbag->add('name', INSTALL_TOP_AS_LINKS); + $propbag->add('description', INSTALL_TOP_AS_LINKS_DESC); + $propbag->add('default', false); + break; + + default: + return false; + } + return true; + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; + + // get local configuration (default, true, false) + $use_links = $this->get_config('use_links', 'default'); + // get global configuration (true, false) + $global_use_link = serendipity_get_config_var('top_as_links', false, true); + + // if local configuration say to use global default, do so + if ($use_links == 'default') { + $use_links = serendipity_db_bool($global_use_link); + } else { + $use_links = serendipity_db_bool($use_links); + } + + echo serendipity_displayTopReferrers($this->get_config('limit', 10), $use_links); + } +} + +class serendipity_topexits_plugin extends serendipity_plugin { + var $title = TOP_EXITS; + + function introspect(&$propbag) + { + $propbag->add('name', TOP_EXITS); + $propbag->add('description', SHOWS_TOP_EXIT); + $propbag->add('stackable', false); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array('limit', 'use_links')); + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'limit': + $propbag->add('type', 'string'); + $propbag->add('name', LIMIT_TO_NUMBER); + $propbag->add('description', LIMIT_TO_NUMBER); + $propbag->add('default', 10); + break; + + case 'use_links': + $propbag->add('type', 'tristate'); + $propbag->add('name', INSTALL_TOP_AS_LINKS); + $propbag->add('description', INSTALL_TOP_AS_LINKS_DESC); + $propbag->add('default', true); + break; + + default: + return false; + } + return true; + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; + + // get local configuration (default, true, false) + $use_links = $this->get_config('use_links', 'default'); + // get global configuration (true, false) + $global_use_link = serendipity_get_config_var('top_as_links', false, true); + + // if local configuration say to use global default, do so + if ($use_links == 'default') { + $use_links = serendipity_db_bool($global_use_link); + } else { + $use_links = serendipity_db_bool($use_links); + } + + echo serendipity_displayTopExits($this->get_config('limit', 10), $use_links); + } +} + +class serendipity_syndication_plugin extends serendipity_plugin { + var $title = SYNDICATE_THIS_BLOG; + + function introspect(&$propbag) + { + $propbag->add('name', SYNDICATION); + $propbag->add('description', SHOWS_RSS_BLAHBLAH); + $propbag->add('stackable', true); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array( + 'fullfeed', + 'show_0.91', + 'show_1.0', + 'show_2.0', + 'show_2.0c', + 'show_atom0.3', + 'show_opml1.0', + 'seperator', + 'show_mail', + 'field_managingEditor', + 'field_webMaster', + 'field_ttl', + 'field_pubDate', + 'seperator', + 'bannerURL', + 'bannerWidth', + 'bannerHeight', + ) + ); + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'fullfeed': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_FULLFEED); + $propbag->add('description', ''); + $propbag->add('default', false); + break; + + case 'show_0.91': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_091); + $propbag->add('description', ''); + $propbag->add('default', 'true'); + break; + + case 'show_1.0': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_10); + $propbag->add('description', ''); + $propbag->add('default', 'true'); + break; + + case 'show_2.0': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_20); + $propbag->add('description', ''); + $propbag->add('default', 'true'); + break; + + case 'show_2.0c': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_20c); + $propbag->add('description', ''); + $propbag->add('default', 'true'); + break; + + case 'show_atom0.3': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_ATOM03); + $propbag->add('description', ''); + $propbag->add('default', 'true'); + break; + + case 'show_opml1.0': + $propbag->add('type', 'boolean'); + $propbag->add('name', sprintf(SYNDICATION_PLUGIN_GENERIC_FEED, 'OPML 1.0')); + $propbag->add('description', ''); + $propbag->add('default', 'false'); + break; + + case 'seperator': + $propbag->add('type', 'seperator'); + break; + + case 'show_mail': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_SHOW_MAIL); + $propbag->add('description', ''); + $propbag->add('default', 'true'); + break; + + case 'field_managingEditor': + $propbag->add('type', 'string'); + $propbag->add('name', SYNDICATION_PLUGIN_MANAGINGEDITOR); + $propbag->add('description', SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC); + $propbag->add('default', ''); + break; + + case 'field_webMaster': + $propbag->add('type', 'string'); + $propbag->add('name', SYNDICATION_PLUGIN_WEBMASTER); + $propbag->add('description', SYNDICATION_PLUGIN_WEBMASTER_DESC); + $propbag->add('default', ''); + break; + + case 'field_ttl': + $propbag->add('type', 'string'); + $propbag->add('name', SYNDICATION_PLUGIN_TTL); + $propbag->add('description', SYNDICATION_PLUGIN_TTL_DESC); + $propbag->add('default', ''); + break; + + case 'field_pubDate': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_PUBDATE); + $propbag->add('description', SYNDICATION_PLUGIN_PUBDATE_DESC); + $propbag->add('default', ''); + break; + + case 'bannerURL': + $propbag->add('type', 'string'); + $propbag->add('name', SYNDICATION_PLUGIN_BANNERURL); + $propbag->add('description', SYNDICATION_PLUGIN_BANNERURL_DESC); + $propbag->add('default', ''); + break; + + case 'bannerWidth': + $propbag->add('type', 'string'); + $propbag->add('name', SYNDICATION_PLUGIN_BANNERWIDTH); + $propbag->add('description', SYNDICATION_PLUGIN_BANNERWIDTH_DESC); + $propbag->add('default', ''); + break; + + case 'bannerHeight': + $propbag->add('type', 'string'); + $propbag->add('name', SYNDICATION_PLUGIN_BANNERHEIGHT); + $propbag->add('description', SYNDICATION_PLUGIN_BANNERHEIGHT_DESC); + $propbag->add('default', ''); + break; + + default: + return false; + } + return true; + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; + + if (serendipity_db_bool($this->get_config('show_0.91', true))) { +?> + +get_config('show_1.0', true))) { +?> +
+ XML + RSS 1.0 feed +
+get_config('show_2.0', true))) { +?> +
+ XML + RSS 2.0 feed +
+get_config('show_atom0.3', true))) { +?> + +get_config('show_2.0c', true))) { +?> + +get_config('show_opml1.0', false))) { +?> + +introspect($bag); + $additional_fields = array(); + + if ($this->get_config('bannerURL') != '') { + $img = $this->get_config('bannerURL'); + $w = $this->get_config('bannerWidth'); + $h = $this->get_config('bannerHeight'); + } elseif (($banner = serendipity_getTemplateFile('img/rss_banner.png', 'serendipityPath'))) { + $img = serendipity_getTemplateFile('img/rss_banner.png', 'baseURL'); + $i = getimagesize($banner); + $w = $i[0]; + $h = $i[1]; + } else { + $img = serendipity_getTemplateFile('img/s9y_banner_small.png', 'baseURL'); + $w = 100; + $h = 21; + } + + $additional_fields['image'] = << + $img + RSS: $title - $description + {$serendipity['baseURL']} + $w + $h + +IMAGE; + + $additional_fields['image_rss1.0_channel'] = ''; + $additional_fields['image_rss1.0_rdf'] = << + $img + RSS: $title - $description + {$serendipity['baseURL']} + $w + $h + +IMAGE; + + // Now, if set, stitch together any fields that have been configured in the syndication plugin. + // First, do some sanity checks + $additional_fields['channel'] = ''; + foreach($bag->get('configuration') AS $bag_index => $bag_value) { + if (preg_match('|^field_(.*)$|', $bag_value, $match)) { + $bag_content = $this->get_config($bag_value); + + switch($match[1]) { + case 'pubDate': + if ($bag_content != 'false') { + $bag_content = gmdate('D, d M Y H:i:s \G\M\T', serendipity_serverOffsetHour($entries[0]['last_modified'])); + } else { + $bag_content = ''; + } + break; + + // Each new RSS-field which needs rewrite of its content should get its own case here. + + default: + break; + } + + if ($bag_content != '') { + $additional_fields['channel'] .= '<' . $match[1] . '>' . $bag_content . '' . "\n"; + } + + } + } + + return $additional_fields; + } +} + +class serendipity_superuser_plugin extends serendipity_plugin { + var $title = SUPERUSER; + + function introspect(&$propbag) + { + $propbag->add('name', SUPERUSER); + $propbag->add('description', ALLOWS_YOU_BLAHBLAH); + $propbag->add('stackable', false); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array('https')); + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; + if ($this->get_config('https', 'false') == 'true') { + $base = str_replace('http://', 'https://', $serendipity['baseURL']); + } else { + $base = $serendipity['serendipityHTTPPath']; + } + + $link = $base . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] .'?/' : '') . PATH_ADMIN; + $text = (($_SESSION['serendipityAuthedUser'] === true) ? SUPERUSER_OPEN_ADMIN : SUPERUSER_OPEN_LOGIN); + echo ''. $text .''; + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'https': + $propbag->add('type', 'boolean'); + $propbag->add('name', PLUGIN_SUPERUSER_HTTPS); + $propbag->add('description', PLUGIN_SUPERUSER_HTTPS_DESC); + $propbag->add('default', 'false'); + break; + + default: + return false; + } + return true; + } +} + +class serendipity_plug_plugin extends serendipity_plugin { + var $title = POWERED_BY; + + function introspect(&$propbag) + { + $propbag->add('name', POWERED_BY); + $propbag->add('description', ADVERTISES_BLAHBLAH); + $propbag->add('stackable', true); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array( + 'image', + 'text')); + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'image': + $propbag->add('type', 'boolean'); + $propbag->add('name', POWERED_BY_SHOW_IMAGE); + $propbag->add('description', POWERED_BY_SHOW_IMAGE_DESC); + $propbag->add('default', 'true'); + break; + + case 'text': + $propbag->add('type', 'boolean'); + $propbag->add('name', POWERED_BY_SHOW_TEXT); + $propbag->add('description', POWERED_BY_SHOW_TEXT_DESC); + $propbag->add('default', 'false'); + break; + default: + return false; + } + return true; + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->title; +?> +
+get_config('image', 'true') == 'true' ) { ?> + Serendipity PHP Weblog + +get_config('text', 'false') == 'true' ) { ?> + + +
+title = $this->get_config('title', $this->title); + $propbag->add('name', HTML_NUGGET); + $propbag->add('description', HOLDS_A_BLAHBLAH); + $propbag->add('stackable', true); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array( + 'title', + 'content', + 'markup', + 'show_where' + ) + ); + + $this->protected = TRUE; // If set to TRUE, only allows the owner of the plugin to modify its configuration + } + + function introspect_config_item($name, &$propbag) + { + switch($name) { + case 'title': + $propbag->add('type', 'string'); + $propbag->add('name', TITLE); + $propbag->add('description', TITLE_FOR_NUGGET); + $propbag->add('default', ''); + break; + + case 'content': + $propbag->add('type', 'html'); + $propbag->add('name', CONTENT); + $propbag->add('description', THE_NUGGET); + $propbag->add('default', ''); + break; + + case 'markup': + $propbag->add('type', 'boolean'); + $propbag->add('name', DO_MARKUP); + $propbag->add('description', DO_MARKUP_DESCRIPTION); + $propbag->add('default', 'true'); + break; + + case 'show_where': + $select = array('extended' => PLUGIN_ITEM_DISPLAY_EXTENDED, 'overview' => PLUGIN_ITEM_DISPLAY_OVERVIEW, 'both' => PLUGIN_ITEM_DISPLAY_BOTH); + $propbag->add('type', 'select'); + $propbag->add('select_values', $select); + $propbag->add('name', PLUGIN_ITEM_DISPLAY); + $propbag->add('description', ''); + $propbag->add('default', 'both'); + break; + + default: + return false; + } + return true; + } + + function generate_content(&$title) + { + global $serendipity; + + $title = $this->get_config('title'); + $show_where = $this->get_config('show_where', 'both'); + + if ($show_where == 'extended' && (!isset($serendipity['GET']['id']) || !is_numeric($serendipity['GET']['id']))) { + return false; + } else if ($show_where == 'overview' && isset($serendipity['GET']['id']) && is_numeric($serendipity['GET']['id'])) { + return false; + } + + if ($this->get_config('markup', 'true') == 'true') { + $entry = array('html_nugget' => $this->get_config('content')); + serendipity_plugin_api::hook_event('frontend_display', $entry); + echo $entry['html_nugget']; + } else { + echo $this->get_config('content'); + } + } +} + +class serendipity_categories_plugin extends serendipity_plugin { + var $title = CATEGORIES; + + function introspect(&$propbag) { + global $serendipity; + + $propbag->add('name', CATEGORIES); + $propbag->add('description', CATEGORY_PLUGIN_DESC); + $propbag->add('stackable', true); + $propbag->add('author', 'Serendipity Team'); + $propbag->add('version', '1.0'); + $propbag->add('configuration', array('authorid', 'image')); + } + + function introspect_config_item($name, &$propbag) + { + global $serendipity; + switch($name) { + case 'authorid': + $row_authors = serendipity_db_query("SELECT realname, authorid FROM {$serendipity['dbPrefix']}authors"); + $authors = array('all' => ALL_AUTHORS); + if (is_array($row_authors)) { + foreach($row_authors as $row) { + $authors[$row['authorid']] = $row['realname']; + } + } + + $propbag->add('type', 'select'); + $propbag->add('name', CATEGORIES_TO_FETCH); + $propbag->add('description', CATEGORIES_TO_FETCH_DESC); + $propbag->add('select_values', $authors); + $propbag->add('default', 'all'); + break; + + case 'image': + $propbag->add('type', 'string'); + $propbag->add('name', XML_IMAGE_TO_DISPLAY); + $propbag->add('description', XML_IMAGE_TO_DISPLAY_DESC); + $propbag->add('default', serendipity_getTemplateFile('img/xml.gif')); + break; + + default: + return false; + } + return true; + } + + function generate_content(&$title) { + global $serendipity; + + $which_category = $this->get_config('authorid'); + $categories = serendipity_fetchCategories(empty($which_category) ? 'all' : $which_category); + $title = $this->title; + $html = ''; + $image = $this->get_config('image', serendipity_getTemplateFile('img/xml.gif')); + $image = (($image == "'none'" || $image == 'none') ? '' : $image); + if (is_array($categories) && count($categories)) { + $categories = serendipity_walkRecursive($categories, 'categoryid', 'parentid', VIEWMODE_THREADED); + foreach ( $categories as $cat ) { + $html .= '
'; + if ( !empty($image) ) { + $html .= 'XML '; + } + $html .= ''. $cat['category_name'] .''; + $html .= '
' . "\n"; + } + } + + $html .= sprintf( + '
%s', + + $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'], + ALL_CATEGORIES, + ALL_CATEGORIES + ); + + print $html; + } +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/include/tpl/config_local.inc.php b/include/tpl/config_local.inc.php new file mode 100644 index 0000000..b10878f --- /dev/null +++ b/include/tpl/config_local.inc.php @@ -0,0 +1,297 @@ + INSTALL_CAT_DB, + 'description' => INSTALL_CAT_DB_DESC, + 'items' => array(array('var' => 'dbType', + 'title' => INSTALL_DBTYPE, + 'description' => INSTALL_DBTYPE_DESC, + 'type' => 'list', + 'default' => array(), + 'flags' => array('nosave', 'simpleInstall', 'probeDefault')), + + array('var' => 'dbHost', + 'title' => INSTALL_DBHOST, + 'description' => INSTALL_DBHOST_DESC, + 'type' => 'string', + 'default' => 'localhost', + 'flags' => array('nosave', 'simpleInstall')), + + array('var' => 'dbUser', + 'title' => INSTALL_DBUSER, + 'description' => INSTALL_DBUSER_DESC, + 'type' => 'string', + 'default' => 'serendipity', + 'flags' => array('nosave', 'simpleInstall')), + + array('var' => 'dbPass', + 'title' => INSTALL_DBPASS, + 'description' => INSTALL_DBPASS_DESC, + 'type' => 'protected', + 'default' => '', + 'flags' => array('nosave', 'hideValue', 'simpleInstall')), + + array('var' => 'dbName', + 'title' => INSTALL_DBNAME, + 'description' => INSTALL_DBNAME_DESC, + 'type' => 'string', + 'default' => 'serendipity', + 'flags' => array('nosave', 'simpleInstall')), + + array('var' => 'dbPrefix', + 'title' => INSTALL_DBPREFIX, + 'description' => INSTALL_DBPREFIX_DESC, + 'type' => 'string', + 'default' => 'serendipity_', + 'flags' => array('nosave')), + + array('var' => 'dbPersistent', + 'title' => INSTALL_DBPERSISTENT, + 'description' => INSTALL_DBPERSISTENT_DESC, + 'type' => 'bool', + 'default' => false, + 'flags' => array('nosave')) + )); + + $res['paths'] = + array('title' => INSTALL_CAT_PATHS, + 'description' => INSTALL_CAT_PATHS_DESC, + 'items' => array(array('var' => 'serendipityPath', + 'title' => INSTALL_FULLPATH, + 'description' => INSTALL_FULLPATH_DESC, + 'type' => 'string', + 'default' => '/webroot/serendipity/'), + + array('var' => 'uploadPath', + 'title' => INSTALL_UPLOADPATH, + 'description' => INSTALL_UPLOADPATH_DESC, + 'type' => 'string', + 'default' => 'uploads/'), + + array('var' => 'serendipityHTTPPath', + 'title' => INSTALL_RELPATH, + 'description' => INSTALL_RELPATH_DESC, + 'type' => 'string', + 'default' => '/serendipity/'), + + array('var' => 'templatePath', + 'title' => INSTALL_RELTEMPLPATH, + 'description' => INSTALL_RELTEMPLPATH_DESC, + 'type' => 'string', + 'default' => 'templates/'), + + array('var' => 'uploadHTTPPath', + 'title' => INSTALL_RELUPLOADPATH, + 'description' => INSTALL_RELUPLOADPATH_DESC, + 'type' => 'string', + 'default' => 'uploads/'), + + array('var' => 'baseURL', + 'title' => INSTALL_URL, + 'description' => INSTALL_URL_DESC, + 'type' => 'string', + 'default' => 'http://www.example.com/serendipity/'), + + array('var' => 'autodetect_baseURL', + 'title' => INSTALL_AUTODETECT_URL, + 'description' => INSTALL_AUTODETECT_URL_DESC, + 'type' => 'bool', + 'default' => false), + + array('var' => 'indexFile', + 'title' => INSTALL_INDEXFILE, + 'description' => INSTALL_INDEXFILE_DESC, + 'type' => 'string', + 'default' => 'index.php'), + )); + + + $res['settings'] = + array('title' => INSTALL_CAT_SETTINGS, + 'description' => INSTALL_CAT_SETTINGS_DESC, + 'items' => array(array('var' => 'user', + 'title' => INSTALL_USERNAME, + 'description' => INSTALL_USERNAME_DESC, + 'type' => 'string', + 'default' => 'John Doe', + 'flags' => array('installOnly', 'local', 'simpleInstall')), + + array('var' => 'pass', + 'title' => INSTALL_PASSWORD, + 'description' => INSTALL_PASSWORD_DESC, + 'type' => 'protected', + 'default' => 'john', + 'flags' => array('installOnly', 'local', 'simpleInstall')), + + array('var' => 'realname', + 'title' => USERCONF_REALNAME, + 'description' => USERCONF_REALNAME_DESC, + 'type' => 'string', + 'default' => 'John Doe', + 'flags' => array('installOnly', 'local', 'simpleInstall')), + + array('var' => 'email', + 'title' => INSTALL_EMAIL, + 'description' => INSTALL_EMAIL_DESC, + 'type' => 'string', + 'default' => 'john@example.com', + 'flags' => array('installOnly', 'local', 'simpleInstall')), + + array('var' => 'want_mail', + 'title' => INSTALL_SENDMAIL, + 'description' => INSTALL_SENDMAIL_DESC, + 'type' => 'bool', + 'default' => true, + 'flags' => array('installOnly', 'local')), + + array('var' => 'allowSubscriptions', + 'title' => INSTALL_SUBSCRIBE, + 'description' => INSTALL_SUBSCRIBE_DESC, + 'type' => 'bool', + 'default' => true), + + array('var' => 'blogTitle', + 'title' => INSTALL_BLOGNAME, + 'description' => INSTALL_BLOGNAME_DESC, + 'type' => 'string', + 'default' => 'John Doe\'s personal blog', + 'userlevel' => USERLEVEL_CHIEF, + 'flags' => array('simpleInstall')), + + array('var' => 'blogDescription', + 'title' => INSTALL_BLOGDESC, + 'description' => INSTALL_BLOGDESC_DESC, + 'type' => 'string', + 'default' => 'My little place on the web...', + 'userlevel' => USERLEVEL_CHIEF, + 'flags' => array('simpleInstall')), + + array('var' => 'lang', + 'title' => INSTALL_LANG, + 'description' => INSTALL_LANG_DESC, + 'type' => 'list', + 'default' => $serendipity['languages'], + 'flags' => array('simpleInstall')), + + array('var' => 'lang_content_negotiation', + 'title' => AUTOLANG, + 'description' => AUTOLANG_DESC, + 'type' => 'bool', + 'default' => false, + 'userlevel' => USERLEVEL_CHIEF), + )); + + $res['display'] = + array('title' => INSTALL_CAT_DISPLAY, + 'description' => INSTALL_CAT_DISPLAY_DESC, + 'items' => array(array('var' => 'fetchLimit', + 'title' => INSTALL_FETCHLIMIT, + 'description' => INSTALL_FETCHLIMIT_DESC, + 'type' => 'int', + 'default' => 15, + 'userlevel' => USERLEVEL_CHIEF), + + array('var' => 'useGzip', + 'title' => INSTALL_USEGZIP, + 'description' => INSTALL_USEGZIP_DESC, + 'type' => 'bool', + 'default' => true), + + array('var' => 'wysiwyg', + 'title' => INSTALL_WYSIWYG, + 'description' => INSTALL_WYSIWYG_DESC, + 'type' => 'bool', + 'default' => false, + 'userlevel' => USERLEVEL_CHIEF, + 'flags' => array('simpleInstall')), + + array('var' => 'XHTML11', + 'title' => INSTALL_XHTML11, + 'description' => INSTALL_XHTML11_DESC, + 'type' => 'bool', + 'default' => false), + + array('var' => 'enablePopup', + 'title' => INSTALL_POPUP, + 'description' => INSTALL_POPUP_DESC, + 'type' => 'bool', + 'default' => false, + 'userlevel' => USERLEVEL_CHIEF), + + array('var' => 'embed', + 'title' => INSTALL_EMBED, + 'description' => INSTALL_EMBED_DESC, + 'type' => 'bool', + 'default' => 'false'), + + array('var' => 'top_as_links', + 'title' => INSTALL_SHOW_EXTERNAL_LINKS, + 'description' => INSTALL_SHOW_EXTERNAL_LINKS_DESC, + 'type' => 'bool', + 'default' => false), + + array('var' => 'blockReferer', + 'title' => INSTALL_BLOCKREF, + 'description' => INSTALL_BLOCKREF_DESC, + 'type' => 'string', + 'default' => ';', + 'userlevel' => USERLEVEL_CHIEF), + + array('var' => 'rewrite', + 'title' => INSTALL_REWRITE, + 'description' => INSTALL_REWRITE_DESC, + 'type' => 'list', + 'default' => array(), + 'flags' => array('probeDefault')), + + array('var' => 'serverOffsetHours', + 'title' => INSTALL_OFFSET, + 'description' => INSTALL_OFFSET_DESC, + 'type' => 'int', + 'default' => 0, + 'userlevel' => USERLEVEL_CHIEF, + 'flags' => array('parseDescription')), + + array('var' => 'showFutureEntries', + 'title' => INSTALL_SHOWFUTURE, + 'description' => INSTALL_SHOWFUTURE_DESC, + 'type' => 'bool', + 'default' => false, + 'userlevel' => USERLEVEL_CHIEF), + )); + + $res['imagehandling'] = + array('title' => INSTALL_CAT_IMAGECONV, + 'description' => INSTALL_CAT_IMAGECONV_DESC, + 'items' => array(array('var' => 'magick', + 'title' => INSTALL_IMAGEMAGICK, + 'description' => INSTALL_IMAGEMAGICK_DESC, + 'type' => 'bool', + 'default' => false), + + array('var' => 'convert', + 'title' => INSTALL_IMAGEMAGICKPATH, + 'description' => INSTALL_IMAGEMAGICKPATH_DESC, + 'type' => 'string', + 'default' => '/usr/local/bin/convert'), + + array('var' => 'thumbSuffix', + 'title' => INSTALL_THUMBSUFFIX, + 'description' => INSTALL_THUMBSUFFIX_DESC, + 'type' => 'string', + 'default' => 'serendipityThumb'), + + array('var' => 'thumbSize', + 'title' => INSTALL_THUMBWIDTH, + 'description' => INSTALL_THUMBWIDTH_DESC, + 'type' => 'int', + 'default' => 110), + )); + + return $res; +?> diff --git a/include/tpl/config_personal.inc.php b/include/tpl/config_personal.inc.php new file mode 100644 index 0000000..26f4f15 --- /dev/null +++ b/include/tpl/config_personal.inc.php @@ -0,0 +1,114 @@ + USERCONF_CAT_PERSONAL, + 'description' => USERCONF_CAT_PERSONAL_DESC, + 'items' => array(array('var' => 'username', + 'title' => USERCONF_USERNAME, + 'description' => USERCONF_USERNAME_DESC, + 'type' => 'string', + 'default' => 'johndoe', + 'userlevel' => USERLEVEL_EDITOR), + + array('var' => 'password', + 'title' => USERCONF_PASSWORD, + 'description' => USERCONF_PASSWORD_DESC, + 'type' => 'protected', + 'default' => '', + 'userlevel' => USERLEVEL_EDITOR), + + array('var' => 'realname', + 'title' => USERCONF_REALNAME, + 'description' => USERCONF_REALNAME_DESC, + 'type' => 'string', + 'default' => 'John Doe', + 'userlevel' => USERLEVEL_EDITOR), + + array('var' => 'userlevel', + 'title' => USERCONF_USERLEVEL, + 'description' => USERCONF_USERLEVEL_DESC, + 'type' => 'list', + 'default' => $serendipity['permissionLevels'], + 'userlevel' => USERLEVEL_CHIEF), + + array('var' => 'email', + 'title' => USERCONF_EMAIL, + 'description' => USERCONF_EMAIL_DESC, + 'type' => 'string', + 'default' => 'john@example.com', + 'userlevel' => USERLEVEL_EDITOR), + + array('var' => 'lang', + 'title' => INSTALL_LANG, + 'description' => INSTALL_LANG_DESC, + 'type' => 'list', + 'default' => $serendipity['languages'], + 'userlevel' => USERLEVEL_EDITOR, + 'flags' => array('config')), + + array('var' => 'wysiwyg', + 'title' => INSTALL_WYSIWYG, + 'description' => INSTALL_WYSIWYG_DESC, + 'type' => 'bool', + 'default' => false, + 'userlevel' => USERLEVEL_EDITOR, + 'flags' => array('config')), + + array('var' => 'mail_comments', + 'title' => USERCONF_SENDCOMMENTS, + 'description' => USERCONF_SENDCOMMENTS_DESC, + 'type' => 'bool', + 'default' => true, + 'userlevel' => USERLEVEL_EDITOR), + + array('var' => 'mail_trackbacks', + 'title' => USERCONF_SENDTRACKBACKS, + 'description' => USERCONF_SENDTRACKBACKS_DESC, + 'type' => 'bool', + 'default' => true, + 'userlevel' => USERLEVEL_EDITOR), + + array('var' => 'right_publish', + 'title' => USERCONF_ALLOWPUBLISH, + 'description' => USERCONF_ALLOWPUBLISH_DESC, + 'type' => 'bool', + 'default' => true, + 'userlevel' => USERLEVEL_CHIEF), + )); + + $res['defaults'] = + array('title' => USERCONF_CAT_DEFAULT_NEW_ENTRY, + 'description' => '', + 'items' => array( + array('var' => 'moderateCommentsDefault', + 'title' => COMMENTS_MODERATE, + 'description' => '', + 'type' => 'bool', + 'default' => false, + 'userlevel' => USERLEVEL_EDITOR, + 'flags' => array('config')), + + array('var' => 'allowCommentsDefault', + 'title' => COMMENTS_ENABLE, + 'description' => '', + 'type' => 'bool', + 'default' => true, + 'userlevel' => USERLEVEL_EDITOR, + 'flags' => array('config')), + + array('var' => 'publishDefault', + 'title' => NEW_ENTRY, + 'description' => '', + 'type' => 'list', + 'default' => array('publish' => PUBLISH, 'draft' => DRAFT), + 'userlevel' => USERLEVEL_EDITOR, + 'flags' => array('config')), + )); + + return $res; +?> diff --git a/include/tpl/htaccess_cgi_errordocs.tpl b/include/tpl/htaccess_cgi_errordocs.tpl new file mode 100644 index 0000000..c69a7d1 --- /dev/null +++ b/include/tpl/htaccess_cgi_errordocs.tpl @@ -0,0 +1,21 @@ +# BEGIN s9y +ErrorDocument 404 {PREFIX}{indexFile} +DirectoryIndex {PREFIX}{indexFile} + + + deny from all + + + + deny from all + + + + deny from all + + + + deny from all + + +# END s9y diff --git a/include/tpl/htaccess_cgi_normal.tpl b/include/tpl/htaccess_cgi_normal.tpl new file mode 100644 index 0000000..85a6a75 --- /dev/null +++ b/include/tpl/htaccess_cgi_normal.tpl @@ -0,0 +1,19 @@ +# BEGIN s9y +DirectoryIndex {PREFIX}{indexFile} + + deny from all + + + + deny from all + + + + deny from all + + + + deny from all + + +# END s9y diff --git a/include/tpl/htaccess_cgi_rewrite.tpl b/include/tpl/htaccess_cgi_rewrite.tpl new file mode 100644 index 0000000..b9c4429 --- /dev/null +++ b/include/tpl/htaccess_cgi_rewrite.tpl @@ -0,0 +1,41 @@ +# BEGIN s9y +ErrorDocument 404 {PREFIX}{indexFile} +DirectoryIndex {PREFIX}{indexFile} + +RewriteEngine On +RewriteBase {PREFIX} +RewriteRule ^{PAT_ARCHIVES} {indexFile}?url=/{PATH_ARCHIVES}/$1.html [L,QSA] +RewriteRule ^([0-9]+)[_\-][0-9a-z_\-]*\.html {indexFile}?url=$1-article.html [L,NC,QSA] +RewriteRule ^{PAT_FEEDS}/(.*) {indexFile}?url=/{PATH_FEEDS}/$1 [L,QSA] +RewriteRule ^{PAT_UNSUBSCRIBE} {indexFile}?url=/{PATH_UNSUBSCRIBE}/$1/$2 [L,QSA] +RewriteRule ^{PAT_APPROVE} {indexFile}?url={PATH_APPROVE}/$1/$2/$3 [L,QSA] +RewriteRule ^{PAT_DELETE} {indexFile}?url={PATH_DELETE}/$1/$2/$3 [L,QSA] +RewriteRule ^{PAT_ADMIN} {indexFile}?url={PATH_ADMIN}/ [L,QSA] +RewriteRule ^{PAT_ARCHIVE} {indexFile}?url=/{PATH_ARCHIVE} [L,QSA] +RewriteRule ^{PAT_CATEGORIES} {indexFile}?url=/{PATH_CATEGORIES}/$1 [L,QSA] +RewriteRule ^{PAT_FEED} rss.php?file=$1&ext=$2 +RewriteRule ^{PAT_PLUGIN} {indexFile}?url=plugin/$1 [L,QSA] +RewriteRule ^{PAT_SEARCH} {indexFile}?url=/{PATH_SEARCH}/$1 [L,QSA] +RewriteRule ^{PAT_CSS} {indexFile}?url=/$1 [L,QSA] +RewriteRule ^{PAT_AUTHORS} {indexFile}?url=/{PATH_AUTHORS}/$1 [L,QSA] +RewriteRule ^index\.(html?|php.?) {indexFile}?url=index.html [L,QSA] +RewriteRule ^htmlarea/(.*) htmlarea/$1 [L,QSA] +RewriteRule (.*\.html?) {indexFile}?url=/$1 [L,QSA] + + + deny from all + + + + deny from all + + + + deny from all + + + + deny from all + + +# END s9y diff --git a/include/tpl/htaccess_errordocs.tpl b/include/tpl/htaccess_errordocs.tpl new file mode 100644 index 0000000..7477fb3 --- /dev/null +++ b/include/tpl/htaccess_errordocs.tpl @@ -0,0 +1,23 @@ +# BEGIN s9y +ErrorDocument 404 {PREFIX}{indexFile} +DirectoryIndex {PREFIX}{indexFile} +php_value session.use_trans_sid 0 +php_value register_globals off + + + deny from all + + + + deny from all + + + + deny from all + + + + deny from all + + +# END s9y diff --git a/include/tpl/htaccess_normal.tpl b/include/tpl/htaccess_normal.tpl new file mode 100644 index 0000000..73c3a94 --- /dev/null +++ b/include/tpl/htaccess_normal.tpl @@ -0,0 +1,21 @@ +# BEGIN s9y +DirectoryIndex {PREFIX}{indexFile} +php_value session.use_trans_sid 0 +php_value register_globals off + + deny from all + + + + deny from all + + + + deny from all + + + + deny from all + + +# END s9y diff --git a/include/tpl/htaccess_rewrite.tpl b/include/tpl/htaccess_rewrite.tpl new file mode 100644 index 0000000..26ea1e4 --- /dev/null +++ b/include/tpl/htaccess_rewrite.tpl @@ -0,0 +1,43 @@ +# BEGIN s9y +ErrorDocument 404 {PREFIX}{indexFile} +DirectoryIndex {PREFIX}{indexFile} +php_value session.use_trans_sid 0 +php_value register_globals off + +RewriteEngine On +RewriteBase {PREFIX} +RewriteRule ^{PAT_ARCHIVES} {indexFile}?url=/{PATH_ARCHIVES}/$1.html [L,QSA] +RewriteRule ^([0-9]+)[_\-][0-9a-z_\-]*\.html {indexFile}?url=$1-article.html [L,NC,QSA] +RewriteRule ^{PAT_FEEDS}/(.*) {indexFile}?url=/{PATH_FEEDS}/$1 [L,QSA] +RewriteRule ^{PAT_UNSUBSCRIBE} {indexFile}?url=/{PATH_UNSUBSCRIBE}/$1/$2 [L,QSA] +RewriteRule ^{PAT_APPROVE} {indexFile}?url={PATH_APPROVE}/$1/$2/$3 [L,QSA] +RewriteRule ^{PAT_DELETE} {indexFile}?url={PATH_DELETE}/$1/$2/$3 [L,QSA] +RewriteRule ^{PAT_ADMIN} {indexFile}?url={PATH_ADMIN}/ [L,QSA] +RewriteRule ^{PAT_ARCHIVE} {indexFile}?url=/{PATH_ARCHIVE} [L,QSA] +RewriteRule ^{PAT_CATEGORIES} {indexFile}?url=/{PATH_CATEGORIES}/$1 [L,QSA] +RewriteRule ^{PAT_FEED} rss.php?file=$1&ext=$2 +RewriteRule ^{PAT_PLUGIN} {indexFile}?url=plugin/$1 [L,QSA] +RewriteRule ^{PAT_SEARCH} {indexFile}?url=/{PATH_SEARCH}/$1 [L,QSA] +RewriteRule ^{PAT_CSS} {indexFile}?url=/$1 [L,QSA] +RewriteRule ^{PAT_AUTHORS} {indexFile}?url=/{PATH_AUTHORS}/$1 [L,QSA] +RewriteRule ^index\.(html?|php.?) {indexFile}?url=index.html [L,QSA] +RewriteRule ^htmlarea/(.*) htmlarea/$1 [L,QSA] +RewriteRule (.*\.html?) {indexFile}?url=/$1 [L,QSA] + + + deny from all + + + + deny from all + + + + deny from all + + + + deny from all + + +# END s9y diff --git a/index.php b/index.php new file mode 100644 index 0000000..9b6c3a2 --- /dev/null +++ b/index.php @@ -0,0 +1,312 @@ + $v){ + if ($v == PATH_ARCHIVES) { + continue; + } + if ($v{0} == 'C') { /* category */ + $serendipity['GET']['category'] = substr($v, 1); + unset($_args[$k]); + } elseif ($v{0} == 'W') { /* Week */ + $week = substr($v, 1); + unset($_args[$k]); + } elseif ($v == 'summary') { /* Summary */ + $serendipity['short_archives'] = true; + unset($_args[$k]); + } elseif ($v{0} == 'P') { /* Page */ + $serendipity['GET']['page'] = substr($v, 1); + unset($_args[$k]); + unset($serendipity['uriArguments'][$k]); + } + } + + /* We must always *assume* that Year, Month and Day are the first 3 arguments */ + list(,$year, $month, $day) = $_args; + + $serendipity['GET']['action'] = 'read'; + $serendipity['GET']['hidefooter'] = true; + + if ( !isset($year) ) { + $year = date('Y'); + $month = date('m'); + $day = date('j'); + $serendipity['GET']['action'] = null; + $serendipity['GET']['hidefooter'] = null; + } + + if ($week) { + $tm = strtotime('+ '. ($week-2) .' WEEKS monday', mktime(0, 0, 0, 1, 1, $year)); + $ts = mktime(0, 0, 0, date('m', $tm), date('j', $tm), $year); + $te = mktime(23, 59, 59, date('m', $tm), date('j', $tm)+7, $year); + $date = serendipity_formatTime(WEEK .' '. $week .', %Y', $ts, false); + } else { + if ($day) { + $ts = mktime(0, 0, 0, $month, $day, $year); + $te = mktime(23, 59, 59, $month, $day, $year); + $date = serendipity_formatTime(DATE_FORMAT_ENTRY, $ts, false); + } else { + $ts = mktime(0, 0, 0, $month, 1, $year); + $te = mktime(23, 59, 59, $month, date('t', $ts), $year); + $date = serendipity_formatTime('%B %Y', $ts, $false); + } + } + + $serendipity['range'] = array($ts, $te); + + if ($serendipity['GET']['action'] == 'read') { + $serendipity['head_subtitle'] = sprintf(ENTRIES_FOR, $date); + } + + ob_start(); + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); + $data = ob_get_contents(); + ob_end_clean(); + + if (isset($serendipity['pregenerate']) && $serendipity['pregenerate']) { + $fp = fopen('./'.PATH_ARCHIVES.'/' . $matches[1], 'w'); + fwrite($fp, $data); + fclose($fp); + } + + echo $data; +} else if (preg_match(PAT_COMMENTSUB, $uri, $matches)) { + serendipity_rememberComment(); + + if (!empty($serendipity['POST']['submit'])) { + $comment['url'] = $serendipity['POST']['url']; + $comment['comment'] = trim($serendipity['POST']['comment']); + $comment['name'] = $serendipity['POST']['name']; + $comment['email'] = $serendipity['POST']['email']; + $comment['subscribe'] = $serendipity['POST']['subscribe']; + $comment['parent_id'] = $serendipity['POST']['replyTo']; + if (!empty($comment['comment'])) { + if (serendipity_saveComment($serendipity['POST']['entry_id'], $comment, 'NORMAL')) { + $sc_url = $_SERVER['REQUEST_URI'] . (strstr($_SERVER['REQUEST_URI'], '?') ? '&' : '?') . 'serendipity[csuccess]=' . $serendipity['csuccess']; + if (serendipity_isResponseClean($sc_url)) { + header('Location: ' . $sc_url); + } + exit; + } else { + $serendipity['messagestack']['comments'][] = COMMENT_NOT_ADDED; + } + } else { + $serendipity['messagestack']['comments'][] = sprintf(EMPTY_COMMENT, '', ''); + } + } + + $id = (int)$matches[1]; + + serendipity_track_referrer($id); + $track_referer = false; + + $_GET['serendipity']['action'] = 'read'; + $_GET['serendipity']['id'] = $id; + + $title = serendipity_db_query("SELECT title FROM {$serendipity['dbPrefix']}entries WHERE id=$id", true); + $serendipity['head_title'] = $title[0]; + $serendipity['head_subtitle'] = $serendipity['blogTitle']; + + ob_start(); + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); + $data = ob_get_contents(); + ob_end_clean(); + + if (isset($serendipity['pregenerate']) && $serendipity['pregenerate']) { + $fp = fopen($serendipity['serendipityPath'] . PATH_ARCHIVES.'/' . $id, 'w'); + fwrite($fp, $data); + fclose($fp); + } + print $data; +} elseif (preg_match(PAT_FEEDS, $uri)) { + header('Content-Type: text/html; charset=utf-8'); + + if (preg_match('@/(index|atom|rss|comments|opml)\.(rss[0-9]?|rdf|rss|xml|atom)$@', $uri, $matches)) { + list($_GET['version'], $_GET['type']) = serendipity_discover_rss($matches[1], $matches[2]); + } + + if (preg_match(PAT_FEEDS_CATEGORIES, $uri, $matches)) { + $_GET['category'] = $matches[1]; + } + + ob_start(); + include_once(S9Y_INCLUDE_PATH . 'rss.php'); + $data = ob_get_contents(); + ob_end_clean(); + + if ($serendipity['pregenerate']) { + $fp = fopen($serendipity['serendipityPath'] . PATH_FEEDS.'/index.' . $matches[1], 'w'); + fwrite($fp, $data); + fclose($fp); + } + + serendipity_gzCompression(); + + print $data; + exit; +} else if (preg_match(PAT_ADMIN, $uri)) { + header("Location: {$serendipity['serendipityHTTPPath']}serendipity_admin.php"); + exit; +} else if (preg_match(PAT_ARCHIVE, $uri)) { + $serendipity['GET']['action'] = 'archives'; + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); +} else if (preg_match(PAT_PLUGIN, $uri, $matches)) { + serendipity_plugin_api::hook_event('external_plugin', $matches[1]); + exit; +} else if (preg_match(PAT_CATEGORIES, $uri, $matches)) { + $_args = $serendipity['uriArguments']; + + /* Attempt to locate hidden variables within the URI */ + foreach ($_args as $k => $v){ + if ($v == PATH_CATEGORIES) { + continue; + } + if ($v{0} == 'P') { /* Page */ + $serendipity['GET']['page'] = substr($v, 1); + unset($_args[$k]); + unset($serendipity['uriArguments'][$k]); + } + } + + $serendipity['GET']['category'] = $matches[1]; + $serendipity['GET']['action'] = 'read'; + $cInfo = serendipity_fetchCategoryInfo($serendipity['GET']['category']); + $serendipity['head_title'] = $cInfo['category_name']; + $serendipity['head_subtitle'] = $serendipity['blogTitle']; + + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); +} else if (preg_match(PAT_AUTHORS, $uri, $matches)) { + $serendipity['GET']['viewAuthor'] = $matches[1]; + $serendipity['GET']['action'] = 'read'; + + $uInfo = serendipity_fetchUsers($serendipity['GET']['viewAuthor']); + $serendipity['head_title'] = sprintf(ENTRIES_BY, $uInfo[0]['realname']); + $serendipity['head_subtitle'] = $serendipity['blogTitle']; + + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); +} else if (preg_match(PAT_SEARCH, $uri, $matches)) { + $_args = $serendipity['uriArguments']; + + /* Attempt to locate hidden variables within the URI */ + $search = array(); + foreach ($_args as $k => $v){ + if ($v == PATH_SEARCH) { + continue; + } + + if ($v{0} == 'P') { /* Page */ + $serendipity['GET']['page'] = substr($v, 1); + unset($_args[$k]); + unset($serendipity['uriArguments'][$k]); + } else { + $search[] = $v; + } + } + + $serendipity['GET']['action'] = 'search'; + $serendipity['GET']['searchTerm'] = urldecode(htmlspecialchars(strip_tags(implode(' ', $search)))); + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); +} elseif (preg_match(PAT_CSS, $uri, $matches)) { + $css_mode = $matches[1]; + include_once(S9Y_INCLUDE_PATH . 'serendipity.css.php'); + exit; +} else if (preg_match('@/(index(\.php|\.html)?)|'. preg_quote($serendipity['indexFile']) .'@', $uri) || + preg_match('@^/' . preg_quote(trim($serendipity['serendipityHTTPPath'], '/')) . '/?(\?.*)?$@', $uri)) { + + if ($serendipity['GET']['action'] == 'search') { + $serendipity['uriArguments'] = array(PATH_SEARCH, urlencode($serendipity['GET']['searchTerm'])); + } else { + $serendipity['uriArguments'][] = PATH_ARCHIVES; + } + + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); +} else { + header('HTTP/1.0 404 Not found'); + include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php'); + // printf('
' . DOCUMENT_NOT_FOUND . '
', $uri); +} + +if ($track_referer) { + serendipity_track_referrer(); +} + +$raw_data = ob_get_contents(); +ob_end_clean(); +$serendipity['smarty']->assign('raw_data', $raw_data); +if (empty($serendipity['smarty_file'])) { + $serendipity['smarty_file'] = '404.tpl'; +} + +serendipity_gzCompression(); + +$serendipity['smarty']->display(serendipity_getTemplateFile($serendipity['smarty_file'], 'serendipityPath')); + +if ($global_debug) { + /* TODO: Remove (hide) this debug */ + echo '
Page delivered in '. round(microtime_float()-$time_start,6) .' seconds, '. sizeof(get_included_files()) .' files included
'; + echo ''; +} + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/lang/serendipity_lang_bg.inc.php b/lang/serendipity_lang_bg.inc.php new file mode 100644 index 0000000..4ab01b5 --- /dev/null +++ b/lang/serendipity_lang_bg.inc.php @@ -0,0 +1,655 @@ + +# http://www.purplerain.org/nb/ + +@define('LANG_CHARSET', 'windows-1251'); +@define('DATE_LOCALES', 'bulgarian, bg, bg_BG'); +@define('DATE_FORMAT_ENTRY', '%A, %B %e. %Y'); +@define('WYSIWYG_LANG', 'en'); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Serendipity Àäìèíèñòðàöèÿ'); +@define('HAVE_TO_BE_LOGGED_ON', 'Òðÿáâà äà âçëåçåòå çà äà âèäèòå òàçè ñòðàíèöà:'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Âúâåëè ñòå ãðåøíî èìå èëè ïàðîëà'); +@define('APPEARANCE', 'Appearance'); +@define('MANAGE_STYLES', 'Ïðîìÿíà íà ñòèëà'); +@define('CONFIGURE_PLUGINS', 'Êîíôèãóðàöèÿ íà äîïúëíèòåëíèòå ìîäóëè'); +@define('CONFIGURATION', 'Êîíôèãóðàöèÿ'); +@define('BACK_TO_BLOG', 'Îáðàòíî êúì áëîã-à'); +@define('LOGIN', 'Âõîä'); +@define('LOGOUT', 'Èçõîä'); +@define('LOGGEDOUT', 'Âèå èçëÿçîõòå.'); +@define('CREATE', 'Ñúçäàé'); +@define('SAVE', 'Çàïàçè'); +@define('NAME', 'Èìå'); +@define('CREATE_NEW_CAT', 'Ñúçäàâàíå íà íîâà êàòåãîðèÿ'); +@define('I_WANT_THUMB', 'Èñêàì äà ïîëçâàì òúìáíåéëè â ìîåòî ñúäúðæàíèå.'); +@define('I_WANT_BIG_IMAGE', 'Èñêàì äà ïîëçâà ãîëÿìà êàðòèíêà â ìîåòî ñúäúðæàíèå'); +@define('I_WANT_NO_LINK', ' Èñêàì äà áóäå ïîêàçàíî êàòî êàðòèíêà'); +@define('I_WANT_IT_TO_LINK', 'Èñêàì äà áúäå ïîêàçàíî êàòî êàòî ëèíê êúì òîçè àäðåñ:'); +@define('BACK', 'Íàçàä'); +@define('FORWARD', 'Íàïðåä'); +@define('ANONYMOUS', 'Àíîíèìåí'); +@define('NEW_TRACKBACK_TO', 'Íîâî ïðîñëåäÿâàíå íà'); +@define('NEW_COMMENT_TO', 'Íîâ êîìåíòàð ïúáëèêóâàí îò'); +@define('RECENT', 'Ñåãàøíè...'); +@define('OLDER', 'Ïðåäèøíè...'); +@define('DONE', 'Ãîòîâî'); +@define('WELCOME_BACK', 'Äîáðå äîøúë îòíîâî,'); +@define('TITLE', 'Çàãëàâèå'); +@define('DESCRIPTION', 'Îïèñàíèå'); +@define('PLACEMENT', 'Ïîëîæåíèå'); +@define('DELETE', 'Èçòðèâàíå'); +@define('SAVE', 'Çàïàçâàíå'); +@define('UP', 'Íàãîðå'); +@define('DOWN', 'Íàäîëó'); +@define('ENTRIES', 'Ñúäúðæàíèå:'); +@define('NEW_ENTRY', 'Íîâî'); +@define('EDIT_ENTRIES', 'Ðåäàêöèÿ íà ñúäúðæàíèå'); +@define('CATEGORIES', 'Êàòåãîðèè'); +@define('WARNING_THIS_BLAHBLAH', "Âíèìàíèå!!!:\\n Âúçìîæíî å îïåðàöèÿòà äà ïðîäúëæè ìíîãî âðåìå, àêî èìà ìíîãî èçîáðàæåíèÿ."); +@define('CREATE_THUMBS', 'Íàïðàâè òúìáíåéëè îòíîâî'); +@define('MANAGE_IMAGES', 'Ðåäàêöèÿ íà èçîáðàæåíèÿòà'); +@define('NAME', 'Èìå'); +@define('EMAIL', 'Email'); +@define('HOMEPAGE', 'Ñòðàíèöà â èíòåðíåò'); +@define('COMMENT', 'Êîìåíòàð'); +@define('REMEMBER_INFO', 'Äà çàïîìíÿ ëè äàííèòå? '); +@define('SUBMIT_COMMENT', 'Âúâåäè êîìåíòàð'); +@define('NO_ENTRIES_TO_PRINT', 'Íÿìà äàííè çà ðàçïå÷àòâàíå'); +@define('COMMENTS', 'Êîìåíòàðè'); +@define('ADD_COMMENT', 'Äîáàâè êîìåíòàð'); +@define('NO_COMMENTS', 'Íÿìà êîìåíòàðè'); +@define('POSTED_BY', 'Ïóáëèêóâàíî îò'); +@define('ON', 'íà'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Íîâ êîìåíòàð áåøå ïóáëèêóâàí íà áëîã-à âè "%s", è å îçàãëàâåí : "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Íîâî ïðîñëåäÿâàíå å íàïðàâåíî "%s".'); +@define('NO_CATEGORY', 'Íÿìà êàòåãîðèÿ'); +@define('ENTRY_BODY', 'Âúâåäåòå ñúîáùåíèå'); +@define('EXTENDED_BODY', 'Äîïúëíèòåëíî ñúîáùåíèå'); +@define('CATEGORY', 'Êàòåãîðèÿ:'); +@define('EDIT', 'Ðåäàêöèÿ'); +@define('NO_ENTRIES_BLAHBLAH', 'Íàìà íàìåðåíè ðåçóëòàòè çà %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Òúðñåíåòî çà %s âúðíà %s ðåçóëòàòè:'); +@define('SEARCH_TOO_SHORT', 'Âúâåäåòå ìèíèìóì 3 çíàêà â ïîëåòî çà òúðñåíå'); +@define('IMAGE', 'Èçîáðàæåíèå'); +@define('ERROR_FILE_NOT_EXISTS', 'Ãðåøêà: Ñòàðîòî èìå íå ñúùåñòâóâà!'); +@define('ERROR_FILE_EXISTS', 'Ãðåøêà: Íîâîòî èìå âå÷å ñå èçïîëçâà, èçáåðåòå äðóãî!'); +@define('ERROR_SOMETHING', 'Ãðåøêà: Íåùî å ñãðåøåíî.'); +@define('ADDING_IMAGE', 'Äîáàâÿíå íà èçîáðàæåíèå...'); +@define('THUMB_CREATED_DONE', 'Òúìáíåéëà å ãîòîâ.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Ãðåøêà: Òîçè ôàéë âå÷å ñúøåñòâóâà!'); +@define('GO', 'Äàâàé!'); +@define('NEWSIZE', 'Íîâ ðàçìåð: '); +@define('RESIZE_BLAHBLAH', 'Íîâè ðàçìåðè %s

'); +@define('ORIGINAL_SIZE', 'Îðèãèíàëíè ðàçìåðè: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Òóê ìîæåòå äà ïîñî÷èòå íîåèòå ðàçìåðè íà èçîáðàæåíèÿòà. Àêî èñêàòå äà çàïàçèòå ïðîïîðöèèòå èì,âúâåäåòå ñàìî åäíà ñòîéíîñò è íàòèñíåòå áóòîíà TAB. Àâòîìàòè÷íî ùå ñå ïðåñìåòíå ïðîïîðöèÿòà'); +@define('QUICKSEARCH', 'Òúðñåíå'); +@define('SEARCH_FOR_ENTRY', 'Òúðñè '); +@define('ARCHIVES', 'Àðõèâ'); +@define('BROWSE_ARCHIVES', 'Íàìåðè ñúîáøåíèÿ ïî ìåñåö'); +@define('TOP_REFERRER', 'Òîï ðåôåðåíòè'); +@define('SHOWS_TOP_SITES', 'Ïîêàçâà êîé å èìà âðúçêà êúì ñàéòà âè'); +@define('TOP_EXITS', 'Òîï èçõîäíè ëèíêîâå'); +@define('SHOWS_TOP_EXIT', 'Ïîêàçâà, íà êîè ëèíêîâå íàé-ìíîãî ñå å êëèêàëî îò ñàéòà âè'); +@define('SYNDICATION', 'Ñèíõðîíèçàöèÿ'); +@define('SHOWS_RSS_BLAHBLAH', 'Ïîêàæè RSS ëèíêîâå'); +@define('ADVERTISES_BLAHBLAH', 'Ðåêëàìèðàé ïðîèçõîäà íà ñâîÿ áëîã'); +@define('HTML_NUGGET', 'HTML Ïîëå'); +@define('HOLDS_A_BLAHBLAH', 'Äîáàâè HTML ïîëå â ñâîÿ ñàéò'); +@define('TITLE_FOR_NUGGET', 'Çàãëàâèå íà ïîëåòî'); +@define('THE_NUGGET', 'Ñúäúðæàíèå íà ïîëåòî'); +@define('SYNDICATE_THIS_BLOG', 'Âçåìè íîâèíè îò òîçè áëîã'); +@define('YOU_CHOSE', 'Âèå èçáðàõòå %s'); +@define('IMAGE_SIZE', 'Ãîëåìèíà íà êàðòèíêàòà'); +@define('IMAGE_AS_A_LINK', 'Âúâåæäàíå íà êàðòèíêàòà'); +@define('POWERED_BY', 'Íàïðàâåí îò'); +@define('TRACKBACKS', 'Ïðîñëåäÿâàíèÿ'); +@define('TRACKBACK', 'Ïðîñëåäÿâàíå'); +@define('NO_TRACKBACKS', 'íÿìà ïðîñëåäÿâàíèÿ'); +@define('TOPICS_OF', 'Çàãëàâèÿ íà'); +@define('VIEW_FULL', 'ïîêàæè öÿëàòà'); +@define('VIEW_TOPICS', 'ïîêàæè çàãëàâèÿòà'); +@define('AT', 'íà'); +@define('SET_AS_TEMPLATE', 'Íåêà äà áúäå òåìïëåéò'); +@define('VIEW_EXTENDED_ENTRY', 'Âèæ öÿëîòî ñúäúðæàíèå'); +@define('IN', 'â'); +@define('EXCERPT', 'Excerpt'); +@define('TRACKED', 'Ïðîñëåäåíè'); +@define('LINK_TO_ENTRY', 'Link to entry'); +@define('LINK_TO_REMOTE_ENTRY', 'Âðúçêà êúì âúíøíî ñúäúðæàíèå'); +@define('IP_ADDRESS', 'IP-àäðåñ'); +@define('USER', 'Ïîòðåáèòåë'); +@define('THUMBNAIL_USING_OWN', 'Èçïîëçâàéòå %s êàòî òúìáíåéë, çàøîòî è ñåãà å ñ ìàëêè ðàçìåðè.'); +@define('THUMBNAIL_FAILED_COPY', 'Èñêàòå äà èçïîëçâàòåe %s êàòî òóìáíåéë, íî íå ñòàâà. Íå ìîãà äà ãî êîïèðàì!'); +@define('AUTHOR', 'Àâòîðr'); +@define('LAST_UPDATED', 'Ïîñëåäíî ïðîìåíåí'); +@define('TRACKBACK_SPECIFIC', 'Ïðîñëåäè îïðåäåëåí URI çà òîâà ñúäúðæàíèå'); +@define('DIRECT_LINK', 'Äèðåêòåí ëèíê êúì òîâà ñúäúðæàíèå'); +@define('COMMENT_ADDED', 'Êîìåíòàðà Âè áåøå äîáàâåí óñïåøíî. '); +@define('COMMENT_ADDED_CLICK', 'êëèêíåòå %s òóê çà äà ñå âúðíåòå%s êúì êîìåíòàðà, è òóê %s çà äà çàòâîðèòåe%s òîçè ïðîçîðåö.'); +@define('COMMENT_NOT_ADDED', 'Íå ìîæåòå äà äîáàâèòå êîìåíòàð, çàøîòî ñà çàáðàíåíè êîìåíòàðèòå êúì òîâà ñúäúðæàíèå.'); +@define('COMMENT_NOT_ADDED_CLICK', 'Êëèêíåòå %s òóê çà äà ñå âúðíåòå%s êúì êîìåíòàðà, è òóê %s çà äà çàòâîðèòåe%s òîçè ïðîçîðåö.'); +@define('COMMENTS_DISABLE', 'Çàáðàíåòå êîìåíòàðèòå êúì òàçè ñòàòèÿ'); +@define('COMMENTS_ENABLE', 'Ðàçðåøåòå êîìåíòàðèòå êúì òàçè ñòàòèÿ'); +@define('COMMENTS_CLOSED', 'Àâòîðà å çàáðàíèë êîìåíòàðèòå êúì ñòàòèÿòà'); +@define('EMPTY_COMMENT', 'Êîìåíòàðúò Âè íå ñúäúðæà íèùî, ìîëÿ âúðíåòå ñå%s %s è ïðîáâàéòå îòíîâî'); +@define('ENTRIES_FOR', 'Ñúäúðæàíèå çà %s'); +@define('DOCUMENT_NOT_FOUND', 'Äîêóìåíòà %s íå å íàìåðåí.'); +@define('USERNAME', 'Ïîòðåáèòåë'); +@define('PASSWORD', 'Ïàðîëà'); +@define('AUTOMATIC_LOGIN', 'Çàïàçè èíôîðìàöèÿòà.'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity èíñòàëèðàíå'); +@define('LEFT', 'ëÿâî'); +@define('RIGHT', 'äÿñíî'); +@define('HIDDEN', 'ñêðèòî'); +@define('REMOVE_TICKED_PLUGINS', 'Ìàõíè îòáåëÿçàíèòå ìîäóëè'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Ñúõðàíè ïðîìåíèòå'); +@define('COMMENTS_FROM', 'Êîìåíòàðè îò'); +@define('ERROR', 'Ãðåøêà'); +@define('ENTRY_SAVED', 'Çàïàçåíî å'); +@define('DELETE_SURE', 'Ñèãóðåí ëè ñòå,÷å èñêàòå äà èçòðèåòå #%s çàâèíàãè?'); +@define('NOT_REALLY', 'Íå ñúâñåì...'); +@define('DUMP_IT', 'Äàâàé it!'); +@define('RIP_ENTRY', 'Ïî÷åâàé â ìèð, íîìåð #%s'); +@define('CATEGORY_DELETED', 'ÊÀòåãîðèÿòà #%s å èçòðèòà. Ñòàòèèòå ñà ïðåìåñòåíè êúì êàòåãîðèÿ #%s'); +@define('INVALID_CATEGORY', 'Íÿìà êàòåãîðèÿ çà èçòðèâàíå'); +@define('CATEGORY_SAVED', 'ÊÀòåãîðèÿòà å çàïàçåíà'); +@define('SELECT_TEMPLATE', 'ÈÇáåðåòå âúíøíèÿ âèä íà áëîã-à ñè'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Ñúäúðæàíèåòî íå áåïå ïóáëèêóâàíî!'); +@define('YES', 'Äà'); +@define('NO', 'Íå'); +@define('CHECK_N_SAVE', 'Èçáåðè & Çàïàçè'); +@define('DIRECTORY_WRITE_ERROR', 'Íå ìîãà äà ïèøà â ïàïêà: %s. Ïðîâåðè äàëè ìîæå äà ñå ïèøå òàì.'); +@define('DIRECTORY_CREATE_ERROR', 'Ïàïêàòà %s íå ñúøåñòâóâà è íå ìîæå äà áúäå ñúçäàäåíà.Ñúçäàéòå ÿ ðú÷íî !!!'); +@define('DIRECTORY_RUN_CMD', ' -> èçïúëíåòå òàçè êîìàíäà: %s %s'); +@define('CANT_EXECUTE_BINARY', 'Íå ìîãà äà èçïúëíÿ òîâà %s '); +@define('FILE_WRITE_ERROR', 'Íå ìîãà äà ïèøà â òîçè ôàéë %s.'); +@define('FILE_CREATE_YOURSELF', 'Ìîëÿ ñúçäàéòå ôàéëà ñàìè è ïðîâåðåòå äàëè ìîæå äà ñå ïèøå â íåãî'); +@define('COPY_CODE_BELOW', '
* Ñàìî êîïèðàéòå êîäà è ãî ñëîæåòå â %s â ïàïêà %s

%s
' . "\n"); +@define('WWW_USER', 'Ïðîìåíåòå www íà ïîòðåáèòåë apache äà ñå èçïóëíÿâà êàòî nobody.'); +@define('BROWSER_RELOAD', 'Êàòî íàïðàâèòå òîâà, íàòèñíåòå "reload" áóòîíà.'); +@define('DIAGNOSTIC_ERROR', 'Çàñÿêîõìå íÿêîëêî ãðåøêè ïðè âúâåäåíàòà èíôîðìàöèÿ îò Âàñ:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity îøå íå å èíñòàëèðàíà. ìîëÿ êëèíåòå íà òîçè ëèíê.'); +@define('INCLUDE_ERROR', 'serendipity ãðåøêà: íå ìîãà äà âìúêíà òîçè ôàéë %s - èçëèçàì.'); +@define('DATABASE_ERROR', 'serendipity ãðåøêà: íå ìîãà äà ñå ñâúðæà ñ áàçàòà äàííè - èçëèçàì.'); +@define('CREATE_DATABASE', 'Ñúçäàâàì áàçàòà äàííè...'); +@define('ATTEMPT_WRITE_FILE', 'Ïðîáâàì äà ïèøà âúâ ôàéë %s ...'); +@define('WRITTEN_N_SAVED', 'Êîíôèãóðàöèÿòà å çàïèñàíà'); +@define('IMAGE_ALIGNMENT', 'Ïîëîæåíèå íà èçîáðàæåíèåòî'); +@define('ENTER_NEW_NAME', 'Âúâåäåòå èìå çà: '); +@define('RESIZING', 'Ïðîìåíÿíå íà ðàçìåðèòå'); +@define('RESIZE_DONE', 'Ãîòîâî (ïðîìåíåíè %s êàðòèíêè).'); +@define('SYNCING', 'Ñèíõðîíèçèðàíå íà áàçàòà äàííè ñ ïàïêàòà ñ êàðòèíêèòå'); +@define('SYNC_DONE', 'Ãîòîâî (ñèíõðîíèçèðàíè %s êàðòèíêè).'); +@define('DELETE_IMAGE_FAIL' , 'Íå ìîãà äà èçòðèÿ èçîáðàæåíèå %s'); +@define('DELETE_THUMBNAIL', 'Èçòðèâàíå íà òúìáíåéë %s'); +@define('FILE_NOT_FOUND', 'Íå ìîãà äà íàìåðÿ ôàéëà %s, ìîæå áè âå÷å å èçòðèò?'); +@define('ABORT_NOW', 'Ñïðåòå äåéñòâèåòî ñåãà'); +@define('REMOTE_FILE_NOT_FOUND', 'Ôàéëà íå å íàìåðåí íà îòäàëå÷åíèÿ ñúðâúð, ñèãóðåí ëè ñòå ÷ð àäðåñà: %s å âåðåí?'); +@define('FILE_FETCHED', '%s èçòåãëåí êàòî %s'); +@define('FILE_UPLOADED', 'Ôàéëà %s å óñïåøíî êà÷åí êàòî %s'); +@define('WORD_OR', 'Èëè'); +@define('SCALING_IMAGE', 'Ïðîìåíÿì %s äî %s x %s px'); +@define('KEEP_PROPORTIONS', 'Çàïàçåòå ïðîìîðöèèòå'); +@define('REALLY_SCALE_IMAGE', 'Ñèãóðíè ëè ñòå? Íàìà âðúøàíå íàçàä!'); +@define('TOGGLE_ALL', 'Ïîêàæè âñè÷êè'); +@define('TOGGLE_OPTION', 'Toggle'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Çàïèøåòå ñå çà òîçè ìàòåðèàë'); +@define('UNSUBSCRIBE_OK', "%s å îòèñàí îò òîçè ìàòåðèàë"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Íîâ êîìåíòàð: "%s"'); +@define('SUBSCRIPTION_MAIL', "Çäðàâåé %s,\n\nÍîâ êîìåíòàð å íàïðàâåí ïî ìàòåðèàëà êîéòî ñëåäèòå \"%s\", îçàãëàâåí \"%s\"\nÈìåòî íà òîçè, êîéòî å ïóáëèêóâàë å: %s\n\nÌîæåòå äà íàìåðèòå ñúäúðæàíèåòî òóê: %s\n\nÌîæåòå äà ñå îòïèøåòå, êëèêâàéêè íà òîçè ëèíê %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Çäðàâåé %s,\n\nÍîâ êîìåíòàð å íàïðàâåí ïî ìàòåðèàëà êîéòî ñëåäèòå \"%s\", îçàãëàâåí \"%s\"\nÈìåòî íà òîçè, êîéòî å ïóáëèêóâàë å: %s\n\nÌîæåòå äà íàìåðèòå ñúäúðæàíèåòî òóê: %s\n\nÌîæåòå äà ñå îòïèøåòå, êëèêâàéêè íà òîçè ëèíê %s\n"); +@define('SIGNATURE', "\n-- \n%s is íàïðàâåí îò Serendipity.\nÍàé-äîáðèÿò áëîã.\nÌîæåòå äà ñè ãî ñâàëèòå îò òóê ."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 '); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 '); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 '); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 êîìåíòàðè'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Ïîëå "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Ïîëå "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Êàðòèíêà çà RSS êàíàëà'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Äúëæèíà íà êàðòèíêàòà'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Âèñî÷èíà íà êàðòèíêàòà'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-Mail àäðåñà íà óåá ìàéñòîðà (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-Mail àäðåñà íà òîçè êîéòî ïèøå ñúäúðæàíèå. (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL í àêàðòèíêà(GIF/JPEG/PNG) (empty: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'â ïèêñåëè, ìàêñ. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'â ïèêñåëè, ìàêñ. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Ïîëå "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Ñëåä êîëêî ìèíóòè áëîãà Âè äà áúäå êåøèðàí (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Ïîëå "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Òðÿáâà ëè äà èìà è ïîëå "pubDate"?'); +@define('CONTENT', 'Ñúäúðæàíèå'); +@define('TYPE', 'Tèï'); +@define('DRAFT', 'Draft'); +@define('PUBLISH', 'Ïóáëèêóâàé'); +@define('PREVIEW', 'Ïðåãëåäàé'); +@define('DATE', 'Data'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Âíèìàíèå: Ïîñî÷åíàòà äàòà íå å âàëèäíàd. Òðÿáâà äà å â ñëåäíèÿ ôîðìàò YYYY-MM-DD HH:MM '); +@define('CATEGORY_PLUGIN_DESC', 'Ïîêàçè ñïèñúêà íà êàòåãîðèèòå.'); +@define('ALL_AUTHORS', 'Âñè÷êè àâòîðè'); +@define('CATEGORIES_TO_FETCH', 'Êàòåãîðèè çà èçâëè÷àíå'); +@define('CATEGORIES_TO_FETCH_DESC', 'Èçâëå÷è êàòåãîðèèòå çà âñåêè àâòîð?'); +@define('PREVIOUS_PAGE', 'ïðåäèøíà ñòðàíèöà'); +@define('NEXT_PAGE', 'ñëåäâàøà ñòðàíèöà'); +@define('ALL_CATEGORIES', 'Âñè÷êè êàòåãîðèè'); +@define('DO_MARKUP', 'Ïðåìèíè êúì òðàíñôîðìàöèÿ'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Ôîðìàòèðàíå íà äàòàòà'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Ôîðìàòà íà äàòàòà íà ñúäúðæàíèåòî å íàïðàâåíî ïîñðåäñòâîì ôóíêöèÿòà íà PHP strftime() (Default: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Íå ìîãà äà îòâîðÿ ôàéëà ñ òåìïëåéòèòå, ìîëÿ ñâàëåòå ñè ïîñëåäíàòà âåðñèÿ íà serendipity!'); +@define('ADVANCED_OPTIONS', 'Advanced âúçìîæíîñòè'); +@define('EDIT_ENTRY', 'Ðåäàêòèðàé'); +@define('HTACCESS_ERROR', 'Çà äà ïðîâåðè ñúðâúðà âè, serendipity òðÿáâà äà ìîæå äà ïèøå âúâ ôàéëà ".htaccess". Òîâà íå å âúçìîæíî,ìîëÿ ïðîìåíåòå ïðàâàòà çà ïèñàíå âúðõó òîçè ôàéë ì åòî òàêà
  %s
è ïðåçàðåäåòå ñòðàíèöàòà.'); +@define('SIDEBAR_PLUGINS', 'Ñòðàíè÷íè ìîäóëè'); +@define('EVENT_PLUGINS', 'Ìîäóëè çà ñúáèòèÿ'); +@define('SORT_ORDER', 'Ñîðòèðàíå ïî'); +@define('SORT_ORDER_NAME', 'Èìå íà ôàéë'); +@define('SORT_ORDER_EXTENSION', 'Ðàçøèðåíèå'); +@define('SORT_ORDER_SIZE', 'Ãîëåìèíà íà ôàéëà'); +@define('SORT_ORDER_WIDTH', 'Äúëæèíà íà èçîáðàæåíèåòî'); +@define('SORT_ORDER_HEIGHT', 'Âèñî÷èíà íà èçîáðàæåíèåòî'); +@define('SORT_ORDER_DATE', 'Äàòà íà êà÷âàíå'); +@define('SORT_ORDER_ASC', 'Íàìàëÿâàù'); +@define('SORT_ORDER_DESC', 'Óâåëè÷àâàø'); +@define('THUMBNAIL_SHORT', 'Òóìáíåéë'); +@define('ORIGINAL_SHORT', 'Îðèãèíàëåí.'); +@define('APPLY_MARKUP_TO', 'Ïðèëîæè äåéñòâèåòî íà %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Íà÷àëî íà ñåäìèöàòà'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity ðàçáðà ,÷å âàïàòà êîíôèãèðàöèÿ å çà âåðñèÿ %s, ìîëÿ âçåìåòå íîâà âåðñèÿ îò òóê: Click here'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Çäðàâåéòå, è äîáðå äîøëè â ïðîãðàìàòà çà àêòóàëèçàöèÿ.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Àç ñúì òóê çà äà àêòóàëèçèðàì Serendipity %s.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Âèå âèæäàòå òîâà ñúîáùåíèå çàùîòî òîêó ùî èíñòàëèðàõòå Serendipity %s, íî íÿìàòå îùå àêòóàëèçàöèÿ íà áàçàòà äàííè'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Àêòóàëèçàöèÿ íà áàçàòà äàííè (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Íàìåðèõìå ñëåäíèòå .sql ôàéëîâå, êîéòî Âèå òðÿáâà äà èçïúëíèòå çà äà ìîæå èíñòàëàöèÿòà äà ïðîäúëæè'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'ñïåöèôè÷íè îïåðàöèè çà òàçè âåðñèÿ'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Íÿìà íàìåðåíè òàêèâà'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Èñêàòå ëè äà ïðåäïðèåìåòå òèçå äåéñòâèÿ?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Íå, ùå ñè ãè íàïðàâÿ ðú÷íî'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Äà'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Èçãëåæäà íÿìà íóæäà îò àêòóàëèçàöèÿ íà âåðñèÿòà'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity å àêòóàëèçèðàí'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Âèå ïðåíåáðåãíàõòå àêòóàëèçàöèîííàòà ïðîãðàìà , ìîëÿ óâåðåòå ñå ÷å èìàòå âñè÷êè ïðîìåíè ïðåäè äà ïðèñòúïèòå êúì ðàáîòà'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Serendipity ñåãà âå÷å å âåðñèÿ %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Ìîæåòå äà ñå âúðíåòå êúì áëîãà Âè êàòî êëèêíåòå %sòóê%s'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'No Trackback sent: Could not open connection to %s on port %d'); // Translate +@define('MEDIA', 'Media'); // Translate +@define('MEDIA_LIBRARY', 'Media library'); // Translate +@define('ADD_MEDIA', 'Add media'); // Translate +@define('ENTER_MEDIA_URL', 'Enter an URL of a file to fetch:'); // Translate +@define('ENTER_MEDIA_UPLOAD', 'Select a file you wish to upload:'); // Translate +@define('SAVE_FILE_AS', 'Save the file as:'); // Translate +@define('STORE_IN_DIRECTORY', 'Store inside the following directory: '); // Translate +@define('MEDIA_RENAME', 'Rename this file'); // Translate +@define('IMAGE_RESIZE', 'Resize this image'); // Translate +@define('MEDIA_DELETE', 'Delete this file'); // Translate +@define('FILES_PER_PAGE', 'Files per page'); // Translate +@define('CLICK_FILE_TO_INSERT', 'Click the file you want to insert:'); // Translate +@define('SELECT_FILE', 'Select file to insert'); // Translate +@define('MEDIA_FULLSIZE', 'Fullsize'); // Translate +@define('CALENDAR_BOW_DESC', 'The day of the week that should be considered the beginning of the week. Default is Monday'); // Translate +@define('SUPERUSER', 'Blog Administration'); // Translate +@define('ALLOWS_YOU_BLAHBLAH', 'Provides a link in the sidebar to your blog administration'); // Translate +@define('CALENDAR', 'Calendar'); // Translate +@define('QUICKJUMP_CALENDAR', 'A calendar to navigate in your blog'); // Translate +@define('SUPERUSER_OPEN_ADMIN', 'Open administration'); // Translate +@define('SUPERUSER_OPEN_LOGIN', 'Open login screen'); // Translate +@define('INVERT_SELECTIONS', 'Invert Selections'); // Translate +@define('COMMENTS_DELETE_CONFIRM', 'Are you sure you wish to delete the selected comments?'); // Translate +@define('COMMENT_DELETE_CONFIRM', 'Are you sure you wish to delete comment #%d, written by %s?'); // Translate +@define('DELETE_SELECTED_COMMENTS', 'Delete selected comments'); // Translate +@define('VIEW_COMMENT', 'View comment'); // Translate +@define('VIEW_ENTRY', 'View entry'); // Translate +@define('DELETE_FILE', 'Deleted the file entitled %s'); // Translate +@define('ABOUT_TO_DELETE_FILE', 'You are about to delete %s
If you are using this file in some of your entries, it will cause dead links or images
Are you sure you wish to proceed?

'); // Translate +@define('TRACKBACK_SENDING', 'Sending trackback to URI %s...'); // Translate +@define('TRACKBACK_SENT', 'Trackback successful'); // Translate +@define('TRACKBACK_FAILED', 'Trackback failed: %s'); // Translate +@define('TRACKBACK_NOT_FOUND', 'No trackback-URI found.'); // Translate +@define('TRACKBACK_URI_MISMATCH', 'The autodiscovered trackback URI does not match our target URI.'); // Translate +@define('TRACKBACK_CHECKING', 'Checking %s for possible trackbacks...'); // Translate +@define('TRACKBACK_NO_DATA', 'Target contained no data'); // Translate +@define('TRACKBACK_SIZE', 'Target URI exceeded maximum filesize of %s bytes.'); // Translate +@define('VIEWMODE_THREADED', 'Switch to threaded view'); // Translate +@define('COMMENTS_VIEWMODE_THREADED', 'Threaded'); // Translate +@define('COMMENTS_VIEWMODE_LINEAR', 'Linear'); // Translate +@define('DISPLAY_COMMENTS_AS', 'Display comments as'); // Translate +@define('DATE_FORMAT_SHORT', '%Y-%m-%d %H:%M'); // Translate +@define('NUMBER_FORMAT_DECIMALS', '2'); // Translate +@define('NUMBER_FORMAT_DECPOINT', '.'); // Translate +@define('NUMBER_FORMAT_THOUSANDS', ','); // Translate +@define('ERROR_UNKNOWN_NOUPLOAD', 'Unknown error occured, file not uploaded. Maybe your filesize is larger than the maximum size allowed by your server installation. Check with your ISP or edit your php.ini file to allow larger file size uploads.'); // Translate +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Category #%s deleted. Old articles moved to category #%s'); // Translate +@define('USE_DEFAULT', 'Default'); // Translate +@define('PAGE_BROWSE_ENTRIES', 'Page %s of %s, totalling %s entries'); // Translate +@define('MANAGE_USERS', 'Manage users'); // Translate +@define('CREATE_NEW_USER', 'Create new user'); // Translate +@define('CREATE_NOT_AUTHORIZED', 'You cannot modify users with the same userlevel as yourself'); // Translate +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'You cannot create users with a higher userlevel than yourself'); // Translate +@define('CREATED_USER', 'A new user %s has been created'); // Translate +@define('MODIFIED_USER', 'The properties of user %s have been changed'); // Translate +@define('USER_LEVEL', 'Userlevel'); // Translate +@define('DELETE_USER', 'You are about to delete user #%d %s. Are you serious? This will disallow showing any entries written by him on the frontend.'); // Translate +@define('DELETED_USER', 'User #%d %s deleted.'); // Translate +@define('LIMIT_TO_NUMBER', 'How many items should be displayed?'); // Translate +@define('ENTRIES_PER_PAGE', 'entries per page'); // Translate +@define('XML_IMAGE_TO_DISPLAY', 'XML Button'); // Translate +@define('DIRECTORIES_AVAILABLE', 'In the list of available subdirectories you can click on any directory name to create a new directory within that structure.'); // Translate +@define('ALL_DIRECTORIES', 'all directories'); // Translate +@define('MANAGE_DIRECTORIES', 'Manage directories'); // Translate +@define('DIRECTORY_CREATED', 'Directory %s has been created.'); // Translate +@define('PARENT_DIRECTORY', 'Parent directory'); // Translate +@define('CONFIRM_DELETE_DIRECTORY', 'Are you sure you want to remove all the contents of directory %s?'); // Translate +@define('ERROR_NO_DIRECTORY', 'Error: Directory %s does not exist'); // Translate +@define('CHECKING_DIRECTORY', 'Checking files in directory %s'); // Translate +@define('DELETING_FILE', 'Deleting file %s...'); // Translate +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Could not remove non-empty directory. Check the "force deletion" checkbox if you want to remove those files as well, and then submit again. Existing files are:'); // Translate +@define('DIRECTORY_DELETE_FAILED', 'Deletion of directory %s failed. Check permissions or messages above.'); // Translate +@define('DIRECTORY_DELETE_SUCCESS', 'Directory %s successfully deleted.'); // Translate +@define('SKIPPING_FILE_EXTENSION', 'Skipping file: Missing extension on %s.'); // Translate +@define('SKIPPING_FILE_UNREADABLE', 'Skipping file: %s not readable.'); // Translate +@define('FOUND_FILE', 'Found new/modified file: %s.'); // Translate +@define('ALREADY_SUBCATEGORY', '%s is a already a subcategory of %s.'); // Translate +@define('PARENT_CATEGORY', 'Parent category'); // Translate +@define('IN_REPLY_TO', 'In reply to'); // Translate +@define('TOP_LEVEL', 'Top level'); // Translate +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); // Translate +@define('PERMISSIONS', 'Permissions'); // Translate +@define('SETTINGS_SAVED_AT', 'The new settings have been saved at %s'); // Translate +@define('INSTALL_CAT_DB', 'Database settings'); // Translate +@define('INSTALL_CAT_DB_DESC', 'Here you can enter all your database information. Serendipity needs this to be able to function'); // Translate +@define('INSTALL_DBTYPE', 'Database type'); // Translate +@define('INSTALL_DBTYPE_DESC', 'Database type'); // Translate +@define('INSTALL_DBHOST', 'Database host'); // Translate +@define('INSTALL_DBHOST_DESC', 'The hostname for your database server'); // Translate +@define('INSTALL_DBUSER', 'Database user'); // Translate +@define('INSTALL_DBUSER_DESC', 'The username used to connect to your database'); // Translate +@define('INSTALL_DBPASS', 'Database password'); // Translate +@define('INSTALL_DBPASS_DESC', 'The password matching the above username'); // Translate +@define('INSTALL_DBNAME', 'Database name'); // Translate +@define('INSTALL_DBNAME_DESC', 'The name of your database'); // Translate +@define('INSTALL_DBPREFIX', 'Database table prefix'); // Translate +@define('INSTALL_DBPREFIX_DESC', 'Prefix for the table names, i.e. serendipity_'); // Translate +@define('INSTALL_CAT_PATHS', 'Paths'); // Translate +@define('INSTALL_CAT_PATHS_DESC', 'Various paths to different essential folders and files. Don\'t forget trailing slashes for directories!'); // Translate +@define('INSTALL_FULLPATH', 'Full path'); // Translate +@define('INSTALL_FULLPATH_DESC', 'The full and absolute path to your serendipity installation'); // Translate +@define('INSTALL_UPLOADPATH', 'Upload path'); // Translate +@define('INSTALL_UPLOADPATH_DESC', 'All uploads will go here, relative to the \'Full path\' - typically \'uploads/\''); // Translate +@define('INSTALL_RELPATH', 'Relative path'); // Translate +@define('INSTALL_RELPATH_DESC', 'Path to serendipity for your browser, typically \'/serendipity/\''); // Translate +@define('INSTALL_RELTEMPLPATH', 'Relative template path'); // Translate +@define('INSTALL_RELTEMPLPATH_DESC', 'The path to the folder containing your templates - Relative to the \'relative path\''); // Translate +@define('INSTALL_RELUPLOADPATH', 'Relative upload path'); // Translate +@define('INSTALL_RELUPLOADPATH_DESC', 'Path to your uploads for browsers - Relative to the \'relative path\''); // Translate +@define('INSTALL_URL', 'URL to blog'); // Translate +@define('INSTALL_URL_DESC', 'Base URL to your serendipity installation'); // Translate +@define('INSTALL_INDEXFILE', 'Index file'); // Translate +@define('INSTALL_INDEXFILE_DESC', 'The name of your serendipity index file'); // Translate +@define('INSTALL_CAT_SETTINGS', 'General settings'); // Translate +@define('INSTALL_CAT_SETTINGS_DESC', 'Customize how Serendipity behaves'); // Translate +@define('INSTALL_USERNAME', 'Admin username'); // Translate +@define('INSTALL_USERNAME_DESC', 'Username for admin login'); // Translate +@define('INSTALL_PASSWORD', 'Admin password'); // Translate +@define('INSTALL_PASSWORD_DESC', 'Password for admin login'); // Translate +@define('INSTALL_EMAIL', 'Admin email'); // Translate +@define('INSTALL_EMAIL_DESC', 'Email for the blog administrator'); // Translate +@define('INSTALL_SENDMAIL', 'Send mails to admin?'); // Translate +@define('INSTALL_SENDMAIL_DESC', 'Do you want to receive emails when comments are posted to your entries?'); // Translate +@define('INSTALL_SUBSCRIBE', 'Allow users to subscribe to entries?'); // Translate +@define('INSTALL_SUBSCRIBE_DESC', 'Allow users to subscribe to an entry and thereby receive a mail when new comments are made to that entry'); // Translate +@define('INSTALL_BLOGNAME', 'Blog name'); // Translate +@define('INSTALL_BLOGNAME_DESC', 'The title of your blog'); // Translate +@define('INSTALL_BLOGDESC', 'Blog description'); // Translate +@define('INSTALL_BLOGDESC_DESC', 'Description of your blog'); // Translate +@define('INSTALL_LANG', 'Language'); // Translate +@define('INSTALL_LANG_DESC', 'Select the language for your blog'); // Translate +@define('INSTALL_CAT_DISPLAY', 'Appearance and options'); // Translate +@define('INSTALL_CAT_DISPLAY_DESC', 'Customize how Serendipity looks and feels'); // Translate +@define('INSTALL_WYSIWYG', 'Use WYSIWYG editor'); // Translate +@define('INSTALL_WYSIWYG_DESC', 'Do you want to use the WYSIWYG editor? (Works on IE5+, partially in Mozilla 1.3+)'); // Translate +@define('INSTALL_POPUP', 'Enable use of popup windows'); // Translate +@define('INSTALL_POPUP_DESC', 'Do you want to use popup windows for comments, trackbacks et al?'); // Translate +@define('INSTALL_EMBED', 'Is serendipity embedded?'); // Translate +@define('INSTALL_EMBED_DESC', 'If you want to embed serendipity within a regular page, set to true to discard any headers and just print the contents. You can make use of the indexFile option to use a wrapper class where you put your normal webpage headers. See the README file for more information!'); // Translate +@define('INSTALL_TOP_AS_LINKS', 'Show Top Exits/Referrers as links?'); // Translate +@define('INSTALL_TOP_AS_LINKS_DESC', '"no": Exits and Referrers are shown as plain text to prevent google spam. "yes": Exits and Referrers are shown as hyperlinks. "default": Use setting from global configuration (recommended).'); // Translate +@define('INSTALL_BLOCKREF', 'Blocked Referers'); // Translate +@define('INSTALL_BLOCKREF_DESC', 'Are there any special hosts you want not to show up in the referers list? Separate the list of hostnames with \';\' and note that the host is blocked by substring matches!'); // Translate +@define('INSTALL_REWRITE', 'URL Rewriting'); // Translate +@define('INSTALL_REWRITE_DESC', 'Select which rules you wish to use when generating URLs. Enabling rewrite rules will make pretty URLs for your blog and make it better indexable for spiders like google. The webserver needs to support either mod_rewrite or "AllowOverride All" for your serendipity dir. The default setting is auto-detected'); // Translate +@define('INSTALL_CAT_IMAGECONV', 'Imageconversion Settings'); // Translate +@define('INSTALL_CAT_IMAGECONV_DESC', 'Enter general information about how serendipity should handle Images'); // Translate +@define('INSTALL_IMAGEMAGICK', 'Use Imagemagick'); // Translate +@define('INSTALL_IMAGEMAGICK_DESC', 'Do you have image magick installed and want to use it to resize images?'); // Translate +@define('INSTALL_IMAGEMAGICKPATH', 'Path to convert binary'); // Translate +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Full path & name of your image magick convert binary'); // Translate +@define('INSTALL_THUMBSUFFIX', 'Thumbnail suffix'); // Translate +@define('INSTALL_THUMBSUFFIX_DESC', 'Thumbnails will be named with the following format: original.[suffix].ext'); // Translate +@define('INSTALL_THUMBWIDTH', 'Thumbnail dimensions'); // Translate +@define('INSTALL_THUMBWIDTH_DESC', 'Static maximum width of auto-generated thumbnails'); // Translate +@define('USERCONF_CAT_PERSONAL', 'Your personal details'); // Translate +@define('USERCONF_CAT_PERSONAL_DESC', 'Change your personal details'); // Translate +@define('USERCONF_USERNAME', 'Your username'); // Translate +@define('USERCONF_USERNAME_DESC', 'The username you use to log in to the blog'); // Translate +@define('USERCONF_PASSWORD', 'Your password'); // Translate +@define('USERCONF_PASSWORD_DESC', 'The password you wish to use to log in to the blog'); // Translate +@define('USERCONF_EMAIL', 'Your e-mail address'); // Translate +@define('USERCONF_EMAIL_DESC', 'Your personal e-mail address'); // Translate +@define('USERCONF_SENDCOMMENTS', 'Send comment announcements?'); // Translate +@define('USERCONF_SENDCOMMENTS_DESC', 'Do you want to receive emails when comments are posted to your entries?'); // Translate +@define('USERCONF_SENDTRACKBACKS', 'Send trackback announcements?'); // Translate +@define('USERCONF_SENDTRACKBACKS_DESC', 'Do you want to receive emails when trackbacks are posted to your entries?'); // Translate +@define('USERCONF_ALLOWPUBLISH', 'Rights: Publishing entries?'); // Translate +@define('USERCONF_ALLOWPUBLISH_DESC', 'Is this user allowed to publish entries?'); // Translate +@define('SUCCESS', 'Success'); // Translate +@define('POWERED_BY_SHOW_TEXT', 'Show "Serendipity" as text'); // Translate +@define('POWERED_BY_SHOW_TEXT_DESC', 'Will display "Serendipity Weblog" as text'); // Translate +@define('POWERED_BY_SHOW_IMAGE', 'Show "Serendipity" with a logo'); // Translate +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Displays the Serendipity logo'); // Translate +@define('PLUGIN_ITEM_DISPLAY', 'Where should the item be displayed?'); // Translate +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Extended entry only'); // Translate +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Overview page only'); // Translate +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'All times'); // Translate +@define('RSS_IMPORT_CATEGORY', 'Use this category for non-matching imported entries'); // Translate +@define('COMMENTS_WILL_BE_MODERATED', 'Submitted comments will be subject to moderation before being displayed.'); // Translate +@define('YOU_HAVE_THESE_OPTIONS', 'You have the following options available:'); // Translate +@define('THIS_COMMENT_NEEDS_REVIEW', 'Warning: This comment needs approval before it will be displayed'); // Translate +@define('DELETE_COMMENT', 'Delete comment'); // Translate +@define('APPROVE_COMMENT', 'Approve comment'); // Translate +@define('REQUIRES_REVIEW', 'Requires review'); // Translate +@define('COMMENT_APPROVED', 'Comment #%s has successfully been approved'); // Translate +@define('COMMENT_DELETED', 'Comment #%s has successfully been deleted'); // Translate +@define('COMMENTS_MODERATE', 'Comments & trackbacks to this entry requires moderation'); // Translate +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Warning: This trackback needs approval before it will be displayed'); // Translate +@define('DELETE_TRACKBACK', 'Delete trackback'); // Translate +@define('APPROVE_TRACKBACK', 'Approve trackback'); // Translate +@define('TRACKBACK_APPROVED', 'Trackback #%s has successfully been approved'); // Translate +@define('TRACKBACK_DELETED', 'Trackback #%s has successfully been deleted'); // Translate +@define('VIEW', 'View'); // Translate +@define('COMMENT_ALREADY_APPROVED', 'Comment #%s appears to already have been approved'); // Translate +@define('COMMENT_EDITED', 'The selected comment has been edited'); // Translate +@define('HIDE', 'Hide'); // Translate +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'This link is not meant to be clicked. It contains the trackback URI for this entry. You can use this URI to send ping- & trackbacks from your own blog to this entry. To copy the link, right click and select "Copy Shortcut" in Internet Explorer or "Copy Link Location" in Mozilla.'); // Translate +@define('PLUGIN_SUPERUSER_HTTPS', 'Use https for login'); // Translate +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Lets the login-link point to a https-location. Your webserver needs to support this!'); // Translate +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Make external links clickable?'); // Translate +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": Unchecked external links (Top Exits, Top Referrers, User comments) are not shown/shown as plain text where applicable to prevent google spam (recommended). "yes": Unchecked external links are shown as hyperlinks. Can be overridden within sidebar plugin configuration!'); // Translate +@define('PAGE_BROWSE_COMMENTS', 'Page %s of %s, totalling %s comments'); // Translate +@define('FILTERS', 'Filters'); // Translate +@define('FIND_ENTRIES', 'Find entries'); // Translate +@define('FIND_COMMENTS', 'Find comments'); // Translate +@define('FIND_MEDIA', 'Find media'); // Translate +@define('FILTER_DIRECTORY', 'Directory'); // Translate +@define('SORT_BY', 'Sort by'); // Translate +@define('ADD_MEDIA_BLAHBLAH', 'Add a file to your media repository:

Here you can upload mediafiles, or tell me to fetch them from somewhere in the web! If you don\'t have an appropriate image, search for images on google matching your thoughts, the results are often useful and funny :)

Select method:
'); // Translate +@define('XML_IMAGE_TO_DISPLAY_DESC', 'Links to XML Feeds will be displayed by this image. Leave empty for default, enter \'none\' to disable.'); // Translate +@define('COMMENTS_FILTER_SHOW', 'Show'); // Translate +@define('COMMENTS_FILTER_ALL', 'All'); // Translate +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Only approved'); // Translate +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Pending approval'); // Translate +@define('RSS_IMPORT_BODYONLY', 'Put all imported text in the "body" section and do not split up into "extended entry" section.'); // Translate +@define('SYNDICATION_PLUGIN_FULLFEED', 'Show full articles with extended body inside RSS feed'); // Translate +@define('MT_DATA_FILE', 'Movable Type data file'); // Translate +@define('FORCE', 'Force'); // Translate +@define('CREATE_AUTHOR', 'Create author \'%s\'.'); // Translate +@define('CREATE_CATEGORY', 'Create category \'%s\'.'); // Translate +@define('MYSQL_REQUIRED', 'You must have the MySQL extension in order to perform this action.'); // Translate +@define('COULDNT_CONNECT', 'Could not connect to MySQL database: %s.'); // Translate +@define('COULDNT_SELECT_DB', 'Could not select database: %s.'); // Translate +@define('COULDNT_SELECT_USER_INFO', 'Could not select user information: %s.'); // Translate +@define('COULDNT_SELECT_CATEGORY_INFO', 'Could not select category information: %s.'); // Translate +@define('COULDNT_SELECT_ENTRY_INFO', 'Could not select entry information: %s.'); // Translate +@define('COULDNT_SELECT_COMMENT_INFO', 'Could not select comment information: %s.'); // Translate +@define('WEEK', 'Week'); // Translate +@define('WEEKS', 'Weeks'); // Translate +@define('MONTHS', 'Months'); // Translate +@define('DAYS', 'Days'); // Translate +@define('ARCHIVE_FREQUENCY', 'Calendar item frequency'); // Translate +@define('ARCHIVE_FREQUENCY_DESC', 'The calendar interval to use between each item in the list'); // Translate +@define('ARCHIVE_COUNT', 'Number of items in the list'); // Translate +@define('ARCHIVE_COUNT_DESC', 'The total number of months, weeks or days to display'); // Translate +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Below is a list of installed plugins'); // Translate +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); // Translate +@define('EVENT_PLUGIN', 'event plugin'); // Translate +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Click here to install a new %s'); // Translate +@define('VERSION', 'version'); // Translate +@define('INSTALL', 'Install'); // Translate +@define('ALREADY_INSTALLED', 'Already installed'); // Translate +@define('SELECT_A_PLUGIN_TO_ADD', 'Select the plugin which you wish to install'); // Translate +@define('INSTALL_OFFSET', 'Server time Offset'); // Translate +@define('STICKY_POSTINGS', 'Sticky Postings'); // Translate +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); // Translate +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); // Translate +@define('IMPORT_ENTRIES', 'Import data'); // Translate +@define('EXPORT_ENTRIES', 'Export entries'); // Translate +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); // Translate +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); // Translate +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); // Translate +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); // Translate +@define('IMPORT_NOW', 'Import now!'); // Translate +@define('IMPORT_STARTING', 'Starting import procedure...'); // Translate +@define('IMPORT_FAILED', 'Import failed'); // Translate +@define('IMPORT_DONE', 'Import successfully completed'); // Translate +@define('IMPORT_WEBLOG_APP', 'Weblog application'); // Translate +@define('EXPORT_FEED', 'Export full RSS feed'); // Translate +@define('STATUS', 'Status after import'); // Translate +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); // Translate +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); // Translate +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); // Translate +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); // Translate +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); // Translate +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); // Translate +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); // Translate +@define('INSTALL_SHOWFUTURE', 'Show future entries'); // Translate +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); // Translate +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); // Translate +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); // Translate +@define('NO_IMAGES_FOUND', 'No images found'); // Translate +@define('PERSONAL_SETTINGS', 'Personal Settings'); // Translate +@define('REFERER', 'Referer'); // Translate +@define('NOT_FOUND', 'Not found'); // Translate +@define('NOT_WRITABLE', 'Not writable'); // Translate +@define('WRITABLE', 'Writable'); // Translate +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); // Translate +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); // Translate +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); // Translate +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); // Translate +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); // Translate +@define('RED', 'red'); // Translate +@define('YELLOW', 'yellow'); // Translate +@define('GREEN', 'green'); // Translate +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); // Translate +@define('RECOMMENDED', 'Recommended'); // Translate +@define('ACTUAL', 'Actual'); // Translate +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); // Translate +@define('PHP_INSTALLATION', 'PHP installation'); // Translate +@define('THEY_DO', 'they do'); // Translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', 'Simple installation'); // Translate +@define('EXPERT_INSTALLATION', 'Expert installation'); // Translate +@define('COMPLETE_INSTALLATION', 'Complete installation'); // Translate +@define('WONT_INSTALL_DB_AGAIN', 'won\'t install the database again'); // Translate +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); // Translate +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); // Translate +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); // Translate +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); // Translate +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); // Translate +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); // Translate +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); // Translate +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); // Translate +@define('OPERATING_SYSTEM', 'Operating system'); // Translate +@define('WEBSERVER_SAPI', 'Webserver SAPI'); // Translate +@define('IMAGE_ROTATE_LEFT', 'Rotate image 90 degrees counter-clockwise'); // Translate +@define('IMAGE_ROTATE_RIGHT', 'Rotate image 90 degrees clockwise'); // Translate +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); // Translate +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); // Translate +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Apply markup transformations to the text (smilies, shortcut markups via *, /, _, ...). Disabling this will preserve any HTML-code in the text.'); // Translate +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_cn.inc.php b/lang/serendipity_lang_cn.inc.php new file mode 100644 index 0000000..4a618c7 --- /dev/null +++ b/lang/serendipity_lang_cn.inc.php @@ -0,0 +1,669 @@ +完成.'); +@define('ERROR_FILE_EXISTS_ALREADY', '错误: 档案已存在!'); +@define('ERROR_UNKNOWN_NOUPLOAD', '未知的错误发生, 档案还没上传. 也许你的档案大於限制的大小. 请询问您的 ISP 或修改您的 php.ini 档.'); +@define('GO', '继续!'); +@define('NEWSIZE', '新大小: '); +@define('RESIZE_BLAHBLAH', '重设大小 %s

'); +@define('ORIGINAL_SIZE', '原有的大小: %sx%s 像素'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

在这里您可以修改图片大小. 如果您要修改成相同的图片比例, 您只需要输入一个数值然后按 TAB -- 系统会自动帮您计算比例以免出错

'); +@define('QUICKJUMP_CALENDAR', '日历快速跳跃'); +@define('QUICKSEARCH', '快速搜寻'); +@define('SEARCH_FOR_ENTRY', '搜寻文章'); +@define('ARCHIVES', '保存文库'); +@define('BROWSE_ARCHIVES', '以月份浏览保存文库'); +@define('TOP_REFERRER', '主要来源'); +@define('SHOWS_TOP_SITES', '显示连结到您的日记的网站'); +@define('TOP_EXITS', '主要出源'); +@define('SHOWS_TOP_EXIT', '显示您的日记的主要出源'); +@define('SYNDICATION', '文章同步'); +@define('SHOWS_RSS_BLAHBLAH', '显示 RSS 同步连结'); +@define('ADVERTISES_BLAHBLAH', '宣传您的网路日记'); +@define('HTML_NUGGET', 'HTML 讯息'); +@define('HOLDS_A_BLAHBLAH', '显示 HTML 讯息到侧列'); +@define('TITLE_FOR_NUGGET', '讯息的标题'); +@define('THE_NUGGET', 'HTML 讯息!'); +@define('SYNDICATE_THIS_BLOG', '同步这个日记'); +@define('YOU_CHOSE', '您选择 %s'); +@define('IMAGE_SIZE', '图片大小'); +@define('IMAGE_AS_A_LINK', '输入图片'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', '引用'); +@define('TRACKBACK', '引用'); +@define('NO_TRACKBACKS', '没有引用'); +@define('TOPICS_OF', '主题'); +@define('VIEW_FULL', '浏览全部'); +@define('VIEW_TOPICS', '浏览主题'); +@define('AT', '在'); +@define('SET_AS_TEMPLATE', '使用布景'); +@define('IN', '在'); +@define('EXCERPT', '摘要'); +@define('TRACKED', '引用'); +@define('LINK_TO_ENTRY', '连结到文章'); +@define('LINK_TO_REMOTE_ENTRY', '连结到远端文章'); +@define('IP_ADDRESS', 'IP 位址'); +@define('USER', '作者'); +@define('THUMBNAIL_USING_OWN', '使用 %s 当它的缩图尺寸因为图片已经很小了.'); +@define('THUMBNAIL_FAILED_COPY', '使用 %s 当它的缩图, 但是无法复制!'); +@define('AUTHOR', '发表者'); +@define('LAST_UPDATED', '最后更新'); +@define('TRACKBACK_SPECIFIC', '引用此文章特定的 URI (网址)'); +@define('DIRECT_LINK', '直接的文章连结'); +@define('COMMENT_ADDED', '您的回响已成功增入. '); +@define('COMMENT_ADDED_CLICK', '点 %s这里返回%s 到回响, 和点 %s这里关闭%s 这个视窗.'); +@define('COMMENT_NOT_ADDED', '您的回响不能增入因为此篇文章不允许回响. '); +@define('COMMENT_NOT_ADDED_CLICK', '点 %s这里返回%s 到回响, 和点 %s这里关闭%s 这个视窗.'); +@define('COMMENTS_DISABLE', '不允许回响到这篇文章'); +@define('COMMENTS_ENABLE', '允许回响到这篇文章'); +@define('COMMENTS_CLOSED', '作者不允许回响到这篇文章'); +@define('EMPTY_COMMENT', '您的回响没有任何讯息, 请 %s返回%s 重试'); +@define('ENTRIES_FOR', '文章给 %s'); +@define('DOCUMENT_NOT_FOUND', '找不到此篇文件 %s.'); +@define('USERNAME', '帐号'); +@define('PASSWORD', '密码'); +@define('AUTOMATIC_LOGIN', '自动登入'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity 安装程式'); +@define('LEFT', 'å·¦'); +@define('RIGHT', '右'); +@define('HIDDEN', '隐藏'); +@define('REMOVE_TICKED_PLUGINS', '移除勾选的外挂'); +@define('SAVE_CHANGES_TO_LAYOUT', '储存外观配置'); +@define('COMMENTS_FROM', '回响来源'); +@define('ERROR', '错误'); +@define('ENTRY_SAVED', '您的文章已储存'); +@define('DELETE_SURE', '确定要删除 #%s 吗?'); +@define('NOT_REALLY', '算了...'); +@define('DUMP_IT', '删除吧!'); +@define('RIP_ENTRY', 'R.I.P. 文章 #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', '类别 #%s 已删除. 旧文章已被移动到类别 #%s'); +@define('CATEGORY_DELETED', '类别 #%s 已删除.'); +@define('INVALID_CATEGORY', '没有提供删除的类别'); +@define('CATEGORY_SAVED', '类别已储存'); +@define('SELECT_TEMPLATE', '请选择网路日记的布景'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', '没有完成增入文章!'); +@define('MT_DATA_FILE', 'Movable Type 资料档'); +@define('FORCE', '强制'); +@define('CREATE_AUTHOR', '新增作者 \'%s\'.'); +@define('CREATE_CATEGORY', '新增类别 \'%s\'.'); +@define('MYSQL_REQUIRED', '您必须要有 MySQL 的扩充功能才能执行这个动作.'); +@define('COULDNT_CONNECT', '不能联结到 MySQL 资料库: %s.'); +@define('COULDNT_SELECT_DB', '不能选择资料库: %s.'); +@define('COULDNT_SELECT_USER_INFO', '不能选择使用者的资料: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', '不能选择类别的资料: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', '不能选择文章的资料: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', '不能选择回响的资料: %s.'); +@define('YES', '是'); +@define('NO', '否'); +@define('USE_DEFAULT', '预设'); +@define('CHECK_N_SAVE', '储存'); +@define('DIRECTORY_WRITE_ERROR', '不能读写档案夹 %s. 请检查权限.'); +@define('DIRECTORY_CREATE_ERROR', '档案夹 %s 不存在也无法建立. 请自己建立这个档案夹'); +@define('DIRECTORY_RUN_CMD', ' -> run %s %s'); +@define('CANT_EXECUTE_BINARY', '无法执行 %s 资源档案'); +@define('FILE_WRITE_ERROR', '无法读写档案 %s.'); +@define('FILE_CREATE_YOURSELF', '请自己建立这个档案或检查权限'); +@define('COPY_CODE_BELOW', '
* 请复制下面的代码然后放入 %s 到您的 %s 档案夹:
%s
' . "\n"); +@define('WWW_USER', '请改变 www 到使用者的 Apache (i.e. nobody).'); +@define('BROWSER_RELOAD', '完成之后, 重新刷新您的浏览器.'); +@define('DIAGNOSTIC_ERROR', '系统侦测到一些错误:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity 还没安装完成. 请按 安装.'); +@define('INCLUDE_ERROR', 'serendipity 错误: 无法包括 %s - 退出.'); +@define('DATABASE_ERROR', 'serendipity 错误: 无法连结到资料库 - 退出.'); +@define('CHECK_DATABASE_EXISTS', '检查资料库是否存在. 如果您看到资料库查询错误, 请不用管它...'); +@define('CREATE_DATABASE', '建立预设资料库设定...'); +@define('ATTEMPT_WRITE_FILE', '读写 %s 档案...'); +@define('SERENDIPITY_INSTALLED', '%sSerendipity 已安装完成.%s 请记得您的密码: "%s", 您的帐号是 "%s".%s您现在可以到新建立的 网路日记'); +@define('WRITTEN_N_SAVED', '储存完毕'); +@define('IMAGE_ALIGNMENT', '图片对齐'); +@define('ENTER_NEW_NAME', '输入新名称给: '); +@define('RESIZING', '重设大小'); +@define('RESIZE_DONE', '完成 (重设 %s 个图片).'); +@define('SYNCING', '进行资料库和图片档案夹同步化'); +@define('SYNC_DONE', '完成 (同步了 %s 个图片).'); +@define('FILE_NOT_FOUND', '找不到档案名称 %s, 也许已经被删除了?'); +@define('ABORT_NOW', '放弃'); +@define('REMOTE_FILE_NOT_FOUND', '档案不在远端主机内, 您确定这个 URL: %s 是正确的吗?'); +@define('FILE_FETCHED', '%s 取回为 %s'); +@define('FILE_UPLOADED', '档案 %s 上传为 %s'); +@define('WORD_OR', '或'); +@define('SCALING_IMAGE', '缩放 %s 到 %s x %s px'); +@define('KEEP_PROPORTIONS', '维持比例'); +@define('REALLY_SCALE_IMAGE', '确定要缩放图片吗? 这个动作不能复原!'); +@define('TOGGLE_ALL', '切换展开'); +@define('TOGGLE_OPTION', '切换选项'); +@define('SUBSCRIBE_TO_THIS_ENTRY', '订阅这篇文章'); +@define('UNSUBSCRIBE_OK', "%s 已取消订阅这篇文章"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', '新回响到订阅的文章 "%s"'); +@define('SUBSCRIPTION_MAIL', "您好 %s,\n\n您订阅的文章有了新的回响在 \"%s\", 标题是 \"%s\"\n回响的发表者是: %s\n\n您可以在这找到此文章: %s\n\n您可以点这个连结取消订阅: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "您好 %s,\n\n您订阅的文章有了新的引用在 \"%s\", 标题是 \"%s\"\n引用的作者是: %s\n\n您可以在这找到此文章: %s\n\n您可以点这个连结取消订阅: %s\n"); +@define('SIGNATURE', "\n-- \n%s is powered by Serendipity.\nThe best blog around, you can use it too.\nCheck out to find out how."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comments'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', '栏位 "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', '栏位 "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'RSS feed 的图片'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', '图片宽度'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', '图片高度'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', '管理员的电子邮件, 如果有. (空白: 隐藏) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', '作者的电子邮件, 如果有. (空白: 隐藏) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', '图片的位址 URL, 以 GIF/JPEG/PNG 格式, 如果有. (空白: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', '像素, 最大. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', '像素, 最大. 400'); +@define('SYNDICATION_PLUGIN_TTL', '栏位 "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', '过几分钟后您的文章不会被外来的网站或程式储存到快取记忆里 (空白: 隐藏) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', '栏位 "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', '"pubDate"-栏位需要内嵌到RSS-频道, 以显示最后文章的日期吗?'); +@define('CONTENT', '内容'); +@define('TYPE', '类型'); +@define('DRAFT', '草稿'); +@define('PUBLISH', '公开'); +@define('PREVIEW', '预览'); +@define('DATE', '日期'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', '警告: 您提供的日期不正确. 它必须是 YYYY-MM-DD HH:MM 格式.'); +@define('CATEGORY_PLUGIN_DESC', '显示类别清单.'); +@define('ALL_AUTHORS', '全部作者'); +@define('CATEGORIES_TO_FETCH', '显示类别'); +@define('CATEGORIES_TO_FETCH_DESC', '显示哪位作者的类别?'); +@define('PAGE_BROWSE_ENTRIES', '页数 %s 共 %s, 总共 %s 篇文章'); +@define('PREVIOUS_PAGE', '上一页'); +@define('NEXT_PAGE', '下一页'); +@define('ALL_CATEGORIES', '全部类别'); +@define('DO_MARKUP', '执行标记转换'); +@define('GENERAL_PLUGIN_DATEFORMAT', '日期格式化'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', '文章的日期格式, 使用 PHP 的 strftime() 变数. (预设: "%s")'); +@define('ERROR_TEMPLATE_FILE', '无法开启布景档案, 请更新 serendipity!'); +@define('ADVANCED_OPTIONS', '进阶选项'); +@define('EDIT_ENTRY', '编辑文章'); +@define('HTACCESS_ERROR', '要检查您的主机安装设定, serendipity 需要读写档案 ".htaccess". 但是因为权限错误, 没有办法为您检查. 请改变档案权限像这样:
  %s
然后重新刷新这个网页.'); +@define('SIDEBAR_PLUGINS', '侧列外挂'); +@define('EVENT_PLUGINS', '事件外挂'); +@define('SORT_ORDER', '排序'); +@define('SORT_ORDER_NAME', '档案名称'); +@define('SORT_ORDER_EXTENSION', '副档名'); +@define('SORT_ORDER_SIZE', '档案大小'); +@define('SORT_ORDER_WIDTH', '图片宽度'); +@define('SORT_ORDER_HEIGHT', '图片长度'); +@define('SORT_ORDER_DATE', '上传日期'); +@define('SORT_ORDER_ASC', '递增排序'); +@define('SORT_ORDER_DESC', '递减排序'); +@define('THUMBNAIL_SHORT', '缩图'); +@define('ORIGINAL_SHORT', '原始'); +@define('APPLY_MARKUP_TO', '套用标记到 %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', '一周的第一天'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity 侦测到您的配置版本是 %s, 但是 Serendipity 本身的安装版本是 %s, 请更新您的程式版本! 更新'); +@define('SERENDIPITY_UPGRADER_WELCOME', '您好, 欢迎来到 Serendipity 的更新系统.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', '更新系统会帮您更新到 Serendipity 版本 %s.'); +@define('SERENDIPITY_UPGRADER_WHY', '您看到这个讯息是因为您安装了 Serendipity 版本 %s, 但是您没有更新资料库'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', '资料库更新 (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', '系统找到以下的 .sql 档, 那些档案必须先执行才能继续安装 Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', '特定的版本任务'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', '没有特定的版本任务'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', '确定要执行上面的任务吗?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', '我自己执行'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', '请帮我执行'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', '您不需要进行任何更新'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', '假装 Serendipity 更新完成吧'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', '您略过了更新任务, 请确定资料库已安装完成, 和其他的任务安装无误'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', '您的 Serendipity 以更新至版本 %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', '您可以点 %s这里%s 返回日记首页'); +@define('MANAGE_USERS', '管理作者'); +@define('CREATE_NEW_USER', '新增作者'); +@define('CREATE_NOT_AUTHORIZED', '您不能修改跟您相同权限的作者'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', '您不能新增比您高权限的作者'); +@define('CREATED_USER', '新作者 %s 已经新增'); +@define('MODIFIED_USER', '作者 %s 的资料已经更改'); +@define('USER_LEVEL', '作者权限'); +@define('DELETE_USER', '您要删除这个作者 #%d %s. 确定吗? 这会在主页隐藏他所写的任何文章.'); +@define('DELETED_USER', '作者 #%d %s 已被删除.'); +@define('LIMIT_TO_NUMBER', '要显示多少项目?'); +@define('ENTRIES_PER_PAGE', '每页显示的文章'); +@define('XML_IMAGE_TO_DISPLAY', 'XML 按钮'); +@define('XML_IMAGE_TO_DISPLAY_DESC','连结到 XML Feeds 的都会用这个图片表示. 不填写将会使用预设的图片, 或输入 \'none\' 关闭这个功能.'); + +@define('DIRECTORIES_AVAILABLE', '您可以在子目录内点任何目录来建立新的目录.'); +@define('ALL_DIRECTORIES', '全部目绿'); +@define('MANAGE_DIRECTORIES', '管理目录'); +@define('DIRECTORY_CREATED', '目录 %s 已经新增.'); +@define('PARENT_DIRECTORY', '母目录'); +@define('CONFIRM_DELETE_DIRECTORY', '确定要删除这个目录内的全部内容吗 %s?'); +@define('ERROR_NO_DIRECTORY', '错误: 目录 %s 不存在'); +@define('CHECKING_DIRECTORY', '检查此目录的档案 %s'); +@define('DELETING_FILE', '删除档案 %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', '不能移除未清空的目录. 勾选 "强制删除" 核取方块如果您要移除这些档案, 然后在继续. 存在的档案是:'); +@define('DIRECTORY_DELETE_FAILED', '不能删除目录 %s. 请检查权限或看上面的讯息.'); +@define('DIRECTORY_DELETE_SUCCESS', '目录 %s 成功删除.'); +@define('SKIPPING_FILE_EXTENSION', '略过档案: 没有 %s 的副档名.'); +@define('SKIPPING_FILE_UNREADABLE', '略过档案: %s 不能读取.'); +@define('FOUND_FILE', '找到 新/修改 过的档案: %s.'); +@define('ALREADY_SUBCATEGORY', '%s 已经是此类别的子类别 %s.'); +@define('PARENT_CATEGORY', '母类别'); +@define('IN_REPLY_TO', '回覆到'); +@define('TOP_LEVEL', '最高层'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', '权限'); +@define('SETTINGS_SAVED_AT', '新设定已经被储存到 %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', '资料库设定'); +@define('INSTALL_CAT_DB_DESC', '您可以在这输入全部的资料库资料. Serendipity 需要这些资料才能正常运作'); +@define('INSTALL_DBTYPE', '资料库类型'); +@define('INSTALL_DBTYPE_DESC', '资料库类型'); +@define('INSTALL_DBHOST', '资料库主机'); +@define('INSTALL_DBHOST_DESC', '资料库主机名称'); +@define('INSTALL_DBUSER', '资料库帐号'); +@define('INSTALL_DBUSER_DESC', '登入资料库的帐号'); +@define('INSTALL_DBPASS', '资料库密码'); +@define('INSTALL_DBPASS_DESC', '您的资料库密码'); +@define('INSTALL_DBNAME', '资料库名称'); +@define('INSTALL_DBNAME_DESC', '资料库名称'); +@define('INSTALL_DBPREFIX', '资料表前置名称'); +@define('INSTALL_DBPREFIX_DESC', '资料表的前置名称, 例如 serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', '路径设定'); +@define('INSTALL_CAT_PATHS_DESC', '给档案夹的路径. 不要忘了最后的斜线!'); +@define('INSTALL_FULLPATH', '完全路径'); +@define('INSTALL_FULLPATH_DESC', '您的 Serendipity 安装的完全路径和绝对路径'); +@define('INSTALL_UPLOADPATH', '上传路径'); +@define('INSTALL_UPLOADPATH_DESC', '全部的上传档案会存到这里, 以 \'完全路径\' 表示的相对路径 - 例如 \'uploads/\''); +@define('INSTALL_RELPATH', '相对路径'); +@define('INSTALL_RELPATH_DESC', '给浏览器的路径, 例如 \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', '相对的布景路径'); +@define('INSTALL_RELTEMPLPATH_DESC', '您放布景的路径 - 以 \'相对路径\' 表示的相对路径'); +@define('INSTALL_RELUPLOADPATH', '相对的上传路径'); +@define('INSTALL_RELUPLOADPATH_DESC', '给浏览器上传档案的路径 - 以 \'相对路径\' 表示的相对路径'); +@define('INSTALL_URL', '网路日记 URL'); +@define('INSTALL_URL_DESC', '您的 Serendipity 安装的基本 URL'); +@define('INSTALL_INDEXFILE', 'Index 档案'); +@define('INSTALL_INDEXFILE_DESC', 'Serendipity 的 index 档案'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', '一般设定'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Serendipity 的一般设定'); +@define('INSTALL_USERNAME', '管理员帐号'); +@define('INSTALL_USERNAME_DESC', '管理员的登入名称'); +@define('INSTALL_PASSWORD', '管理员密码'); +@define('INSTALL_PASSWORD_DESC', '管理员的登入密码'); +@define('INSTALL_EMAIL', '电子邮件'); +@define('INSTALL_EMAIL_DESC', '管理员的电子邮件'); +@define('INSTALL_SENDMAIL', '寄送电子邮件给管理员?'); +@define('INSTALL_SENDMAIL_DESC', '当有人发布回响到您的文章时要收到电子邮件通知吗?'); +@define('INSTALL_SUBSCRIBE', '允许使用者订阅文章?'); +@define('INSTALL_SUBSCRIBE_DESC', '您可以允许使用者收到电子邮件通知, 当有回响发布时她们会收到通知.'); +@define('INSTALL_BLOGNAME', '日记名称'); +@define('INSTALL_BLOGNAME_DESC', '您的日记标题'); +@define('INSTALL_BLOGDESC', '日记简介'); +@define('INSTALL_BLOGDESC_DESC', '介绍您的日记'); +@define('INSTALL_LANG', '语系'); +@define('INSTALL_LANG_DESC', '您日记使用的语系'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', '外观及选项设定'); +@define('INSTALL_CAT_DISPLAY_DESC', '让您设定 Serendipity 的外观和其他设定'); +@define('INSTALL_WYSIWYG', '使用 WYSIWYG 编辑器'); +@define('INSTALL_WYSIWYG_DESC', '您要使用 WYSIWYG 编辑器吗? (可在 IE5+ 使用, 某些部分可使用於 Mozilla 1.3+)'); +@define('INSTALL_XHTML11', '强制符合 XHTML 1.1 要求'); +@define('INSTALL_XHTML11_DESC', '您可以让您的日记强制符合 XHTML 1.1 的要求 (对旧的浏览器可能会有 后台/前台 的问题)'); +@define('INSTALL_POPUP', '使用弹出视窗'); +@define('INSTALL_POPUP_DESC', '您要在回响, 引用等地方使用弹出视窗吗?'); +@define('INSTALL_EMBED', '使用内嵌功能?'); +@define('INSTALL_EMBED_DESC', '如果你要将 Serendipity 以内嵌的方式放到网页内, 选择 是 会让您舍弃任何标题然后只显示日记内容. 您可以用 indexFile 设定来使用包装函式类别以便您放入网页标题. 详情请查询 README 档案!'); +@define('INSTALL_TOP_AS_LINKS', '以连结显示 主要出源/主要来源?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"否": 出源和来源将用文字显示以避免 google 的广告. "是": 出源和来源将用连结显示. "预设": 用全区里面的设定 (建议).'); +@define('INSTALL_BLOCKREF', '阻挡来源'); +@define('INSTALL_BLOCKREF_DESC', '有任何特殊的主机您不想在来源里显示吗? 用 \';\' 来分开主机名称, 注意主机是以子字串方式阻挡!'); +@define('INSTALL_REWRITE', 'URL Rewriting'); +@define('INSTALL_REWRITE_DESC', '请选择您想用的 URL Rewriting 方式. 开启 rewrite 规则会以比较清楚的方式显示 URL, 以便搜寻网站能正确的登入您的文章. 您的主机必须支援 mod_rewrite 或 "AllowOverride All" 到您的 Serendipity 档案夹. 预设的设定是系统自动帮您侦测的'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', '图片转换设定'); +@define('INSTALL_CAT_IMAGECONV_DESC', '请设定 Serendipity 设定图片转换的方式'); +@define('INSTALL_IMAGEMAGICK', '使用 Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', '如果有安装 image magick, 您要用它来改变图片大小吗?'); +@define('INSTALL_IMAGEMAGICKPATH', '转换程式路径'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'image magick 转换程式的完全路径和名称'); +@define('INSTALL_THUMBSUFFIX', '缩图后置字元'); +@define('INSTALL_THUMBSUFFIX_DESC', '缩图会以下面的格式重新命名: original.[后置字元].ext'); +@define('INSTALL_THUMBWIDTH', '缩图尺度'); +@define('INSTALL_THUMBWIDTH_DESC', '自动建立缩图的最大宽度'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', '个人资料设定'); +@define('USERCONF_CAT_PERSONAL_DESC', '改变您的个人资料'); +@define('USERCONF_USERNAME', '您的帐号'); +@define('USERCONF_USERNAME_DESC', '您登入网路日记的名称'); +@define('USERCONF_PASSWORD', '您的密码'); +@define('USERCONF_PASSWORD_DESC', '您登入网路日记的密码'); +@define('USERCONF_EMAIL', '您的电子邮件'); +@define('USERCONF_EMAIL_DESC', '您使用的电子邮件'); +@define('USERCONF_SENDCOMMENTS', '寄送回响通知?'); +@define('USERCONF_SENDCOMMENTS_DESC', '当有新回响到您的文章时要通知您吗?'); +@define('USERCONF_SENDTRACKBACKS', '寄送引用通知?'); +@define('USERCONF_SENDTRACKBACKS_DESC', '当有新引用到您的文章时要通知您吗?'); +@define('USERCONF_ALLOWPUBLISH', '权限: 可发布文章?'); +@define('USERCONF_ALLOWPUBLISH_DESC', '允许这位作者发布文章吗?'); +@define('SUCCESS', '完成'); +@define('POWERED_BY_SHOW_TEXT', '以文字显示 "Serendipity"'); +@define('POWERED_BY_SHOW_TEXT_DESC', '将用文字显示 "Serendipity Weblog"'); +@define('POWERED_BY_SHOW_IMAGE', '以 logo 显示 "Serendipity"'); +@define('POWERED_BY_SHOW_IMAGE_DESC', '显示 Serendipity 的 logo'); +@define('PLUGIN_ITEM_DISPLAY', '该项目的显示位址?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', '只在副内容显示'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', '只在概观内显示'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', '永远显示'); + +@define('COMMENTS_WILL_BE_MODERATED', '发布的回响将需要管理员的审核.'); +@define('YOU_HAVE_THESE_OPTIONS', '您有以下选择:'); +@define('THIS_COMMENT_NEEDS_REVIEW', '警告: 这个回响须审核才会显示'); +@define('DELETE_COMMENT', '删除回响'); +@define('APPROVE_COMMENT', '认可回响'); +@define('REQUIRES_REVIEW', '需要审核'); +@define('COMMENT_APPROVED', '回响 #%s 已经通过审核'); +@define('COMMENT_DELETED', '回响 #%s 已经成功删除'); +@define('COMMENTS_MODERATE', '回响和引用到这个文章需要管理员的审核'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', '警告: 这个引用需要管理员的审核才会显示'); +@define('DELETE_TRACKBACK', '删除引用'); +@define('APPROVE_TRACKBACK', '认可引用'); +@define('TRACKBACK_APPROVED', '引用 #%s 已经通过审核'); +@define('TRACKBACK_DELETED', '引用 #%s 已经成功删除'); +@define('VIEW', '浏览'); +@define('COMMENT_ALREADY_APPROVED', '回响 #%s 已经通过审核'); +@define('COMMENT_EDITED', '文章已被编辑'); +@define('HIDE', '隐藏'); +@define('VIEW_EXTENDED_ENTRY', '继续阅读 "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', '这个连结不是用来点的. 它包含了这个文章的引用 URI. 您可以从您的日记内用这个 URI 来传送 ping 和引用到这个文章. 如果要复制这个连结, 在连结上点右键然后选择 "复制连结" (IE) 或 "复制连结位址" (Mozilla).'); +@define('PLUGIN_SUPERUSER_HTTPS', '用 https 登入'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', '让登入连结连到 https 网址. 您的主机必须支援这项功能!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', '让外来连结以连结显示?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"否": 外来连结 (主要出源, 主要来源, 回响) 都不会以文字显示以避免 google 广告 (建议使用). "是": 外来连结将以超连结的方式显示. 可以在侧列外挂盖过此设定!'); +@define('PAGE_BROWSE_COMMENTS', '页数 %s 共 %s, 总共 %s 个回响'); +@define('FILTERS', '过滤'); +@define('FIND_ENTRIES', '搜寻文章'); +@define('FIND_COMMENTS', '搜寻回响'); +@define('FIND_MEDIA', '搜寻媒体'); +@define('FILTER_DIRECTORY', '目录'); +@define('SORT_BY', '排序'); +@define('TRACKBACK_COULD_NOT_CONNECT', '没有送出引用: 无法开启线路到 %s 用连接埠 %d'); +@define('MEDIA', '媒体'); +@define('MEDIA_LIBRARY', '媒体存库'); +@define('ADD_MEDIA', '新增媒体'); +@define('ENTER_MEDIA_URL', '请输入档案的 URL:'); +@define('ENTER_MEDIA_UPLOAD', '请选择要上传的档案:'); +@define('SAVE_FILE_AS', '储存档案:'); +@define('STORE_IN_DIRECTORY', '储存到以下目录: '); +@define('ADD_MEDIA_BLAHBLAH', '新增档案到媒体存库:

您可以在这上传媒体档, 或告诉系统到哪寻找! 如果您没有想要的图片, 您可以到 google寻找图片.

选择方式:
'); +@define('MEDIA_RENAME', '更改档案名称'); +@define('IMAGE_RESIZE', '更改图片尺寸'); +@define('MEDIA_DELETE', '删除这个档案'); +@define('FILES_PER_PAGE', '每页显示的档案数'); +@define('CLICK_FILE_TO_INSERT', '点选您要输入的档案:'); +@define('SELECT_FILE', '选择要输入的档案'); +@define('MEDIA_FULLSIZE', '完整尺寸'); +@define('CALENDAR_BOW_DESC', '一个礼拜的第一天. 预设是星期一'); +@define('SUPERUSER', '日记管理'); +@define('ALLOWS_YOU_BLAHBLAH', '在侧列提供连结到日记管理'); +@define('CALENDAR', '日历'); +@define('SUPERUSER_OPEN_ADMIN', '开启管理页面'); +@define('SUPERUSER_OPEN_LOGIN', '开启登入页面'); +@define('INVERT_SELECTIONS', '颠倒勾选'); +@define('COMMENTS_DELETE_CONFIRM', '确定要删除勾选的回响吗?'); +@define('COMMENT_DELETE_CONFIRM', '确定要删除回响 #%d, 发布者是 %s?'); +@define('DELETE_SELECTED_COMMENTS', '删除勾选的回响'); +@define('VIEW_COMMENT', '浏览回响'); +@define('VIEW_ENTRY', '浏览文章'); +@define('DELETE_FILE_FAIL' , '无法删除档案 %s'); +@define('DELETE_THUMBNAIL', '删除了图片缩图 %s'); +@define('DELETE_FILE', '删除了档案 %s'); +@define('ABOUT_TO_DELETE_FILE', '您将删除档案 %s
如果您有在其他的文章内使用这个档案, 那个连结或图片将会无效
确定要继续吗?

'); +@define('TRACKBACK_SENDING', '传送引用到 URI %s...'); +@define('TRACKBACK_SENT', '引用完成'); +@define('TRACKBACK_FAILED', '引用错误: %s'); +@define('TRACKBACK_NOT_FOUND', '找不到引用的URI.'); +@define('TRACKBACK_URI_MISMATCH', '自动搜寻的引用跟引用目标不相同.'); +@define('TRACKBACK_CHECKING', '搜寻 %s 的引用...'); +@define('TRACKBACK_NO_DATA', '目标没有任何资料'); +@define('TRACKBACK_SIZE', '目标 URI 超出了允许的 %s bytes 档案大小.'); +@define('COMMENTS_VIEWMODE_THREADED', '分线程'); +@define('COMMENTS_VIEWMODE_LINEAR', '直线程'); +@define('DISPLAY_COMMENTS_AS', '回响显示方式'); +@define('COMMENTS_FILTER_SHOW', '显示'); +@define('COMMENTS_FILTER_ALL', '全部'); +@define('COMMENTS_FILTER_APPROVED_ONLY', '显示审核回响'); +@define('COMMENTS_FILTER_NEED_APPROVAL', '显示等待审核'); +@define('RSS_IMPORT_BODYONLY', '将输入的文字放到主内容, 将不拆开过长的文章到副内容地区.'); +@define('SYNDICATION_PLUGIN_FULLFEED', '在 RSS feed 里显示全部的文章'); +@define('WEEK', '周'); +@define('WEEKS', '周'); +@define('MONTHS', '月'); +@define('DAYS', '日'); +@define('ARCHIVE_FREQUENCY', '保存文库的项目频率'); +@define('ARCHIVE_FREQUENCY_DESC', '保存文库使用的项目清单间隔'); +@define('ARCHIVE_COUNT', '保存文库的项目数'); +@define('ARCHIVE_COUNT_DESC', '显示的月, 周, 或日'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', '下面是安装好的外挂'); +@define('SIDEBAR_PLUGIN', '侧列外挂'); +@define('EVENT_PLUGIN', '事件外挂'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', '点这里安装新 %s'); +@define('VERSION', '版本'); +@define('INSTALL', '安装'); +@define('ALREADY_INSTALLED', '已经安装'); +@define('SELECT_A_PLUGIN_TO_ADD', '请选择要安装的外挂'); +@define('RSS_IMPORT_CATEGORY', '用这个类别给不相同的输入文章'); + +@define('INSTALL_OFFSET', 'Server time Offset'); // Translate +@define('STICKY_POSTINGS', 'Sticky Postings'); // Translate +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); // Translate +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); // Translate +@define('IMPORT_ENTRIES', 'Import data'); // Translate +@define('EXPORT_ENTRIES', 'Export entries'); // Translate +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); // Translate +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); // Translate +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); // Translate +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); // Translate +@define('IMPORT_NOW', 'Import now!'); // Translate +@define('IMPORT_STARTING', 'Starting import procedure...'); // Translate +@define('IMPORT_FAILED', 'Import failed'); // Translate +@define('IMPORT_DONE', 'Import successfully completed'); // Translate +@define('IMPORT_WEBLOG_APP', 'Weblog application'); // Translate +@define('EXPORT_FEED', 'Export full RSS feed'); // Translate +@define('STATUS', 'Status after import'); // Translate +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); // Translate +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); // Translate +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); // Translate +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); // Translate +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); // Translate +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); // Translate +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); // Translate +@define('INSTALL_SHOWFUTURE', 'Show future entries'); // Translate +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); // Translate +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); // Translate +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); // Translate +@define('NO_IMAGES_FOUND', 'No images found'); // Translate +@define('PERSONAL_SETTINGS', 'Personal Settings'); // Translate +@define('REFERER', 'Referer'); // Translate +@define('NOT_FOUND', 'Not found'); // Translate +@define('NOT_WRITABLE', 'Not writable'); // Translate +@define('WRITABLE', 'Writable'); // Translate +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); // Translate +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); // Translate +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); // Translate +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); // Translate +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); // Translate +@define('RED', 'red'); // Translate +@define('YELLOW', 'yellow'); // Translate +@define('GREEN', 'green'); // Translate +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); // Translate +@define('RECOMMENDED', 'Recommended'); // Translate +@define('ACTUAL', 'Actual'); // Translate +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); // Translate +@define('PHP_INSTALLATION', 'PHP installation'); // Translate +@define('THEY_DO', 'they do'); // Translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', 'Simple installation'); // Translate +@define('EXPERT_INSTALLATION', 'Expert installation'); // Translate +@define('COMPLETE_INSTALLATION', 'Complete installation'); // Translate +@define('WONT_INSTALL_DB_AGAIN', 'won\'t install the database again'); // Translate +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); // Translate +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); // Translate +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); // Translate +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); // Translate +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); // Translate +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); // Translate +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); // Translate +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); // Translate +@define('OPERATING_SYSTEM', 'Operating system'); // Translate +@define('WEBSERVER_SAPI', 'Webserver SAPI'); // Translate +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); // Translate +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); // Translate +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Apply markup transformations to the text (smilies, shortcut markups via *, /, _, ...). Disabling this will preserve any HTML-code in the text.'); // Translate +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_cs.inc.php b/lang/serendipity_lang_cs.inc.php new file mode 100644 index 0000000..7eff04c --- /dev/null +++ b/lang/serendipity_lang_cs.inc.php @@ -0,0 +1,671 @@ + + +@define('LANG_CHARSET', 'windows-1250'); +@define('DATE_LOCALES', 'Czech, cs, cs_CZ.windows-1250'); +@define('DATE_FORMAT_ENTRY', '%A, %e. %B %Y'); +@define('DATE_FORMAT_SHORT', '%d/%m/%Y %H.%M'); +@define('WYSIWYG_LANG', 'cs-win'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', ' '); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Administrátorská sekce'); +@define('HAVE_TO_BE_LOGGED_ON', 'Pro zobrazení této stránky musíte být pøihlášen'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Zøejmì jste vložil špatné jméno nebo heslo!'); +@define('APPEARANCE', 'Vzhled'); +@define('MANAGE_STYLES', 'Zmìna stylu'); +@define('CONFIGURE_PLUGINS', 'Konfigurace pluginù'); +@define('CONFIGURATION', 'Konfigurace'); +@define('BACK_TO_BLOG', 'Zpìt do weblogu'); +@define('LOGIN', 'Pøihlášení'); +@define('LOGOUT', 'Odhlášení'); +@define('LOGGEDOUT', 'Odhlášen'); +@define('CREATE', 'Vytvoøit'); +@define('SAVE', 'Uložit'); +@define('NAME', 'Jméno'); +@define('CREATE_NEW_CAT', 'Vytvoøení nové kategorie'); +@define('I_WANT_THUMB', 'Použít náhled.'); +@define('I_WANT_BIG_IMAGE', 'Použít celý obrázek.'); +@define('I_WANT_NO_LINK', ' Zobrazit jako obrázek'); +@define('I_WANT_IT_TO_LINK', 'Zobrazit jako odkaz (URL):'); +@define('BACK', 'Zpìt'); +@define('FORWARD', 'Dále'); +@define('ANONYMOUS', 'Anonym'); +@define('NEW_TRACKBACK_TO', 'Nová odezva na'); +@define('NEW_COMMENT_TO', 'Nový komentáø k'); +@define('RECENT', 'Nové...'); +@define('OLDER', 'Starší...'); +@define('DONE', 'Hotovo'); +@define('WELCOME_BACK', 'Vítejte zpìt,'); +@define('TITLE', 'Titulek'); +@define('DESCRIPTION', 'Popis'); +@define('PLACEMENT', 'Umístìní'); +@define('DELETE', 'Vymazat'); +@define('SAVE', 'Uložit'); +@define('UP', 'Nahoru'); +@define('DOWN', 'Dolù'); +@define('ENTRIES', 'záznamy'); +@define('NEW_ENTRY', 'Nový záznam'); +@define('EDIT_ENTRIES', 'Editovat záznamy'); +@define('CATEGORIES', 'Kategorie'); +@define('WARNING_THIS_BLAHBLAH', "POZOR:\\nTato akce mùže trvat déle pokud máte mnoho obrázkù bez náhledù."); +@define('CREATE_THUMBS', 'Vytvoøit náhledy'); +@define('MANAGE_IMAGES', 'Správa obrázkù'); +@define('NAME', 'Jméno'); +@define('EMAIL', 'E-mail'); +@define('HOMEPAGE', 'Domácí stránka'); +@define('COMMENT', 'Komentáø'); +@define('REMEMBER_INFO', 'Zapamatovat informace? '); +@define('SUBMIT_COMMENT', 'Odeslat komentáø'); +@define('NO_ENTRIES_TO_PRINT', 'Žádné záznamy k zobrazení'); +@define('COMMENTS', 'Komentáøe'); +@define('ADD_COMMENT', 'Pøidat komentáø'); +@define('NO_COMMENTS', 'Žádné komentáøe'); +@define('POSTED_BY', 'Vložil'); +@define('ON', 'v'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Nový komentáø k weblogu "%s", k záznamu s názvem "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Nová odezva na weblog/záznam s názvem "%s".'); +@define('NO_CATEGORY', 'Žádná kategorie'); +@define('ENTRY_BODY', 'Text záznamu'); +@define('EXTENDED_BODY', 'Rozšíøená textová èást'); +@define('CATEGORY', 'Kategorie'); +@define('EDIT', 'Editace'); +@define('NO_ENTRIES_BLAHBLAH', 'Nenalezen žádný záznam odpovídající volbì %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Vyhledávání %s odpovídá %s výsledkù:'); +@define('SEARCH_TOO_SHORT', 'Výraz pro vyhledávání musí být delší než 3 znaky'); +@define('IMAGE', 'Obrázek'); +@define('ERROR_FILE_NOT_EXISTS', 'Chyba: Jméno souboru neexistuje!'); +@define('ERROR_FILE_EXISTS', 'Chyba: Toto jméno souboru je už použito, zvolte jiné!'); +@define('ERROR_SOMETHING', 'Chyba: Nìco je špatnì.'); +@define('ADDING_IMAGE', 'Pøidání obrázku...'); +@define('THUMB_CREATED_DONE', 'Náhled je vytvoøen.
Hotovo.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Chyba: Soubor už ve vašem poèítaèi existuje!'); +@define('GO', 'Provést!'); +@define('NEWSIZE', 'Nový rozmìr: '); +@define('RESIZE_BLAHBLAH', 'Zmìnit rozmìr %s

'); +@define('ORIGINAL_SIZE', 'Pùvodní rozmìr: %sx%s pixelù'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Zde mùžete zadat nový rozmìr obrázku. Pokud chcete zachovat proporce, zadejte jen jednu hodnotu a stisknìte klávesu TAB, nový rozmìr bude dopoèítán automaticky:'); +@define('QUICKJUMP_CALENDAR', 'Vyhledávací kalendáø'); +@define('QUICKSEARCH', 'Rychlé hledání'); +@define('SEARCH_FOR_ENTRY', 'Hledání záznamu'); +@define('ARCHIVES', 'Archivy'); +@define('BROWSE_ARCHIVES', 'Prohlížení mìsíèních archivù'); +@define('TOP_REFERRER', 'Top odbìratelé'); +@define('SHOWS_TOP_SITES', 'Nejèastìjší pøipojení k tomuto weblogu'); +@define('TOP_EXITS', 'Top výstupy'); +@define('SHOWS_TOP_EXIT', 'Nejèastìjší výstupy z tohoto weblogu'); +@define('SYNDICATION', 'Spolupráce'); +@define('SHOWS_RSS_BLAHBLAH', 'Sdílené RSS linky'); +@define('ADVERTISES_BLAHBLAH', 'Reklama na tvùrce systému vašeho weblogu'); +@define('HTML_NUGGET', 'Vložený HTML kód'); +@define('HOLDS_A_BLAHBLAH', 'Vložení HTML kódu do postranního sloupce'); +@define('TITLE_FOR_NUGGET', 'Název HTML kódu'); +@define('THE_NUGGET', 'Vložený HTML'); +@define('SYNDICATE_THIS_BLOG', 'Sdílení weblogu'); +@define('YOU_CHOSE', 'Vybral jste %s'); +@define('IMAGE_SIZE', 'Obrázek o rozmìru'); +@define('IMAGE_AS_A_LINK', 'Vložení obrázku'); +@define('POWERED_BY', 'Vytvoøeno pomocí'); +@define('SUPERUSER', 'Superuživatel'); +@define('TRACKBACKS', 'Odezvy'); +@define('TRACKBACK', 'Odezva'); +@define('NO_TRACKBACKS', 'Žádné odezvy'); +@define('TOPICS_OF', 'Téma'); +@define('VIEW_FULL', 'Zobrazit vše'); +@define('VIEW_TOPICS', 'Zobrazit téma'); +@define('AT', 'v'); +@define('SET_AS_TEMPLATE', 'Nastavit jako vzor'); +@define('IN', 've'); +@define('EXCERPT', 'Výpis'); +@define('TRACKED', 'Sledován'); +@define('LINK_TO_ENTRY', 'Odkaz na záznam'); +@define('LINK_TO_REMOTE_ENTRY', 'Odkaz na externí záznam'); +@define('IP_ADDRESS', 'IP adresa'); +@define('USER', 'Uživatel'); +@define('THUMBNAIL_USING_OWN', '%s je použit jako vlastní náhled, protože je pøíliš malý.'); +@define('THUMBNAIL_FAILED_COPY', '%s nelze použít jako vlastní náhled, nebo jej nelze zkopírovat!'); +@define('AUTHOR', 'Autor'); +@define('LAST_UPDATED', 'Naposled zmìnìno'); +@define('TRACKBACK_SPECIFIC', 'Odezva ze specifického URI na tento záznam'); +@define('DIRECT_LINK', 'Pøímý odkaz na tento záznam'); +@define('COMMENT_ADDED', 'Vᚠkomentáø byl úspìšnì pøidán.'); +@define('COMMENT_ADDED_CLICK', 'Kliknìte %ssem%s pro návrat ke komentáøùm nebo %ssem%s pro zavøení okna.'); +@define('COMMENT_NOT_ADDED', 'Vᚠkomentáø nebyl pøidán, protože k tomuto záznamu nejsou komentáøe umožnìny. %sVrate se%s zpìt ke komentáøùm nebo %szavøete%s toto okno.'); +@define('COMMENT_NOT_ADDED_CLICK', 'Kliknìte %ssem%s pro návrat ke komentáøùm nebo %ssem%s pro zavøení okna.'); +@define('COMMENTS_DISABLE', 'Neumožnit pøidávání komentáøù'); +@define('COMMENTS_ENABLE', 'Umožnit pøidávání komentáøù'); +@define('COMMENTS_CLOSED', 'Autor neumožnil pøidávat komentáøe'); +@define('EMPTY_COMMENT', 'Vᚠkomentáø nic neobsahuje, %svrate se%s a zkuste to znovu'); +@define('ENTRIES_FOR', 'Záznamy: %s'); +@define('DOCUMENT_NOT_FOUND', 'Dokument %s nebyl nalezen.'); +@define('USERNAME', 'Jméno (pøezdívka)'); +@define('PASSWORD', 'Heslo'); +@define('AUTOMATIC_LOGIN', 'Uložit informace'); +@define('SERENDIPITY_INSTALLATION', 'Instalace Serendipity'); +@define('LEFT', 'vlevo'); +@define('RIGHT', 'vpravo'); +@define('HIDDEN', 'skrytý'); +@define('REMOVE_TICKED_PLUGINS', 'Odstranit oznaèené pluginy'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Uložit zmìny layoutu'); +@define('COMMENTS_FROM', 'Komentáøe od'); +@define('ERROR', 'Chyba'); +@define('ENTRY_SAVED', 'Záznam uložen'); +@define('DELETE_SURE', 'Urèitì chcete vymazat #%s natrvalo?'); +@define('NOT_REALLY', 'Nechci...'); +@define('DUMP_IT', 'Vymazat!'); +@define('RIP_ENTRY', 'Zrušen záznam #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Kategorie #%s byla zrušena. Starší záznamy byly pøemístìny do #%s'); +@define('CATEGORY_DELETED', 'Kategorie #%s byla zru~Zena.'); +@define('INVALID_CATEGORY', 'Žádná kategorie nebyla urèena k vymazání'); +@define('CATEGORY_SAVED', 'Kategorie uložena'); +@define('SELECT_TEMPLATE', 'Vyberte vzor pro vᚠweb'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Záznamy nebyly vloženy úspìšnì!'); +@define('YES', 'Ano'); +@define('NO', 'Ne'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Provìøit a uložit'); +@define('DIRECTORY_WRITE_ERROR', 'Nelze zapisovat do adresáøe %s - provìøte oprávnìní.'); +@define('DIRECTORY_CREATE_ERROR', 'Adresáø %s neexistuje a nemohl být vytvoøen. Vytvoøte adresáø manuálnì.'); +@define('DIRECTORY_RUN_CMD', ' -> spustit %s %s'); +@define('CANT_EXECUTE_BINARY', 'Nelze spustit binární soubor %s.'); +@define('FILE_WRITE_ERROR', 'Nelze zapisovat do souboru %s.'); +@define('FILE_CREATE_YOURSELF', 'Vytvoøte soubor pøímo nebo provìøte oprávnìní'); +@define('COPY_CODE_BELOW', '
* Zkopírujte kód uvedený níže a umístìte jej do %s ve vašem %s adresáøi:

%s
' . "\n"); +@define('WWW_USER', 'Zmìòte www na uživatele, který je urèen v Apache (na pø. nobody).'); +@define('BROWSER_RELOAD', 'Po dokonèení stisknìte tlaèítko obnovení stránky ve vašem prohlížeèi.'); +@define('DIAGNOSTIC_ERROR', 'Diagnostika detekovala nìjaké chyby ve vkládaných informacích:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity ještì není nainstalován. Instalujte jej nyní.'); +@define('INCLUDE_ERROR', 'chyba serendipity: nelze vložit %s - ukonèeno.'); +@define('DATABASE_ERROR', 'chyba serendipity: nelze se spojit s databází - ukonèeno.'); +@define('CREATE_DATABASE', 'Vytvoøení základní databáze...'); +@define('ATTEMPT_WRITE_FILE', 'Pokus uložit soubor %s...'); +@define('WRITTEN_N_SAVED', 'Konfigurace byla zapsána a uložena'); +@define('IMAGE_ALIGNMENT', 'Úprava obrázku'); +@define('ENTER_NEW_NAME', 'Nový název: '); +@define('RESIZING', 'Zmìna rozmìrù'); +@define('RESIZE_DONE', 'Hotovo (upraven rozmìr %s obrázkù).'); +@define('SYNCING', 'Synchronizace databáze s adresáøem obrázkù'); +@define('SYNC_DONE', 'Hotovo (synchronizováno %s obrázkù).'); +@define('DELETE_IMAGE_FAIL' , 'Nelze vymazat obrázek %s'); +@define('DELETE_THUMBNAIL', 'Vymazán náhled obrázku s názvem %s'); +@define('FILE_NOT_FOUND', 'Nelze nalézt soubor s názvem %s, možná je opravdu vymazán?'); +@define('ABORT_NOW', 'Zrušit'); +@define('REMOTE_FILE_NOT_FOUND', 'Soubor nebyl na vzdáleném serveru nalezen, jste si jist že URL: %s je správné?'); +@define('FILE_FETCHED', '%s nalezen'); +@define('FILE_UPLOADED', 'Soubor %s je úspìšnì nahrán.'); +@define('WORD_OR', 'nebo'); +@define('SCALING_IMAGE', 'Zmìna %s na %s x %s px'); +@define('KEEP_PROPORTIONS', 'Zachovat proporce'); +@define('REALLY_SCALE_IMAGE', 'Opravdu zmìnit rozmìr? Nelze vrátit!'); +@define('TOGGLE_ALL', 'Otevøít vše'); +@define('TOGGLE_OPTION', 'Otevøít volbu'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Pøihlásit se ke sledování komentáøù k záznamu'); +@define('UNSUBSCRIBE_OK', "%s je odhlášen ze sledování komentáøù"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Nový komentáø k pøihlášenému záznamu "%s"'); +@define('SUBSCRIPTION_MAIL', "Pozor %s,\n\nA právì byl pøidán nový komentáø k záznamu, který sledujete na \"%s\", s názvem \"%s\"\nJméno odesílatele: %s\n\nZáznam najdete zde: %s\n\nMùžete se odhlásit zde: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Pozor %s,\n\nA právì byla pøidána nová odezva k záznamu, který sledujete na \"%s\", s názvem \"%s\"\nJméno odesílatele: %s\n\nZáznam najdete zde: %s\n\nMùžete se odhlásit zde: %s\n"); +@define('SIGNATURE', "\n-- \n%s je vytvoøen pomocí Serendipity.\n Tento perfektní blogovací systém mùžete zdarma používat také.\nNavštivte , kde se dozvíte vše potøebné."); +@define('SYNDICATION_PLUGIN_091', 'Kanál RSS 0.91'); +@define('SYNDICATION_PLUGIN_20', 'Kanál RSS 2.0'); +@define('SYNDICATION_PLUGIN_10', 'Kanál RSS 1.0'); +@define('SYNDICATION_PLUGIN_20c', 'Komentáøe RSS 2.0'); +@define('SYNDICATION_PLUGIN_ATOM03', 'Kanál ATOM 0.3'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', 'Kanál %s'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Pole "hlavní redaktor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Pole "webmaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Obrázek kanálu RSS'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Šíøka'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Výška'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-mailová adresa webmastera, je-li k dispozici. (prázdné: skryté) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-mailová adresa hlavního redaktora, je-li k dispozici. (prázdné: skryté) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL obrázku ve formátu GIF/JPEG/PNG, je-li k dispozici. (prázdné: logo serendipity)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'v pixelech, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'v pixelech, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Pole "ttl" (životnost)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Èas v minutách, po kterém by vᚠweblog nemìl být nadále kešován v cizích serverech/aplikacích (prázdné: skryté) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Pole "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Pole "pubDate"je pro kanál RSS ukryto, chcete ukázat datum posledního záznamu?'); +@define('CONTENT', 'Obsah'); +@define('TYPE', 'Typ'); +@define('DRAFT', 'Koncept'); +@define('PUBLISH', 'Publikovat'); +@define('PREVIEW', 'Ukázat'); +@define('DATE', 'Datum'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Upozornìní: Datum je specifikováno špatnì. Použijte formát YYYY-MM-DD HH:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Seznam kategorií.'); +@define('ALL_AUTHORS', 'Všichni autoøi'); +@define('CATEGORIES_TO_FETCH', 'Vyhledat kategorie'); +@define('CATEGORIES_TO_FETCH_DESC', 'Vyhledat kategorie podle autorù?'); +@define('PAGE_BROWSE_ENTRIES', 'Stránka %s z %s, celkem %s záznamù'); +@define('PREVIOUS_PAGE', 'pøedchozí stránka'); +@define('NEXT_PAGE', 'další stránka'); +@define('ALL_CATEGORIES', 'Všechny kategorie'); +@define('DO_MARKUP', 'Umožnit pøevod znaèek'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Formátování data'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Formát aktuálního data záznamu, používá PHP promìnnou strftime(). (Pøednastaveno: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Nelze otevøít vzorový soubor, updatujte Serendipity!'); +@define('ADVANCED_OPTIONS', 'Rozšíøené volby'); +@define('EDIT_ENTRY', 'Editovat záznam'); +@define('HTACCESS_ERROR', 'Provìøte instalaci vašeho webserveru, Serendipity potøebuje uložit soubor ".htaccess". To nebylo možné kvùli chybì oprávnìní. Nastavte oprávnìní jako:
  %s
a znovu uložte tuto stránku.'); +@define('SIDEBAR_PLUGINS', 'Pluginy pro postranní sloupce'); +@define('EVENT_PLUGINS', 'Pluginy událostí'); +@define('SORT_ORDER', 'Poøadí'); +@define('SORT_ORDER_NAME', 'Název souboru'); +@define('SORT_ORDER_EXTENSION', 'Rozšíøení'); +@define('SORT_ORDER_SIZE', 'Velikost'); +@define('SORT_ORDER_WIDTH', 'Šíøka obrázku'); +@define('SORT_ORDER_HEIGHT', 'Výška obrázku'); +@define('SORT_ORDER_DATE', 'Datum nahrání'); +@define('SORT_ORDER_ASC', 'Vzestupnì'); +@define('SORT_ORDER_DESC', 'Sestupnì'); +@define('THUMBNAIL_SHORT', 'Náhl.'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Zapnout znaèkování %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Zaèátek týdne'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity detekoval, že vaše konfigurace je uložena ve verzi %s, ale serendipity je instalován jako verze %s, je potøeba upgrade! Kliknìte zde'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Vítá vás manažer upgrade Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Pomohu vám s upgrade vaší instalace Serendipity %s.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Tato zpráva je zobrazena proto, že vaše instalace je Serendipity %s, ale ještì nebyla updatována databáze pro tuto verzi'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Update databáze (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Zde jsou .sql soubory, která musíte spustit pøed pokraèováním práce se Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Úlohy specifické pro tuto verzi'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Žádné specifické úlohy'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Mohu pokraèovat v tìchto úlohách?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Ne, spustím je manuálnì'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Ano, pokraèujte'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Není tøeba žádný upgrade'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity je upgradován'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Vynechal jste stupeò upgrade Serendipity, ujistìte se, že databáze je správnì nainstalována a plánované funkce jsou spuštìny'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Vaše instalace Serendipity je upgradována na %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Kliknutím %ssem%s se vrátíte do vašeho weblogu'); +@define('MANAGE_USERS', 'Správa uživatelù'); +@define('CREATE_NEW_USER', 'Vytvoøit nového uživatele'); +@define('CREATE_NOT_AUTHORIZED', 'Nemùžete editovat uživatele se stejnou úrovní jako je vaše'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Nemùžete vytvoøit uživatele s vyšší úrovní než je vaše'); +@define('CREATED_USER', 'Nový uživatel %s byl vytvoøen'); +@define('MODIFIED_USER', 'Nastavení uživatele %s byla zmìnìna'); +@define('USER_LEVEL', 'Úroveò'); +@define('DELETE_USER', 'Chcete vymazat uživatele #%d %s. Myslíte to vážnì? Tato akce znemožní prohlížet jím vytvoøené záznamy na hlavní stránce.'); +@define('DELETED_USER', 'Uživatel #%d %s je vymazán.'); +@define('LIMIT_TO_NUMBER', 'Kolik záznamù by mìlo být zobrazeno?'); +@define('ENTRIES_PER_PAGE', 'záznamù na stránku'); +@define('DIRECTORIES_AVAILABLE', 'Po kliknutí na nìkterý adresáø v seznamu mùžete vytvoøit další podadresáø.'); +@define('ALL_DIRECTORIES', 'všechny adresáøe'); +@define('MANAGE_DIRECTORIES', 'Práce s adresáøi'); +@define('DIRECTORY_CREATED', 'Adresáø %s byl vytvoøen.'); +@define('PARENT_DIRECTORY', 'Základní adresáø'); +@define('CONFIRM_DELETE_DIRECTORY', 'Jste si jist, že chcete odstranit všechen obsah adresáøe %s?'); +@define('ERROR_NO_DIRECTORY', 'Chyba: Adresáø %s neexistuje'); +@define('CHECKING_DIRECTORY', 'Kontrola souborù v adresáøi %s'); +@define('DELETING_FILE', 'Vymazání souboru %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Nelze odstranit neprázdný adresáø. Zkuste zvolit "vynucené mazání", pokud potøebujete vymazat tyto soubory, a odešlete požadavek znovu. Existující soubory jsou:'); +@define('DIRECTORY_DELETE_FAILED', 'Vymazání adresáøe %s se nepodaøilo. Zkontrolujte oprávnìní nebo ètìte zprávu výše.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Adresáø %s byl úspìšnì vymazán.'); +@define('SKIPPING_FILE_EXTENSION', 'Vynechán soubor: Chybìjící pøípona %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Vynechán soubor: %s nelze naèíst.'); +@define('FOUND_FILE', 'Založit nový/zmìnit soubor: %s.'); +@define('PERMISSIONS', 'Oprávnìní'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Databáze'); +@define('INSTALL_CAT_DB_DESC', 'Sem vložte všech informace o databázi. Serendipity je potøebuje k funkci.'); +@define('INSTALL_DBTYPE', 'Typ'); +@define('INSTALL_DBTYPE_DESC', 'Typ databáze'); +@define('INSTALL_DBHOST', 'Hostitel'); +@define('INSTALL_DBHOST_DESC', 'Název hostitelského serveru'); +@define('INSTALL_DBUSER', 'Uživatel'); +@define('INSTALL_DBUSER_DESC', 'Uživatelské jméno'); +@define('INSTALL_DBPASS', 'Heslo'); +@define('INSTALL_DBPASS_DESC', 'Uživatelské heslo'); +@define('INSTALL_DBNAME', 'Název'); +@define('INSTALL_DBNAME_DESC', 'Název databáze'); +@define('INSTALL_DBPREFIX', 'Prefix'); +@define('INSTALL_DBPREFIX_DESC', 'Prefix pro záznamy v databázi, napø. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Cesty'); +@define('INSTALL_CAT_PATHS_DESC', 'Cesty k rùzným adresáøùm a souborùm. Nezapomeòte na ukonèovací lomítko pro adresáøe!'); +@define('INSTALL_FULLPATH', 'Úplná cesta'); +@define('INSTALL_FULLPATH_DESC', 'Úplná absolutní cesta k vaší instalaci Serendipity.'); +@define('INSTALL_UPLOADPATH', 'Cesta pro uploady'); +@define('INSTALL_UPLOADPATH_DESC', 'Sem budou smìrovány uploady, relativnì k \'úplné cestì\' - typicky \'uploads/\''); +@define('INSTALL_RELPATH', 'Relativní cesta'); +@define('INSTALL_RELPATH_DESC', 'Cesta k Serendipity pro vᚠprohlížeè, typicky \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Relativní cesta k template'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Cesta k adresáøi, obsahujícímu vzory (templates) - relativní k \'relativní cestì\''); +@define('INSTALL_RELUPLOADPATH', 'Relativní cesta k uploadùm'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Cesta k uploadùm pro prohlížeèe - relativní k \'relativní cestì\''); +@define('INSTALL_URL', 'URL weblogu'); +@define('INSTALL_URL_DESC', 'Základní URL vaší instalace Serendipity'); +@define('INSTALL_INDEXFILE', 'Indexový soubor'); +@define('INSTALL_INDEXFILE_DESC', 'Název souboru použitého jako index'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Základní nastavení'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Úprava správy Serendipity'); +@define('INSTALL_USERNAME', 'Jméno admina'); +@define('INSTALL_USERNAME_DESC', 'Jméno pro pøihlášení admina'); +@define('INSTALL_PASSWORD', 'Heslo admina'); +@define('INSTALL_PASSWORD_DESC', 'Heslo pro pøihlášení admina'); +@define('INSTALL_EMAIL', 'E-mail admina'); +@define('INSTALL_EMAIL_DESC', 'E-mail pro pøihlášení admina'); +@define('INSTALL_SENDMAIL', 'Posílat e-maily adminovi?'); +@define('INSTALL_SENDMAIL_DESC', 'Chcete dostávat e-mailem zprávy o komentáøích k vašim záznamùm?'); +@define('INSTALL_SUBSCRIBE', 'Umožnit odbìr komentáøù?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Umožnit uživatelùm pøihlášení k odbìru komentáøù k záznamùm'); +@define('INSTALL_BLOGNAME', 'Název'); +@define('INSTALL_BLOGNAME_DESC', 'Název vašeho weblogu'); +@define('INSTALL_BLOGDESC', 'Popis'); +@define('INSTALL_BLOGDESC_DESC', 'Popis weblogu'); +@define('INSTALL_LANG', 'Jazyk'); +@define('INSTALL_LANG_DESC', 'Vyberte jazyk vašeho weblogu'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Vzhled a volby'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Úprava vzhledu a chování Serendipity'); +@define('INSTALL_WYSIWYG', 'Používat WYSIWYG editor?'); +@define('INSTALL_WYSIWYG_DESC', 'Chcete používat WYSIWYG editor? (Pracuje v IE5+, èásteènì v Mozille 1.3+)'); +@define('INSTALL_XHTML11', 'Vnutit kompatibilitu s XHTML 1.1?'); +@define('INSTALL_XHTML11_DESC', 'Chcete plnou kompatibilitu s XHTML 1.1? (mùže zpùsobit problémy ve starších prohlížeèích)'); +@define('INSTALL_POPUP', 'Umožnit použití vyskakovacích oken'); +@define('INSTALL_POPUP_DESC', 'Chcete ve weblogu používat vyskakovací okna pro komentáøe, odezvy a pod.?'); +@define('INSTALL_EMBED', 'Je Serendipity vložené?'); +@define('INSTALL_EMBED_DESC', 'Pokud chcete umístit weblog do vašich stránek, zvolte ano pro odstranìní všech záhlaví, bude zobrazován jen obsah. Mùžete použít volitelný soubor indexFile pro obalení obsahu vlastními záhlavími a sloupci. Více informací najdete v souboru README!'); +@define('INSTALL_BLOCKREF', 'Blokovaní odbìratelé'); +@define('INSTALL_BLOCKREF_DESC', 'Chcete zamezit pøístup z urèitých adres? Seznam adres oddìlujte \';\' a pozor, adresy jsou blokovány vèetnì subadres!'); +@define('INSTALL_REWRITE', 'Pøepisování URL'); +@define('INSTALL_REWRITE_DESC', 'Urèení pravidel pro tvorbu URL. Zapnutí módu pøepisování zajistí správné URL vašeho weblogu a lepší indexaci pro vyhledávaèe, jako je Google. Vᚠwebserver musí podporovat mod_rewrite nebo "AllowOverride All" v adresáøi pro Serendipity. Defaultní nastavení je automaticky detekováno.'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Úpravy obrázkù'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Vložení základních informací o zpùsobu zpracování obrázkù'); +@define('INSTALL_IMAGEMAGICK', 'Používat Imagemagick?'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Máte instalován Imagemagick?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Cesta ke konverznímu souboru'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Úplná cesta a název konverzního souboru Imagemagick'); +@define('INSTALL_THUMBSUFFIX', 'Sufix náhledù'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Náhledy budou pojmenovány original.sufix.ext'); +@define('INSTALL_THUMBWIDTH', 'Rozmìry náhledù'); +@define('INSTALL_THUMBWIDTH_DESC', 'Pevná šíøka automaticky generovaných náhledù'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Osobní nastavení'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Nastavení vašeho úètu'); +@define('USERCONF_USERNAME', 'Jméno'); +@define('USERCONF_USERNAME_DESC', 'Vaše uživatelské jméno (pøezdívka)'); +@define('USERCONF_PASSWORD', 'Heslo'); +@define('USERCONF_PASSWORD_DESC', 'Vaše heslo'); +@define('USERCONF_EMAIL', 'E-mailová adresa'); +@define('USERCONF_EMAIL_DESC', 'Vᚠe-mail'); +@define('USERCONF_SENDCOMMENTS', 'Posílat zprávy o komentáøích?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Chcete dostávat zprávy o komentáøích e-mailem?'); +@define('USERCONF_SENDTRACKBACKS', 'Posílat zprávy o odezvách?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Chcete dostávat zprávy o odezvách na záznamy e-mailem?'); +@define('USERCONF_ALLOWPUBLISH', 'Právo publikovat záznamy?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Umožnit uživateli publikovat záznamy'); + +@define('ALREADY_SUBCATEGORY', '%s je opravdu subkategorie pod %s.'); +@define('PARENT_CATEGORY', 'Nadøazená kategorie'); +@define('IN_REPLY_TO', 'Odpovìï na'); +@define('TOP_LEVEL', 'Nejvyšší úroveò'); +@define('XML_IMAGE_TO_DISPLAY', 'Znak XML'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Odkazy na XML kanály budou zobrazeny s tímto znakem. Nechejte prázdné pro pùvodní nastavení, nebo zadejte \'none\' pro vypnutí.'); +@define('SUCCESS', 'Úspìch'); + +@define('POWERED_BY_SHOW_TEXT', 'Zobrazit "Serendipity" jako text'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Vytvoøeno v "Serendipity" se zobrazí jako text'); +@define('POWERED_BY_SHOW_IMAGE', 'Zobrazit "Serendipity" s logem'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Zobrazí se logo Serendipity'); +@define('INSTALL_TOP_AS_LINKS', 'Zobrazit Top výstupy/odbìratele jako linky?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"Ne": Výstupy a adresy odbìratelù budou zobrazeny jako èistý text pro zamezení spamu, "Ano": nebo jako hyperlinky. "Default": Použít globální nastavení (doporuèeno).'); +@define('SETTINGS_SAVED_AT', 'Nové nastavení bylo uloženo v %s'); +@define('PLUGIN_ITEM_DISPLAY', 'Kde by mìla být tato položka zobrazena?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'V rozšíøené èásti'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'V úvodu'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'V obou èástech'); + +@define('RSS_IMPORT_CATEGORY', 'Použít tuto kategorii pro neurèené záznamy'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Neznámá chyba, soubor nebyl nahrán. Je možné, že délka souboru pøekraèuje maximum, povolené serverem. Spojte se s vaším ISP nebo editujte soubor php.ini a povolte vìtší velikost.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Odeslané komentáøe budou pøed uveøejnìním moderovány.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Máte k dispozici tyto volby:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Pozor: Tento komentáø musí být pøed uveøejnìním odsouhlasen'); +@define('DELETE_COMMENT', 'Vymazat komentáø'); +@define('APPROVE_COMMENT', 'Odsouhlasit komentáø'); +@define('REQUIRES_REVIEW', 'Vyžádat pøezkoumání'); +@define('COMMENT_APPROVED', 'Komentáø #%s byl odsouhlasen'); +@define('COMMENT_DELETED', 'Komentáø #%s byl vymazán'); +@define('VIEW', 'Ukázat'); +@define('COMMENT_ALREADY_APPROVED', 'Komentáø #%s se jeví jako skuteènì odsouhlasený'); +@define('COMMENT_EDITED', 'Vybraný komentáø byl editován'); +@define('HIDE', 'Skrýt'); +@define('VIEW_EXTENDED_ENTRY', 'Pokraèovat ve ètení "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Tento odkaz není mínìn jako klikatelný. Obsahuje zpìtné URI záznamu. Tento URI mùžete použít k odesílání pingù a sledování odezvy na tento záznam. Odkaz zkopírujete kliknutím pravou myší a volbou "Kopírovat odkaz" v Internet Exploreru nebo "Zkopírovat umístìní odkazu" v Mozille.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Pozor: Tato odezva musí být pøed uveøejnìním odsouhlasena'); +@define('DELETE_TRACKBACK', 'Vymazat odezvu'); +@define('APPROVE_TRACKBACK', 'Odsouhlasit odezvu'); +@define('TRACKBACK_APPROVED', 'Odezva #%s byla odsouhlasena'); +@define('TRACKBACK_DELETED', 'Odezva #%s byla vymazána'); +@define('COMMENTS_MODERATE', 'Komentáøe a odezvy k tomuto záznamu budou moderovány'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Použít https pro pøihlášení'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Umožòuje použít spojení https pro pøihlášení. Vᚠserver to musí podporovat!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Udìlat externí odkazy klikatelné?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"Ne": Neoznaèené externí odkazy (Top výstupy, Top odbìratelé, Uživatelské komentáøe) nebudou ukázány/budou ukázány jako bìžný text všude, kde je to možné, pro omezení spamu (doporuèeno). "Ano": Neoznaèené externí odkazy budou ukázány jako hyperlinky. Toto mùže být pøepsáno v konfiguraci pluginù!'); +@define('PAGE_BROWSE_COMMENTS', 'Stránka %s ze %s, celkem %s komentáøù'); +@define('FILTERS', 'Filtry'); +@define('FIND_ENTRIES', 'Hledat záznamy'); +@define('FIND_COMMENTS', 'Hledat komentáøe'); +@define('FIND_MEDIA', 'Hledat média'); +@define('FILTER_DIRECTORY', 'Adresáø'); +@define('SORT_BY', 'Seøadit podle'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Odezva nebyla odeslána: nepodaøilo se spojení s %s na portu %d'); +@define('MEDIA', 'Média (obrázky)'); +@define('MEDIA_LIBRARY', 'Knihovna médií'); +@define('ADD_MEDIA', 'Pøidat'); +@define('ENTER_MEDIA_URL', 'Vložte URL pøidávaného souboru:'); +@define('ENTER_MEDIA_UPLOAD', 'Vyberte soubor pro nahrání:'); +@define('SAVE_FILE_AS', 'Uložit soubor jako:'); +@define('STORE_IN_DIRECTORY', 'Uložit do následujího adresáøe: '); +@define('MEDIA_RENAME', 'Pøejmenovat soubor'); +@define('IMAGE_RESIZE', 'Zmìnit rozmìr obrázku'); +@define('MEDIA_DELETE', 'Vymazat soubor'); +@define('FILES_PER_PAGE', 'Souborù na stránku'); +@define('CLICK_FILE_TO_INSERT', 'Kliknìte na soubor, který chcete vložit:'); +@define('SELECT_FILE', 'Vyberte soubor pro vložení:'); +@define('MEDIA_FULLSIZE', 'Plný rozmìr'); +@define('CALENDAR_BOW_DESC', 'Den, urèený jako zaèátek týdne. Default je pondìlí'); +@define('ALLOWS_YOU_BLAHBLAH', 'Vložit odkaz do postranního bloku administrace weblogu'); +@define('CALENDAR', 'Kalendáø'); +@define('SUPERUSER_OPEN_ADMIN', 'Administrace'); +@define('SUPERUSER_OPEN_LOGIN', 'Pøihlášení'); +@define('INVERT_SELECTIONS', 'Obrátit výbìr'); +@define('COMMENTS_DELETE_CONFIRM', 'Jste se jist vymazáním vybraných komentáøù?'); +@define('COMMENT_DELETE_CONFIRM', 'Jste si jist vymazáním komentáøe #%d, zapsaného %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Vymazat vybrané komentáøe'); +@define('VIEW_COMMENT', 'Ukázat komentáø'); +@define('VIEW_ENTRY', 'Ukázat záznam'); +@define('DELETE_FILE', 'Vymazat soubor s názvem %s'); +@define('ABOUT_TO_DELETE_FILE', 'Chcete vymazat %s
Jestliže používáte tento soubor v nìjakých záznamech, zpùsobí to nepøístupnost odkazù nebo obrázkù.
Chcete pøesto pokraèovat?

'); +@define('TRACKBACK_SENDING', 'Odeslání odezvy na URI %s...'); +@define('TRACKBACK_SENT', 'Odezva úspìšná'); +@define('TRACKBACK_FAILED', 'Odezva neúspìšná: %s'); +@define('TRACKBACK_NOT_FOUND', 'URI odezvy neexistuje.'); +@define('TRACKBACK_URI_MISMATCH', 'Automaticky získané URI neodpovídá vašemu cílovému.'); +@define('TRACKBACK_CHECKING', 'Testvání %s pro možné odezvy...'); +@define('TRACKBACK_NO_DATA', 'Cíl neobsahuje data'); +@define('TRACKBACK_SIZE', 'Cílové URI pøekroèilo max. velikost souboru %s bytù.'); +@define('VIEWMODE_THREADED', 'Pøepnout na vláknové zobrazení'); +@define('COMMENTS_VIEWMODE_THREADED', 'Vláknové'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Lineární'); +@define('DISPLAY_COMMENTS_AS', 'Zobrazit komentáøe jako'); +@define('ADD_MEDIA_BLAHBLAH', 'Pøidat soubor do schránky médií:

Zde mùžete ukládat mediální soubory, nebo urèit, kde je získat z WEBu! Pokud nemáte odpovídající obrázek, hledejte na Google odpovìï na vaši potøebu, obvykle se zadaøí :).

Vyberte metodu:
'); +@define('COMMENTS_FILTER_SHOW', 'Zobrazit'); +@define('COMMENTS_FILTER_ALL', 'Vše'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Pouze povolené'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Èekající na povolení'); +@define('RSS_IMPORT_BODYONLY', 'Uložit celý importovaný text do "hlavní" èásti, nerozdìlovat do "rozšíøené" èásti.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Zobrazit celé èlánky vèetnì rozšíøené èásti v RSS kanálu'); +@define('MT_DATA_FILE', 'Soubory Movable Type'); +@define('FORCE', 'Vnutit'); +@define('CREATE_AUTHOR', 'Vytvoøit autora \'%s\'.'); +@define('CREATE_CATEGORY', 'Vytvoøit kategorii \'%s\'.'); +@define('MYSQL_REQUIRED', 'Pro provedení této akce je nutné mít databázi MySQL.'); +@define('COULDNT_CONNECT', 'Nebylo možné se spojit s databází MySQL: %s.'); +@define('COULDNT_SELECT_DB', 'Nebylo možné vybrat databázi: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Nebylo možné vybrat uživatelské informace: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Nebylo možné vybrat informace o kategorii: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Nebylo možné vybrat informace o záznamu: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Nebylo možné vybrat informace o komentáøi: %s.'); +@define('WEEK', 'Týden'); +@define('WEEKS', 'Týdny'); +@define('MONTHS', 'Mìsíce'); +@define('DAYS', 'Dny'); +@define('ARCHIVE_FREQUENCY', 'Kalendáøní krok'); +@define('ARCHIVE_FREQUENCY_DESC', 'Kalendáøní krok mezi prvky seznamu'); +@define('ARCHIVE_COUNT', 'Poèet prvkù v seznamu'); +@define('ARCHIVE_COUNT_DESC', 'Celkový poèet zobrazených mìsícù, týdnù nebo dnù'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Níže je seznam instalovaných pluginù'); +@define('SIDEBAR_PLUGIN', 'postranní plugin'); +@define('EVENT_PLUGIN', 'plugin události'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Kliknìte a instalujte nový %s'); +@define('VERSION', 'verze'); +@define('INSTALL', 'Instalovat'); +@define('ALREADY_INSTALLED', 'Instalován'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Vyberte plugin, který chcete instalovat'); +@define('INSTALL_OFFSET', 'Èasový posun serveru'); +@define('STICKY_POSTINGS', 'Pøilepené záznamy'); +@define('INSTALL_FETCHLIMIT', 'Záznamy zobrazené na hlavní stránce'); +@define('INSTALL_FETCHLIMIT_DESC', 'Poèet záznamù, zobrazených na hlavní stránce'); +@define('IMPORT_ENTRIES', 'Import dat'); +@define('EXPORT_ENTRIES', 'Export záznamù'); +@define('IMPORT_WELCOME', 'Vítejte v utilitì pro import dat'); +@define('IMPORT_WHAT_CAN', 'Zde mùžete importovat záznamy z jiných weblogù'); +@define('IMPORT_SELECT', 'Vyberte software, ze kterého chcete importovat'); +@define('IMPORT_PLEASE_ENTER', 'Vložte data požadovaná níže'); +@define('IMPORT_NOW', 'Importovat!'); +@define('IMPORT_STARTING', 'Start importu...'); +@define('IMPORT_FAILED', 'Import se nezdaøil'); +@define('IMPORT_DONE', 'Import úspìšnì dokonèen'); +@define('IMPORT_WEBLOG_APP', 'Weblogová aplikace'); +@define('EXPORT_FEED', 'Exportovat plný RSS kanál'); +@define('STATUS', 'Stav po importu'); +@define('IMPORT_GENERIC_RSS', 'Základní RSS import'); +@define('ACTIVATE_AUTODISCOVERY', 'Odeslat odezvy na odkazy obsažené v záznamu'); +@define('WELCOME_TO_ADMIN', 'Vítejte v Administraèní sekci Serendipity .'); +@define('PLEASE_ENTER_CREDENTIALS', 'Vložte oprávnìní.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Vytvoøeno pomocí Serendipity %s a PHP %s'); +@define('INSTALL_USEGZIP', 'Použijte kompresi gzip'); +@define('INSTALL_USEGZIP_DESC', 'Doporuèujeme použít kompresi stránek pro jejich urychlené naèítání'); +@define('INSTALL_SHOWFUTURE', 'Zobrazit budoucí záznamy'); +@define('INSTALL_SHOWFUTURE_DESC', 'Tato volba umožní zobrazení budoucích záznamù blogu. Defaultnì jsou skryté a budou zobrazeny až v èase jejich vydání.'); +@define('INSTALL_DBPERSISTENT', 'Použít trvalé pøipojení'); +@define('INSTALL_DBPERSISTENT_DESC', 'Umožnit trvalé pøipojení k databázi, více zde. Bìžnì to není doporuèeno'); +@define('NO_IMAGES_FOUND', 'Žádné obrázky'); +@define('PERSONAL_SETTINGS', 'Osobní nastavení'); +@define('REFERER', 'Odbìratel'); +@define('NOT_FOUND', 'Není obsažen'); +@define('NOT_WRITABLE', 'Nezapisovatelný'); +@define('WRITABLE', 'Zapisovatelný'); +@define('PROBLEM_DIAGNOSTIC', 'Byly diagnostikovány problémy, takže nelze pokraèovat v instalaci, dokud nebudou odstranìny'); +@define('SELECT_INSTALLATION_TYPE', 'Vyberte typ instalace'); +@define('WELCOME_TO_INSTALLATION', 'Vítejte v instalaci Serendipity'); +@define('FIRST_WE_TAKE_A_LOOK', 'Nejdøíve se podíváme na vaše základní nastavení a zkusíme diagnostikovat pøípadné problémy'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Chyby budou zobrazeny %s, doporuèení %s a úspìch %s'); +@define('RED', 'èervenì'); +@define('YELLOW', 'žlutì'); +@define('GREEN', 'zelenì'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s - pøedinstalaèní zpráva'); +@define('RECOMMENDED', 'Doporuèeno'); +@define('ACTUAL', 'Aktuální'); +@define('PHPINI_CONFIGURATION', 'konfigurace php.ini'); +@define('PHP_INSTALLATION', 'Instalace PHP'); +@define('THEY_DO', 'they do'); +@define('THEY_DONT', 'they don\'t'); +@define('SIMPLE_INSTALLATION', 'Jednoduchá instalace'); +@define('EXPERT_INSTALLATION', 'Expertní instalace'); +@define('COMPLETE_INSTALLATION', 'Kompletní instalace'); +@define('WONT_INSTALL_DB_AGAIN', 'nechci znovu instalovat databázi'); +@define('CHECK_DATABASE_EXISTS', 'Kontrola, jestli databáze a tabulky opravdu existují'); +@define('CREATING_PRIMARY_AUTHOR', 'Vytvoøení hlavního autora \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Nastavení defaultního vzoru'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Instalace defaultních pluginù'); +@define('SERENDIPITY_INSTALLED', 'Serendipity byl úspìšnì nainstalován'); +@define('VISIT_BLOG_HERE', 'Zde se pøepnete do svého nového weblogu'); +@define('THANK_YOU_FOR_CHOOSING', 'Dìkujeme za volbu Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'Pøi instalaci byla detekována chyba'); +@define('OPERATING_SYSTEM', 'Operaèní systém'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('IMAGE_ROTATE_LEFT', 'Otoèit o 90 stupòù doleva'); +@define('IMAGE_ROTATE_RIGHT', 'Otoèit o 90 stupòù doprava'); +@define('TEMPLATE_SET', '\'%s\' byl nastaven jako defaultní vzor (template)'); +@define('SEARCH_ERROR', 'Funkce vyhledávání nepracovala podle oèekávání. Poznámka pro administrátora blogu: Mohlo to být zpùsobeno nepøítomností pøíslušných indexù v databázi. Uživatelský úèet v databázi MySQL musí být oprávnìn vykonat tento dotaz:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
Specifická chyba vrácená databází byla:
%s
'); +@define('EDIT_THIS_CAT', 'Editace "%s"'); +@define('CATEGORY_REMAINING', 'Vymazat kategorii a pøemístit záznamy do kategorie'); +@define('CATEGORY_INDEX', 'Níže je seznam kategorií, které mùžet použít k vašemu záznamu'); +@define('NO_CATEGORIES', 'Žádné kategorie'); +@define('RESET_DATE', 'Resetovat datum'); +@define('RESET_DATE_DESC', 'Kliknìte a resetujte datum na aktuální'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Oprávnìní mùže být nastaveno s použitím povelu: `%s` v adresáøi, nebo nastavením pomocí FTP programu'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Varování: Vᚠvzor používá nepovolenou metodu, je-li to možné, proveïte aktualizaci'); +@define('ENTRY_PUBLISHED_FUTURE', 'Tento záznam ještì není publikován.'); +@define('ENTRIES_BY', 'Záznamy od %s'); +@define('PREVIOUS', 'Pøedchozí'); +@define('NEXT', 'Další'); +@define('APPROVE', 'Povolit'); +@define('DO_MARKUP_DESCRIPTION', 'Pøevést znaèky na text (smajlíky, zkratky *, /, _, ...). Vypnutí této volby zajistí uložení HTML kódù v textu.'); +@define('CATEGORY_ALREADY_EXIST', 'Kategorie nazvaná "%s" skuteènì existuje'); +@define('IMPORT_NOTES', 'Poznámka:'); +@define('ERROR_FILE_FORBIDDEN', 'Nejste oprávnìn nahrávat soubory s aktivním obsahem'); +@define('ADMIN', 'Administrace'); +@define('ADMIN_FRONTPAGE', 'Hlavní stránka'); +@define('QUOTE', 'Citace'); +@define('IFRAME_SAVE', 'Serendipity ukládá vᚠzáznam, vytváøí odezvy a zajišuje možná XML-RPC spojení. Mùže to chvíli trvat...'); +@define('IFRAME_SAVE_DRAFT', 'Koncept tohoto záznamu byl uložen'); +@define('IFRAME_PREVIEW', 'Serendipity nyní vytváøí náhled vašeho záznamu...'); +@define('IFRAME_WARNING', 'Vᚠprohlížeè nepodporuje iframe. Otevøete soubor serendipity_config.inc.php a nastavte promìnnou $serendipity[\'use_iframe\'] na FALSE.'); +@define('NONE', 'nic'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Základní nastavení pro nové záznamy'); +@define('UPGRADE', 'Aktualizace'); +@define('UPGRADE_TO_VERSION', 'Aktualizace na verzi %s'); +@define('DELETE_DIRECTORY', 'Vymazat adresáø'); +@define('DELETE_DIRECTORY_DESC', 'Chcete vymazat obsah adresáøe, obsahující mediální soubory, které mohou být používány ve vašich záznamech.'); +@define('FORCE_DELETE', 'Vymazat VŠECHNY soubory v adresáøi, vèetnì tìch, které nejsou vytvoøeny pomocí Serendipity'); +@define('CREATE_DIRECTORY', 'Vytvoøit adresáø'); +@define('CREATE_NEW_DIRECTORY', 'Vytvoøit nový adresáø'); +@define('CREATE_DIRECTORY_DESC', 'Zde mùžete vytvoøit adresáø pro ukládání mediálních souborù. Zvolte název adresáøe a pøípadný nadøízený adresáø.'); +@define('BASE_DIRECTORY', 'Základní adresáø'); +@define('USERLEVEL_EDITOR_DESC', 'Autor'); +@define('USERLEVEL_CHIEF_DESC', 'Redaktor'); +@define('USERLEVEL_ADMIN_DESC', 'Administrátor'); +@define('USERCONF_USERLEVEL', 'Úroveò'); +@define('USERCONF_USERLEVEL_DESC', 'Tato úroveò urèuje práva uživatele weblogu.'); +@define('USER_SELF_INFO', 'Pøihlášen jako %s (%s)'); +@define('ADMIN_ENTRIES', 'Záznamy'); +@define('RECHECK_INSTALLATION', 'Pøekontrolovat instalaci'); +@define('IMAGICK_EXEC_ERROR', 'Nelze spustit: "%s", chyba: %s, vrací promìnnou: %d'); +@define('INSTALL_OFFSET_DESC', 'Vložte poèet hodin mezi èasem serveru (aktuálnì: %clock%) a vaší èasovou zónou'); +@define('UNMET_REQUIREMENTS', 'Nesplnìné požadavky: %s'); +@define('CHARSET', 'Znaková sada'); +@define('AUTOLANG', 'Použít jazyk prohlížeèe jako defaultní'); +@define('AUTOLANG_DESC', 'Zapnutím této volby urèíte, že jazyk prohlížeèe bude pøevzat jako základní pro uživatelské rozhraní a pro záznamy.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetekce použité HTTP hostitelské adresy'); +@define('INSTALL_AUTODETECT_URL_DESC', 'Pøi volbì "Ano" bude Serendipity pøedpokládat, že HTTP adresa hostitele, použitá návštìvníkem, je vaše základní nastavení URL. Zapnutí umožní používání rùzných domén k pøístupu na vaše stránky, a použití této jedné domény pro všechny odkazy ke sledování zmìn na stránkách.'); +@define('CONVERT_HTMLENTITIES', 'Zkusit automatickou konverzi HTML entit?'); +@define('EMPTY_SETTING', 'Nespecifikoval jste platnou hodnotu pro "%s"!'); +@define('USERCONF_REALNAME', 'Skuteèné jméno'); +@define('USERCONF_REALNAME_DESC', 'Plné jméno autora. Toto jméno uvidí ètenáøi'); +@define('HOTLINK_DONE', 'Soubor pøipojen odkazem.
Hotovo.'); +@define('ENTER_MEDIA_URL_METHOD', 'Zpùsob pøipojení:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Poznámka: Pokud zvolíte odkaz na server, ujistìte se, že máte potøebná práva, nebo že jde o vᚠweb. Odkazy vám umožní využívat obrázky z jiných než místních zdrojù.'); +@define('MEDIA_HOTLINKED', 'odkazován'); +@define('FETCH_METHOD_IMAGE', 'Nahrání na server'); +@define('FETCH_METHOD_HOTLINK', 'Odkaz na server'); +@define('DELETE_HOTLINK_FILE', 'Vymazán odkazovaný soubor %s'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_cz.inc.php b/lang/serendipity_lang_cz.inc.php new file mode 100644 index 0000000..d1bf1a9 --- /dev/null +++ b/lang/serendipity_lang_cz.inc.php @@ -0,0 +1,671 @@ + + +@define('LANG_CHARSET', 'ISO-8859-2'); +@define('DATE_LOCALES', 'Czech, cs, cs_CZ.ISO-8859-2'); +@define('DATE_FORMAT_ENTRY', '%A, %e. %B %Y'); +@define('DATE_FORMAT_SHORT', '%d/%m/%Y %H.%M'); +@define('WYSIWYG_LANG', 'cs-iso'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', ' '); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Administrátorská sekce'); +@define('HAVE_TO_BE_LOGGED_ON', 'Pro zobrazení této stránky musíte být pøihlá¹en'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Zøejmì jste vlo¾il ¹patné jméno nebo heslo!'); +@define('APPEARANCE', 'Vzhled'); +@define('MANAGE_STYLES', 'Zmìna stylu'); +@define('CONFIGURE_PLUGINS', 'Konfigurace pluginù'); +@define('CONFIGURATION', 'Konfigurace'); +@define('BACK_TO_BLOG', 'Zpìt do weblogu'); +@define('LOGIN', 'Pøihlá¹ení'); +@define('LOGOUT', 'Odhlá¹ení'); +@define('LOGGEDOUT', 'Odhlá¹en'); +@define('CREATE', 'Vytvoøit'); +@define('SAVE', 'Ulo¾it'); +@define('NAME', 'Jméno'); +@define('CREATE_NEW_CAT', 'Vytvoøení nové kategorie'); +@define('I_WANT_THUMB', 'Pou¾ít náhled.'); +@define('I_WANT_BIG_IMAGE', 'Pou¾ít celý obrázek.'); +@define('I_WANT_NO_LINK', ' Zobrazit jako obrázek'); +@define('I_WANT_IT_TO_LINK', 'Zobrazit jako odkaz (URL):'); +@define('BACK', 'Zpìt'); +@define('FORWARD', 'Dále'); +@define('ANONYMOUS', 'Anonym'); +@define('NEW_TRACKBACK_TO', 'Nová odezva na'); +@define('NEW_COMMENT_TO', 'Nový komentáø k'); +@define('RECENT', 'Nové...'); +@define('OLDER', 'Star¹í...'); +@define('DONE', 'Hotovo'); +@define('WELCOME_BACK', 'Vítejte zpìt,'); +@define('TITLE', 'Titulek'); +@define('DESCRIPTION', 'Popis'); +@define('PLACEMENT', 'Umístìní'); +@define('DELETE', 'Vymazat'); +@define('SAVE', 'Ulo¾it'); +@define('UP', 'Nahoru'); +@define('DOWN', 'Dolù'); +@define('ENTRIES', 'záznamy'); +@define('NEW_ENTRY', 'Nový záznam'); +@define('EDIT_ENTRIES', 'Editovat záznamy'); +@define('CATEGORIES', 'Kategorie'); +@define('WARNING_THIS_BLAHBLAH', "POZOR:\\nTato akce mù¾e trvat déle pokud máte mnoho obrázkù bez náhledù."); +@define('CREATE_THUMBS', 'Vytvoøit náhledy'); +@define('MANAGE_IMAGES', 'Správa obrázkù'); +@define('NAME', 'Jméno'); +@define('EMAIL', 'E-mail'); +@define('HOMEPAGE', 'Domácí stránka'); +@define('COMMENT', 'Komentáø'); +@define('REMEMBER_INFO', 'Zapamatovat informace? '); +@define('SUBMIT_COMMENT', 'Odeslat komentáø'); +@define('NO_ENTRIES_TO_PRINT', '®ádné záznamy k zobrazení'); +@define('COMMENTS', 'Komentáøe'); +@define('ADD_COMMENT', 'Pøidat komentáø'); +@define('NO_COMMENTS', '®ádné komentáøe'); +@define('POSTED_BY', 'Vlo¾il'); +@define('ON', 'v'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Nový komentáø k weblogu "%s", k záznamu s názvem "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Nová odezva na weblog/záznam s názvem "%s".'); +@define('NO_CATEGORY', '®ádná kategorie'); +@define('ENTRY_BODY', 'Text záznamu'); +@define('EXTENDED_BODY', 'Roz¹íøená textová èást'); +@define('CATEGORY', 'Kategorie'); +@define('EDIT', 'Editace'); +@define('NO_ENTRIES_BLAHBLAH', 'Nenalezen ¾ádný záznam odpovídající volbì %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Vyhledávání %s odpovídá %s výsledkù:'); +@define('SEARCH_TOO_SHORT', 'Výraz pro vyhledávání musí být del¹í ne¾ 3 znaky'); +@define('IMAGE', 'Obrázek'); +@define('ERROR_FILE_NOT_EXISTS', 'Chyba: Jméno souboru neexistuje!'); +@define('ERROR_FILE_EXISTS', 'Chyba: Toto jméno souboru je u¾ pou¾ito, zvolte jiné!'); +@define('ERROR_SOMETHING', 'Chyba: Nìco je ¹patnì.'); +@define('ADDING_IMAGE', 'Pøidání obrázku...'); +@define('THUMB_CREATED_DONE', 'Náhled je vytvoøen.
Hotovo.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Chyba: Soubor u¾ ve va¹em poèítaèi existuje!'); +@define('GO', 'Provést!'); +@define('NEWSIZE', 'Nový rozmìr: '); +@define('RESIZE_BLAHBLAH', 'Zmìnit rozmìr %s

'); +@define('ORIGINAL_SIZE', 'Pùvodní rozmìr: %sx%s pixelù'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Zde mù¾ete zadat nový rozmìr obrázku. Pokud chcete zachovat proporce, zadejte jen jednu hodnotu a stisknìte klávesu TAB, nový rozmìr bude dopoèítán automaticky:'); +@define('QUICKJUMP_CALENDAR', 'Vyhledávací kalendáø'); +@define('QUICKSEARCH', 'Rychlé hledání'); +@define('SEARCH_FOR_ENTRY', 'Hledání záznamu'); +@define('ARCHIVES', 'Archivy'); +@define('BROWSE_ARCHIVES', 'Prohlí¾ení mìsíèních archivù'); +@define('TOP_REFERRER', 'Top odbìratelé'); +@define('SHOWS_TOP_SITES', 'Nejèastìj¹í pøipojení k tomuto weblogu'); +@define('TOP_EXITS', 'Top výstupy'); +@define('SHOWS_TOP_EXIT', 'Nejèastìj¹í výstupy z tohoto weblogu'); +@define('SYNDICATION', 'Spolupráce'); +@define('SHOWS_RSS_BLAHBLAH', 'Sdílené RSS linky'); +@define('ADVERTISES_BLAHBLAH', 'Reklama na tvùrce systému va¹eho weblogu'); +@define('HTML_NUGGET', 'Vlo¾ený HTML kód'); +@define('HOLDS_A_BLAHBLAH', 'Vlo¾ení HTML kódu do postranního sloupce'); +@define('TITLE_FOR_NUGGET', 'Název HTML kódu'); +@define('THE_NUGGET', 'Vlo¾ený HTML'); +@define('SYNDICATE_THIS_BLOG', 'Sdílení weblogu'); +@define('YOU_CHOSE', 'Vybral jste %s'); +@define('IMAGE_SIZE', 'Obrázek o rozmìru'); +@define('IMAGE_AS_A_LINK', 'Vlo¾ení obrázku'); +@define('POWERED_BY', 'Vytvoøeno pomocí'); +@define('SUPERUSER', 'Superu¾ivatel'); +@define('TRACKBACKS', 'Odezvy'); +@define('TRACKBACK', 'Odezva'); +@define('NO_TRACKBACKS', '®ádné odezvy'); +@define('TOPICS_OF', 'Téma'); +@define('VIEW_FULL', 'Zobrazit v¹e'); +@define('VIEW_TOPICS', 'Zobrazit téma'); +@define('AT', 'v'); +@define('SET_AS_TEMPLATE', 'Nastavit jako vzor'); +@define('IN', 've'); +@define('EXCERPT', 'Výpis'); +@define('TRACKED', 'Sledován'); +@define('LINK_TO_ENTRY', 'Odkaz na záznam'); +@define('LINK_TO_REMOTE_ENTRY', 'Odkaz na externí záznam'); +@define('IP_ADDRESS', 'IP adresa'); +@define('USER', 'U¾ivatel'); +@define('THUMBNAIL_USING_OWN', '%s je pou¾it jako vlastní náhled, proto¾e je pøíli¹ malý.'); +@define('THUMBNAIL_FAILED_COPY', '%s nelze pou¾ít jako vlastní náhled, nebo» jej nelze zkopírovat!'); +@define('AUTHOR', 'Autor'); +@define('LAST_UPDATED', 'Naposled zmìnìno'); +@define('TRACKBACK_SPECIFIC', 'Odezva ze specifického URI na tento záznam'); +@define('DIRECT_LINK', 'Pøímý odkaz na tento záznam'); +@define('COMMENT_ADDED', 'Vá¹ komentáø byl úspì¹nì pøidán.'); +@define('COMMENT_ADDED_CLICK', 'Kliknìte %ssem%s pro návrat ke komentáøùm nebo %ssem%s pro zavøení okna.'); +@define('COMMENT_NOT_ADDED', 'Vá¹ komentáø nebyl pøidán, proto¾e k tomuto záznamu nejsou komentáøe umo¾nìny. %sVra»te se%s zpìt ke komentáøùm nebo %szavøete%s toto okno.'); +@define('COMMENT_NOT_ADDED_CLICK', 'Kliknìte %ssem%s pro návrat ke komentáøùm nebo %ssem%s pro zavøení okna.'); +@define('COMMENTS_DISABLE', 'Neumo¾nit pøidávání komentáøù'); +@define('COMMENTS_ENABLE', 'Umo¾nit pøidávání komentáøù'); +@define('COMMENTS_CLOSED', 'Autor neumo¾nil pøidávat komentáøe'); +@define('EMPTY_COMMENT', 'Vá¹ komentáø nic neobsahuje, %svra»te se%s a zkuste to znovu'); +@define('ENTRIES_FOR', 'Záznamy: %s'); +@define('DOCUMENT_NOT_FOUND', 'Dokument %s nebyl nalezen.'); +@define('USERNAME', 'Jméno (pøezdívka)'); +@define('PASSWORD', 'Heslo'); +@define('AUTOMATIC_LOGIN', 'Ulo¾it informace'); +@define('SERENDIPITY_INSTALLATION', 'Instalace Serendipity'); +@define('LEFT', 'vlevo'); +@define('RIGHT', 'vpravo'); +@define('HIDDEN', 'skrytý'); +@define('REMOVE_TICKED_PLUGINS', 'Odstranit oznaèené pluginy'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Ulo¾it zmìny layoutu'); +@define('COMMENTS_FROM', 'Komentáøe od'); +@define('ERROR', 'Chyba'); +@define('ENTRY_SAVED', 'Záznam ulo¾en'); +@define('DELETE_SURE', 'Urèitì chcete vymazat #%s natrvalo?'); +@define('NOT_REALLY', 'Nechci...'); +@define('DUMP_IT', 'Vymazat!'); +@define('RIP_ENTRY', 'Zru¹en záznam #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Kategorie #%s byla zru¹ena. Star¹í záznamy byly pøemístìny do #%s'); +@define('CATEGORY_DELETED', 'Kategorie #%s byla zru~Zena.'); +@define('INVALID_CATEGORY', '®ádná kategorie nebyla urèena k vymazání'); +@define('CATEGORY_SAVED', 'Kategorie ulo¾ena'); +@define('SELECT_TEMPLATE', 'Vyberte vzor pro vá¹ web'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Záznamy nebyly vlo¾eny úspì¹nì!'); +@define('YES', 'Ano'); +@define('NO', 'Ne'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Provìøit a ulo¾it'); +@define('DIRECTORY_WRITE_ERROR', 'Nelze zapisovat do adresáøe %s - provìøte oprávnìní.'); +@define('DIRECTORY_CREATE_ERROR', 'Adresáø %s neexistuje a nemohl být vytvoøen. Vytvoøte adresáø manuálnì.'); +@define('DIRECTORY_RUN_CMD', ' -> spustit %s %s'); +@define('CANT_EXECUTE_BINARY', 'Nelze spustit binární soubor %s.'); +@define('FILE_WRITE_ERROR', 'Nelze zapisovat do souboru %s.'); +@define('FILE_CREATE_YOURSELF', 'Vytvoøte soubor pøímo nebo provìøte oprávnìní'); +@define('COPY_CODE_BELOW', '
* Zkopírujte kód uvedený ní¾e a umístìte jej do %s ve va¹em %s adresáøi:

%s
' . "\n"); +@define('WWW_USER', 'Zmìòte www na u¾ivatele, který je urèen v Apache (na pø. nobody).'); +@define('BROWSER_RELOAD', 'Po dokonèení stisknìte tlaèítko obnovení stránky ve va¹em prohlí¾eèi.'); +@define('DIAGNOSTIC_ERROR', 'Diagnostika detekovala nìjaké chyby ve vkládaných informacích:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity je¹tì není nainstalován. Instalujte jej nyní.'); +@define('INCLUDE_ERROR', 'chyba serendipity: nelze vlo¾it %s - ukonèeno.'); +@define('DATABASE_ERROR', 'chyba serendipity: nelze se spojit s databází - ukonèeno.'); +@define('CREATE_DATABASE', 'Vytvoøení základní databáze...'); +@define('ATTEMPT_WRITE_FILE', 'Pokus ulo¾it soubor %s...'); +@define('WRITTEN_N_SAVED', 'Konfigurace byla zapsána a ulo¾ena'); +@define('IMAGE_ALIGNMENT', 'Úprava obrázku'); +@define('ENTER_NEW_NAME', 'Nový název: '); +@define('RESIZING', 'Zmìna rozmìrù'); +@define('RESIZE_DONE', 'Hotovo (upraven rozmìr %s obrázkù).'); +@define('SYNCING', 'Synchronizace databáze s adresáøem obrázkù'); +@define('SYNC_DONE', 'Hotovo (synchronizováno %s obrázkù).'); +@define('DELETE_IMAGE_FAIL' , 'Nelze vymazat obrázek %s'); +@define('DELETE_THUMBNAIL', 'Vymazán náhled obrázku s názvem %s'); +@define('FILE_NOT_FOUND', 'Nelze nalézt soubor s názvem %s, mo¾ná je opravdu vymazán?'); +@define('ABORT_NOW', 'Zru¹it'); +@define('REMOTE_FILE_NOT_FOUND', 'Soubor nebyl na vzdáleném serveru nalezen, jste si jist ¾e URL: %s je správné?'); +@define('FILE_FETCHED', '%s nalezen'); +@define('FILE_UPLOADED', 'Soubor %s je úspì¹nì nahrán.'); +@define('WORD_OR', 'nebo'); +@define('SCALING_IMAGE', 'Zmìna %s na %s x %s px'); +@define('KEEP_PROPORTIONS', 'Zachovat proporce'); +@define('REALLY_SCALE_IMAGE', 'Opravdu zmìnit rozmìr? Nelze vrátit!'); +@define('TOGGLE_ALL', 'Otevøít v¹e'); +@define('TOGGLE_OPTION', 'Otevøít volbu'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Pøihlásit se ke sledování komentáøù k záznamu'); +@define('UNSUBSCRIBE_OK', "%s je odhlá¹en ze sledování komentáøù"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Nový komentáø k pøihlá¹enému záznamu "%s"'); +@define('SUBSCRIPTION_MAIL', "Pozor %s,\n\nA právì byl pøidán nový komentáø k záznamu, který sledujete na \"%s\", s názvem \"%s\"\nJméno odesílatele: %s\n\nZáznam najdete zde: %s\n\nMù¾ete se odhlásit zde: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Pozor %s,\n\nA právì byla pøidána nová odezva k záznamu, který sledujete na \"%s\", s názvem \"%s\"\nJméno odesílatele: %s\n\nZáznam najdete zde: %s\n\nMù¾ete se odhlásit zde: %s\n"); +@define('SIGNATURE', "\n-- \n%s je vytvoøen pomocí Serendipity.\n Tento perfektní blogovací systém mù¾ete zdarma pou¾ívat také.\nNav¹tivte , kde se dozvíte v¹e potøebné."); +@define('SYNDICATION_PLUGIN_091', 'Kanál RSS 0.91'); +@define('SYNDICATION_PLUGIN_20', 'Kanál RSS 2.0'); +@define('SYNDICATION_PLUGIN_10', 'Kanál RSS 1.0'); +@define('SYNDICATION_PLUGIN_20c', 'Komentáøe RSS 2.0'); +@define('SYNDICATION_PLUGIN_ATOM03', 'Kanál ATOM 0.3'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', 'Kanál %s'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Pole "hlavní redaktor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Pole "webmaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Obrázek kanálu RSS'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', '©íøka'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Vý¹ka'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-mailová adresa webmastera, je-li k dispozici. (prázdné: skryté) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-mailová adresa hlavního redaktora, je-li k dispozici. (prázdné: skryté) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL obrázku ve formátu GIF/JPEG/PNG, je-li k dispozici. (prázdné: logo serendipity)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'v pixelech, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'v pixelech, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Pole "ttl" (¾ivotnost)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Èas v minutách, po kterém by vá¹ weblog nemìl být nadále ke¹ován v cizích serverech/aplikacích (prázdné: skryté) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Pole "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Pole "pubDate"je pro kanál RSS ukryto, chcete ukázat datum posledního záznamu?'); +@define('CONTENT', 'Obsah'); +@define('TYPE', 'Typ'); +@define('DRAFT', 'Koncept'); +@define('PUBLISH', 'Publikovat'); +@define('PREVIEW', 'Ukázat'); +@define('DATE', 'Datum'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Upozornìní: Datum je specifikováno ¹patnì. Pou¾ijte formát YYYY-MM-DD HH:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Seznam kategorií.'); +@define('ALL_AUTHORS', 'V¹ichni autoøi'); +@define('CATEGORIES_TO_FETCH', 'Vyhledat kategorie'); +@define('CATEGORIES_TO_FETCH_DESC', 'Vyhledat kategorie podle autorù?'); +@define('PAGE_BROWSE_ENTRIES', 'Stránka %s z %s, celkem %s záznamù'); +@define('PREVIOUS_PAGE', 'pøedchozí stránka'); +@define('NEXT_PAGE', 'dal¹í stránka'); +@define('ALL_CATEGORIES', 'V¹echny kategorie'); +@define('DO_MARKUP', 'Umo¾nit pøevod znaèek'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Formátování data'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Formát aktuálního data záznamu, pou¾ívá PHP promìnnou strftime(). (Pøednastaveno: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Nelze otevøít vzorový soubor, updatujte Serendipity!'); +@define('ADVANCED_OPTIONS', 'Roz¹íøené volby'); +@define('EDIT_ENTRY', 'Editovat záznam'); +@define('HTACCESS_ERROR', 'Provìøte instalaci va¹eho webserveru, Serendipity potøebuje ulo¾it soubor ".htaccess". To nebylo mo¾né kvùli chybì oprávnìní. Nastavte oprávnìní jako:
  %s
a znovu ulo¾te tuto stránku.'); +@define('SIDEBAR_PLUGINS', 'Pluginy pro postranní sloupce'); +@define('EVENT_PLUGINS', 'Pluginy událostí'); +@define('SORT_ORDER', 'Poøadí'); +@define('SORT_ORDER_NAME', 'Název souboru'); +@define('SORT_ORDER_EXTENSION', 'Roz¹íøení'); +@define('SORT_ORDER_SIZE', 'Velikost'); +@define('SORT_ORDER_WIDTH', '©íøka obrázku'); +@define('SORT_ORDER_HEIGHT', 'Vý¹ka obrázku'); +@define('SORT_ORDER_DATE', 'Datum nahrání'); +@define('SORT_ORDER_ASC', 'Vzestupnì'); +@define('SORT_ORDER_DESC', 'Sestupnì'); +@define('THUMBNAIL_SHORT', 'Náhl.'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Zapnout znaèkování %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Zaèátek týdne'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity detekoval, ¾e va¹e konfigurace je ulo¾ena ve verzi %s, ale serendipity je instalován jako verze %s, je potøeba upgrade! Kliknìte zde'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Vítá vás mana¾er upgrade Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Pomohu vám s upgrade va¹í instalace Serendipity %s.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Tato zpráva je zobrazena proto, ¾e va¹e instalace je Serendipity %s, ale je¹tì nebyla updatována databáze pro tuto verzi'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Update databáze (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Zde jsou .sql soubory, která musíte spustit pøed pokraèováním práce se Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Úlohy specifické pro tuto verzi'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', '®ádné specifické úlohy'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Mohu pokraèovat v tìchto úlohách?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Ne, spustím je manuálnì'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Ano, pokraèujte'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Není tøeba ¾ádný upgrade'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity je upgradován'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Vynechal jste stupeò upgrade Serendipity, ujistìte se, ¾e databáze je správnì nainstalována a plánované funkce jsou spu¹tìny'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Va¹e instalace Serendipity je upgradována na %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Kliknutím %ssem%s se vrátíte do va¹eho weblogu'); +@define('MANAGE_USERS', 'Správa u¾ivatelù'); +@define('CREATE_NEW_USER', 'Vytvoøit nového u¾ivatele'); +@define('CREATE_NOT_AUTHORIZED', 'Nemù¾ete editovat u¾ivatele se stejnou úrovní jako je va¹e'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Nemù¾ete vytvoøit u¾ivatele s vy¹¹í úrovní ne¾ je va¹e'); +@define('CREATED_USER', 'Nový u¾ivatel %s byl vytvoøen'); +@define('MODIFIED_USER', 'Nastavení u¾ivatele %s byla zmìnìna'); +@define('USER_LEVEL', 'Úroveò'); +@define('DELETE_USER', 'Chcete vymazat u¾ivatele #%d %s. Myslíte to vá¾nì? Tato akce znemo¾ní prohlí¾et jím vytvoøené záznamy na hlavní stránce.'); +@define('DELETED_USER', 'U¾ivatel #%d %s je vymazán.'); +@define('LIMIT_TO_NUMBER', 'Kolik záznamù by mìlo být zobrazeno?'); +@define('ENTRIES_PER_PAGE', 'záznamù na stránku'); +@define('DIRECTORIES_AVAILABLE', 'Po kliknutí na nìkterý adresáø v seznamu mù¾ete vytvoøit dal¹í podadresáø.'); +@define('ALL_DIRECTORIES', 'v¹echny adresáøe'); +@define('MANAGE_DIRECTORIES', 'Práce s adresáøi'); +@define('DIRECTORY_CREATED', 'Adresáø %s byl vytvoøen.'); +@define('PARENT_DIRECTORY', 'Základní adresáø'); +@define('CONFIRM_DELETE_DIRECTORY', 'Jste si jist, ¾e chcete odstranit v¹echen obsah adresáøe %s?'); +@define('ERROR_NO_DIRECTORY', 'Chyba: Adresáø %s neexistuje'); +@define('CHECKING_DIRECTORY', 'Kontrola souborù v adresáøi %s'); +@define('DELETING_FILE', 'Vymazání souboru %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Nelze odstranit neprázdný adresáø. Zkuste zvolit "vynucené mazání", pokud potøebujete vymazat tyto soubory, a ode¹lete po¾adavek znovu. Existující soubory jsou:'); +@define('DIRECTORY_DELETE_FAILED', 'Vymazání adresáøe %s se nepodaøilo. Zkontrolujte oprávnìní nebo ètìte zprávu vý¹e.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Adresáø %s byl úspì¹nì vymazán.'); +@define('SKIPPING_FILE_EXTENSION', 'Vynechán soubor: Chybìjící pøípona %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Vynechán soubor: %s nelze naèíst.'); +@define('FOUND_FILE', 'Zalo¾it nový/zmìnit soubor: %s.'); +@define('PERMISSIONS', 'Oprávnìní'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Databáze'); +@define('INSTALL_CAT_DB_DESC', 'Sem vlo¾te v¹ech informace o databázi. Serendipity je potøebuje k funkci.'); +@define('INSTALL_DBTYPE', 'Typ'); +@define('INSTALL_DBTYPE_DESC', 'Typ databáze'); +@define('INSTALL_DBHOST', 'Hostitel'); +@define('INSTALL_DBHOST_DESC', 'Název hostitelského serveru'); +@define('INSTALL_DBUSER', 'U¾ivatel'); +@define('INSTALL_DBUSER_DESC', 'U¾ivatelské jméno'); +@define('INSTALL_DBPASS', 'Heslo'); +@define('INSTALL_DBPASS_DESC', 'U¾ivatelské heslo'); +@define('INSTALL_DBNAME', 'Název'); +@define('INSTALL_DBNAME_DESC', 'Název databáze'); +@define('INSTALL_DBPREFIX', 'Prefix'); +@define('INSTALL_DBPREFIX_DESC', 'Prefix pro záznamy v databázi, napø. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Cesty'); +@define('INSTALL_CAT_PATHS_DESC', 'Cesty k rùzným adresáøùm a souborùm. Nezapomeòte na ukonèovací lomítko pro adresáøe!'); +@define('INSTALL_FULLPATH', 'Úplná cesta'); +@define('INSTALL_FULLPATH_DESC', 'Úplná absolutní cesta k va¹í instalaci Serendipity.'); +@define('INSTALL_UPLOADPATH', 'Cesta pro uploady'); +@define('INSTALL_UPLOADPATH_DESC', 'Sem budou smìrovány uploady, relativnì k \'úplné cestì\' - typicky \'uploads/\''); +@define('INSTALL_RELPATH', 'Relativní cesta'); +@define('INSTALL_RELPATH_DESC', 'Cesta k Serendipity pro vá¹ prohlí¾eè, typicky \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Relativní cesta k template'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Cesta k adresáøi, obsahujícímu vzory (templates) - relativní k \'relativní cestì\''); +@define('INSTALL_RELUPLOADPATH', 'Relativní cesta k uploadùm'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Cesta k uploadùm pro prohlí¾eèe - relativní k \'relativní cestì\''); +@define('INSTALL_URL', 'URL weblogu'); +@define('INSTALL_URL_DESC', 'Základní URL va¹í instalace Serendipity'); +@define('INSTALL_INDEXFILE', 'Indexový soubor'); +@define('INSTALL_INDEXFILE_DESC', 'Název souboru pou¾itého jako index'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Základní nastavení'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Úprava správy Serendipity'); +@define('INSTALL_USERNAME', 'Jméno admina'); +@define('INSTALL_USERNAME_DESC', 'Jméno pro pøihlá¹ení admina'); +@define('INSTALL_PASSWORD', 'Heslo admina'); +@define('INSTALL_PASSWORD_DESC', 'Heslo pro pøihlá¹ení admina'); +@define('INSTALL_EMAIL', 'E-mail admina'); +@define('INSTALL_EMAIL_DESC', 'E-mail pro pøihlá¹ení admina'); +@define('INSTALL_SENDMAIL', 'Posílat e-maily adminovi?'); +@define('INSTALL_SENDMAIL_DESC', 'Chcete dostávat e-mailem zprávy o komentáøích k va¹im záznamùm?'); +@define('INSTALL_SUBSCRIBE', 'Umo¾nit odbìr komentáøù?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Umo¾nit u¾ivatelùm pøihlá¹ení k odbìru komentáøù k záznamùm'); +@define('INSTALL_BLOGNAME', 'Název'); +@define('INSTALL_BLOGNAME_DESC', 'Název va¹eho weblogu'); +@define('INSTALL_BLOGDESC', 'Popis'); +@define('INSTALL_BLOGDESC_DESC', 'Popis weblogu'); +@define('INSTALL_LANG', 'Jazyk'); +@define('INSTALL_LANG_DESC', 'Vyberte jazyk va¹eho weblogu'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Vzhled a volby'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Úprava vzhledu a chování Serendipity'); +@define('INSTALL_WYSIWYG', 'Pou¾ívat WYSIWYG editor?'); +@define('INSTALL_WYSIWYG_DESC', 'Chcete pou¾ívat WYSIWYG editor? (Pracuje v IE5+, èásteènì v Mozille 1.3+)'); +@define('INSTALL_XHTML11', 'Vnutit kompatibilitu s XHTML 1.1?'); +@define('INSTALL_XHTML11_DESC', 'Chcete plnou kompatibilitu s XHTML 1.1? (mù¾e zpùsobit problémy ve star¹ích prohlí¾eèích)'); +@define('INSTALL_POPUP', 'Umo¾nit pou¾ití vyskakovacích oken'); +@define('INSTALL_POPUP_DESC', 'Chcete ve weblogu pou¾ívat vyskakovací okna pro komentáøe, odezvy a pod.?'); +@define('INSTALL_EMBED', 'Je Serendipity vlo¾ené?'); +@define('INSTALL_EMBED_DESC', 'Pokud chcete umístit weblog do va¹ich stránek, zvolte ano pro odstranìní v¹ech záhlaví, bude zobrazován jen obsah. Mù¾ete pou¾ít volitelný soubor indexFile pro obalení obsahu vlastními záhlavími a sloupci. Více informací najdete v souboru README!'); +@define('INSTALL_BLOCKREF', 'Blokovaní odbìratelé'); +@define('INSTALL_BLOCKREF_DESC', 'Chcete zamezit pøístup z urèitých adres? Seznam adres oddìlujte \';\' a pozor, adresy jsou blokovány vèetnì subadres!'); +@define('INSTALL_REWRITE', 'Pøepisování URL'); +@define('INSTALL_REWRITE_DESC', 'Urèení pravidel pro tvorbu URL. Zapnutí módu pøepisování zajistí správné URL va¹eho weblogu a lep¹í indexaci pro vyhledávaèe, jako je Google. Vá¹ webserver musí podporovat mod_rewrite nebo "AllowOverride All" v adresáøi pro Serendipity. Defaultní nastavení je automaticky detekováno.'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Úpravy obrázkù'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Vlo¾ení základních informací o zpùsobu zpracování obrázkù'); +@define('INSTALL_IMAGEMAGICK', 'Pou¾ívat Imagemagick?'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Máte instalován Imagemagick?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Cesta ke konverznímu souboru'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Úplná cesta a název konverzního souboru Imagemagick'); +@define('INSTALL_THUMBSUFFIX', 'Sufix náhledù'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Náhledy budou pojmenovány original.sufix.ext'); +@define('INSTALL_THUMBWIDTH', 'Rozmìry náhledù'); +@define('INSTALL_THUMBWIDTH_DESC', 'Pevná ¹íøka automaticky generovaných náhledù'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Osobní nastavení'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Nastavení va¹eho úètu'); +@define('USERCONF_USERNAME', 'Jméno'); +@define('USERCONF_USERNAME_DESC', 'Va¹e u¾ivatelské jméno (pøezdívka)'); +@define('USERCONF_PASSWORD', 'Heslo'); +@define('USERCONF_PASSWORD_DESC', 'Va¹e heslo'); +@define('USERCONF_EMAIL', 'E-mailová adresa'); +@define('USERCONF_EMAIL_DESC', 'Vá¹ e-mail'); +@define('USERCONF_SENDCOMMENTS', 'Posílat zprávy o komentáøích?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Chcete dostávat zprávy o komentáøích e-mailem?'); +@define('USERCONF_SENDTRACKBACKS', 'Posílat zprávy o odezvách?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Chcete dostávat zprávy o odezvách na záznamy e-mailem?'); +@define('USERCONF_ALLOWPUBLISH', 'Právo publikovat záznamy?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Umo¾nit u¾ivateli publikovat záznamy'); + +@define('ALREADY_SUBCATEGORY', '%s je opravdu subkategorie pod %s.'); +@define('PARENT_CATEGORY', 'Nadøazená kategorie'); +@define('IN_REPLY_TO', 'Odpovìï na'); +@define('TOP_LEVEL', 'Nejvy¹¹í úroveò'); +@define('XML_IMAGE_TO_DISPLAY', 'Znak XML'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Odkazy na XML kanály budou zobrazeny s tímto znakem. Nechejte prázdné pro pùvodní nastavení, nebo zadejte \'none\' pro vypnutí.'); +@define('SUCCESS', 'Úspìch'); + +@define('POWERED_BY_SHOW_TEXT', 'Zobrazit "Serendipity" jako text'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Vytvoøeno v "Serendipity" se zobrazí jako text'); +@define('POWERED_BY_SHOW_IMAGE', 'Zobrazit "Serendipity" s logem'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Zobrazí se logo Serendipity'); +@define('INSTALL_TOP_AS_LINKS', 'Zobrazit Top výstupy/odbìratele jako linky?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"Ne": Výstupy a adresy odbìratelù budou zobrazeny jako èistý text pro zamezení spamu, "Ano": nebo jako hyperlinky. "Default": Pou¾ít globální nastavení (doporuèeno).'); +@define('SETTINGS_SAVED_AT', 'Nové nastavení bylo ulo¾eno v %s'); +@define('PLUGIN_ITEM_DISPLAY', 'Kde by mìla být tato polo¾ka zobrazena?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'V roz¹íøené èásti'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'V úvodu'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'V obou èástech'); + +@define('RSS_IMPORT_CATEGORY', 'Pou¾ít tuto kategorii pro neurèené záznamy'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Neznámá chyba, soubor nebyl nahrán. Je mo¾né, ¾e délka souboru pøekraèuje maximum, povolené serverem. Spojte se s va¹ím ISP nebo editujte soubor php.ini a povolte vìt¹í velikost.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Odeslané komentáøe budou pøed uveøejnìním moderovány.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Máte k dispozici tyto volby:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Pozor: Tento komentáø musí být pøed uveøejnìním odsouhlasen'); +@define('DELETE_COMMENT', 'Vymazat komentáø'); +@define('APPROVE_COMMENT', 'Odsouhlasit komentáø'); +@define('REQUIRES_REVIEW', 'Vy¾ádat pøezkoumání'); +@define('COMMENT_APPROVED', 'Komentáø #%s byl odsouhlasen'); +@define('COMMENT_DELETED', 'Komentáø #%s byl vymazán'); +@define('VIEW', 'Ukázat'); +@define('COMMENT_ALREADY_APPROVED', 'Komentáø #%s se jeví jako skuteènì odsouhlasený'); +@define('COMMENT_EDITED', 'Vybraný komentáø byl editován'); +@define('HIDE', 'Skrýt'); +@define('VIEW_EXTENDED_ENTRY', 'Pokraèovat ve ètení "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Tento odkaz není mínìn jako klikatelný. Obsahuje zpìtné URI záznamu. Tento URI mù¾ete pou¾ít k odesílání pingù a sledování odezvy na tento záznam. Odkaz zkopírujete kliknutím pravou my¹í a volbou "Kopírovat odkaz" v Internet Exploreru nebo "Zkopírovat umístìní odkazu" v Mozille.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Pozor: Tato odezva musí být pøed uveøejnìním odsouhlasena'); +@define('DELETE_TRACKBACK', 'Vymazat odezvu'); +@define('APPROVE_TRACKBACK', 'Odsouhlasit odezvu'); +@define('TRACKBACK_APPROVED', 'Odezva #%s byla odsouhlasena'); +@define('TRACKBACK_DELETED', 'Odezva #%s byla vymazána'); +@define('COMMENTS_MODERATE', 'Komentáøe a odezvy k tomuto záznamu budou moderovány'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Pou¾ít https pro pøihlá¹ení'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Umo¾òuje pou¾ít spojení https pro pøihlá¹ení. Vá¹ server to musí podporovat!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Udìlat externí odkazy klikatelné?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"Ne": Neoznaèené externí odkazy (Top výstupy, Top odbìratelé, U¾ivatelské komentáøe) nebudou ukázány/budou ukázány jako bì¾ný text v¹ude, kde je to mo¾né, pro omezení spamu (doporuèeno). "Ano": Neoznaèené externí odkazy budou ukázány jako hyperlinky. Toto mù¾e být pøepsáno v konfiguraci pluginù!'); +@define('PAGE_BROWSE_COMMENTS', 'Stránka %s ze %s, celkem %s komentáøù'); +@define('FILTERS', 'Filtry'); +@define('FIND_ENTRIES', 'Hledat záznamy'); +@define('FIND_COMMENTS', 'Hledat komentáøe'); +@define('FIND_MEDIA', 'Hledat média'); +@define('FILTER_DIRECTORY', 'Adresáø'); +@define('SORT_BY', 'Seøadit podle'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Odezva nebyla odeslána: nepodaøilo se spojení s %s na portu %d'); +@define('MEDIA', 'Média (obrázky)'); +@define('MEDIA_LIBRARY', 'Knihovna médií'); +@define('ADD_MEDIA', 'Pøidat'); +@define('ENTER_MEDIA_URL', 'Vlo¾te URL pøidávaného souboru:'); +@define('ENTER_MEDIA_UPLOAD', 'Vyberte soubor pro nahrání:'); +@define('SAVE_FILE_AS', 'Ulo¾it soubor jako:'); +@define('STORE_IN_DIRECTORY', 'Ulo¾it do následujího adresáøe: '); +@define('MEDIA_RENAME', 'Pøejmenovat soubor'); +@define('IMAGE_RESIZE', 'Zmìnit rozmìr obrázku'); +@define('MEDIA_DELETE', 'Vymazat soubor'); +@define('FILES_PER_PAGE', 'Souborù na stránku'); +@define('CLICK_FILE_TO_INSERT', 'Kliknìte na soubor, který chcete vlo¾it:'); +@define('SELECT_FILE', 'Vyberte soubor pro vlo¾ení:'); +@define('MEDIA_FULLSIZE', 'Plný rozmìr'); +@define('CALENDAR_BOW_DESC', 'Den, urèený jako zaèátek týdne. Default je pondìlí'); +@define('ALLOWS_YOU_BLAHBLAH', 'Vlo¾it odkaz do postranního bloku administrace weblogu'); +@define('CALENDAR', 'Kalendáø'); +@define('SUPERUSER_OPEN_ADMIN', 'Administrace'); +@define('SUPERUSER_OPEN_LOGIN', 'Pøihlá¹ení'); +@define('INVERT_SELECTIONS', 'Obrátit výbìr'); +@define('COMMENTS_DELETE_CONFIRM', 'Jste se jist vymazáním vybraných komentáøù?'); +@define('COMMENT_DELETE_CONFIRM', 'Jste si jist vymazáním komentáøe #%d, zapsaného %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Vymazat vybrané komentáøe'); +@define('VIEW_COMMENT', 'Ukázat komentáø'); +@define('VIEW_ENTRY', 'Ukázat záznam'); +@define('DELETE_FILE', 'Vymazat soubor s názvem %s'); +@define('ABOUT_TO_DELETE_FILE', 'Chcete vymazat %s
Jestli¾e pou¾íváte tento soubor v nìjakých záznamech, zpùsobí to nepøístupnost odkazù nebo obrázkù.
Chcete pøesto pokraèovat?

'); +@define('TRACKBACK_SENDING', 'Odeslání odezvy na URI %s...'); +@define('TRACKBACK_SENT', 'Odezva úspì¹ná'); +@define('TRACKBACK_FAILED', 'Odezva neúspì¹ná: %s'); +@define('TRACKBACK_NOT_FOUND', 'URI odezvy neexistuje.'); +@define('TRACKBACK_URI_MISMATCH', 'Automaticky získané URI neodpovídá va¹emu cílovému.'); +@define('TRACKBACK_CHECKING', 'Testvání %s pro mo¾né odezvy...'); +@define('TRACKBACK_NO_DATA', 'Cíl neobsahuje data'); +@define('TRACKBACK_SIZE', 'Cílové URI pøekroèilo max. velikost souboru %s bytù.'); +@define('VIEWMODE_THREADED', 'Pøepnout na vláknové zobrazení'); +@define('COMMENTS_VIEWMODE_THREADED', 'Vláknové'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Lineární'); +@define('DISPLAY_COMMENTS_AS', 'Zobrazit komentáøe jako'); +@define('ADD_MEDIA_BLAHBLAH', 'Pøidat soubor do schránky médií:

Zde mù¾ete ukládat mediální soubory, nebo urèit, kde je získat z WEBu! Pokud nemáte odpovídající obrázek, hledejte na Google odpovìï na va¹i potøebu, obvykle se zadaøí :).

Vyberte metodu:
'); +@define('COMMENTS_FILTER_SHOW', 'Zobrazit'); +@define('COMMENTS_FILTER_ALL', 'V¹e'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Pouze povolené'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Èekající na povolení'); +@define('RSS_IMPORT_BODYONLY', 'Ulo¾it celý importovaný text do "hlavní" èásti, nerozdìlovat do "roz¹íøené" èásti.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Zobrazit celé èlánky vèetnì roz¹íøené èásti v RSS kanálu'); +@define('MT_DATA_FILE', 'Soubory Movable Type'); +@define('FORCE', 'Vnutit'); +@define('CREATE_AUTHOR', 'Vytvoøit autora \'%s\'.'); +@define('CREATE_CATEGORY', 'Vytvoøit kategorii \'%s\'.'); +@define('MYSQL_REQUIRED', 'Pro provedení této akce je nutné mít databázi MySQL.'); +@define('COULDNT_CONNECT', 'Nebylo mo¾né se spojit s databází MySQL: %s.'); +@define('COULDNT_SELECT_DB', 'Nebylo mo¾né vybrat databázi: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Nebylo mo¾né vybrat u¾ivatelské informace: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Nebylo mo¾né vybrat informace o kategorii: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Nebylo mo¾né vybrat informace o záznamu: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Nebylo mo¾né vybrat informace o komentáøi: %s.'); +@define('WEEK', 'Týden'); +@define('WEEKS', 'Týdny'); +@define('MONTHS', 'Mìsíce'); +@define('DAYS', 'Dny'); +@define('ARCHIVE_FREQUENCY', 'Kalendáøní krok'); +@define('ARCHIVE_FREQUENCY_DESC', 'Kalendáøní krok mezi prvky seznamu'); +@define('ARCHIVE_COUNT', 'Poèet prvkù v seznamu'); +@define('ARCHIVE_COUNT_DESC', 'Celkový poèet zobrazených mìsícù, týdnù nebo dnù'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Ní¾e je seznam instalovaných pluginù'); +@define('SIDEBAR_PLUGIN', 'postranní plugin'); +@define('EVENT_PLUGIN', 'plugin události'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Kliknìte a instalujte nový %s'); +@define('VERSION', 'verze'); +@define('INSTALL', 'Instalovat'); +@define('ALREADY_INSTALLED', 'Instalován'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Vyberte plugin, který chcete instalovat'); +@define('INSTALL_OFFSET', 'Èasový posun serveru'); +@define('STICKY_POSTINGS', 'Pøilepené záznamy'); +@define('INSTALL_FETCHLIMIT', 'Záznamy zobrazené na hlavní stránce'); +@define('INSTALL_FETCHLIMIT_DESC', 'Poèet záznamù, zobrazených na hlavní stránce'); +@define('IMPORT_ENTRIES', 'Import dat'); +@define('EXPORT_ENTRIES', 'Export záznamù'); +@define('IMPORT_WELCOME', 'Vítejte v utilitì pro import dat'); +@define('IMPORT_WHAT_CAN', 'Zde mù¾ete importovat záznamy z jiných weblogù'); +@define('IMPORT_SELECT', 'Vyberte software, ze kterého chcete importovat'); +@define('IMPORT_PLEASE_ENTER', 'Vlo¾te data po¾adovaná ní¾e'); +@define('IMPORT_NOW', 'Importovat!'); +@define('IMPORT_STARTING', 'Start importu...'); +@define('IMPORT_FAILED', 'Import se nezdaøil'); +@define('IMPORT_DONE', 'Import úspì¹nì dokonèen'); +@define('IMPORT_WEBLOG_APP', 'Weblogová aplikace'); +@define('EXPORT_FEED', 'Exportovat plný RSS kanál'); +@define('STATUS', 'Stav po importu'); +@define('IMPORT_GENERIC_RSS', 'Základní RSS import'); +@define('ACTIVATE_AUTODISCOVERY', 'Odeslat odezvy na odkazy obsa¾ené v záznamu'); +@define('WELCOME_TO_ADMIN', 'Vítejte v Administraèní sekci Serendipity .'); +@define('PLEASE_ENTER_CREDENTIALS', 'Vlo¾te oprávnìní.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Vytvoøeno pomocí Serendipity %s a PHP %s'); +@define('INSTALL_USEGZIP', 'Pou¾ijte kompresi gzip'); +@define('INSTALL_USEGZIP_DESC', 'Doporuèujeme pou¾ít kompresi stránek pro jejich urychlené naèítání'); +@define('INSTALL_SHOWFUTURE', 'Zobrazit budoucí záznamy'); +@define('INSTALL_SHOWFUTURE_DESC', 'Tato volba umo¾ní zobrazení budoucích záznamù blogu. Defaultnì jsou skryté a budou zobrazeny a¾ v èase jejich vydání.'); +@define('INSTALL_DBPERSISTENT', 'Pou¾ít trvalé pøipojení'); +@define('INSTALL_DBPERSISTENT_DESC', 'Umo¾nit trvalé pøipojení k databázi, více zde. Bì¾nì to není doporuèeno'); +@define('NO_IMAGES_FOUND', '®ádné obrázky'); +@define('PERSONAL_SETTINGS', 'Osobní nastavení'); +@define('REFERER', 'Odbìratel'); +@define('NOT_FOUND', 'Není obsa¾en'); +@define('NOT_WRITABLE', 'Nezapisovatelný'); +@define('WRITABLE', 'Zapisovatelný'); +@define('PROBLEM_DIAGNOSTIC', 'Byly diagnostikovány problémy, tak¾e nelze pokraèovat v instalaci, dokud nebudou odstranìny'); +@define('SELECT_INSTALLATION_TYPE', 'Vyberte typ instalace'); +@define('WELCOME_TO_INSTALLATION', 'Vítejte v instalaci Serendipity'); +@define('FIRST_WE_TAKE_A_LOOK', 'Nejdøíve se podíváme na va¹e základní nastavení a zkusíme diagnostikovat pøípadné problémy'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Chyby budou zobrazeny %s, doporuèení %s a úspìch %s'); +@define('RED', 'èervenì'); +@define('YELLOW', '¾lutì'); +@define('GREEN', 'zelenì'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s - pøedinstalaèní zpráva'); +@define('RECOMMENDED', 'Doporuèeno'); +@define('ACTUAL', 'Aktuální'); +@define('PHPINI_CONFIGURATION', 'konfigurace php.ini'); +@define('PHP_INSTALLATION', 'Instalace PHP'); +@define('THEY_DO', 'they do'); +@define('THEY_DONT', 'they don\'t'); +@define('SIMPLE_INSTALLATION', 'Jednoduchá instalace'); +@define('EXPERT_INSTALLATION', 'Expertní instalace'); +@define('COMPLETE_INSTALLATION', 'Kompletní instalace'); +@define('WONT_INSTALL_DB_AGAIN', 'nechci znovu instalovat databázi'); +@define('CHECK_DATABASE_EXISTS', 'Kontrola, jestli databáze a tabulky opravdu existují'); +@define('CREATING_PRIMARY_AUTHOR', 'Vytvoøení hlavního autora \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Nastavení defaultního vzoru'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Instalace defaultních pluginù'); +@define('SERENDIPITY_INSTALLED', 'Serendipity byl úspì¹nì nainstalován'); +@define('VISIT_BLOG_HERE', 'Zde se pøepnete do svého nového weblogu'); +@define('THANK_YOU_FOR_CHOOSING', 'Dìkujeme za volbu Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'Pøi instalaci byla detekována chyba'); +@define('OPERATING_SYSTEM', 'Operaèní systém'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('IMAGE_ROTATE_LEFT', 'Otoèit o 90 stupòù doleva'); +@define('IMAGE_ROTATE_RIGHT', 'Otoèit o 90 stupòù doprava'); +@define('TEMPLATE_SET', '\'%s\' byl nastaven jako defaultní vzor (template)'); +@define('SEARCH_ERROR', 'Funkce vyhledávání nepracovala podle oèekávání. Poznámka pro administrátora blogu: Mohlo to být zpùsobeno nepøítomností pøíslu¹ných indexù v databázi. U¾ivatelský úèet v databázi MySQL musí být oprávnìn vykonat tento dotaz:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
Specifická chyba vrácená databází byla:
%s
'); +@define('EDIT_THIS_CAT', 'Editace "%s"'); +@define('CATEGORY_REMAINING', 'Vymazat kategorii a pøemístit záznamy do kategorie'); +@define('CATEGORY_INDEX', 'Ní¾e je seznam kategorií, které mù¾et pou¾ít k va¹emu záznamu'); +@define('NO_CATEGORIES', '®ádné kategorie'); +@define('RESET_DATE', 'Resetovat datum'); +@define('RESET_DATE_DESC', 'Kliknìte a resetujte datum na aktuální'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Oprávnìní mù¾e být nastaveno s pou¾itím povelu: `%s` v adresáøi, nebo nastavením pomocí FTP programu'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Varování: Vá¹ vzor pou¾ívá nepovolenou metodu, je-li to mo¾né, proveïte aktualizaci'); +@define('ENTRY_PUBLISHED_FUTURE', 'Tento záznam je¹tì není publikován.'); +@define('ENTRIES_BY', 'Záznamy od %s'); +@define('PREVIOUS', 'Pøedchozí'); +@define('NEXT', 'Dal¹í'); +@define('APPROVE', 'Povolit'); +@define('DO_MARKUP_DESCRIPTION', 'Pøevést znaèky na text (smajlíky, zkratky *, /, _, ...). Vypnutí této volby zajistí ulo¾ení HTML kódù v textu.'); +@define('CATEGORY_ALREADY_EXIST', 'Kategorie nazvaná "%s" skuteènì existuje'); +@define('IMPORT_NOTES', 'Poznámka:'); +@define('ERROR_FILE_FORBIDDEN', 'Nejste oprávnìn nahrávat soubory s aktivním obsahem'); +@define('ADMIN', 'Administrace'); +@define('ADMIN_FRONTPAGE', 'Hlavní stránka'); +@define('QUOTE', 'Citace'); +@define('IFRAME_SAVE', 'Serendipity ukládá vá¹ záznam, vytváøí odezvy a zaji¹»uje mo¾ná XML-RPC spojení. Mù¾e to chvíli trvat...'); +@define('IFRAME_SAVE_DRAFT', 'Koncept tohoto záznamu byl ulo¾en'); +@define('IFRAME_PREVIEW', 'Serendipity nyní vytváøí náhled va¹eho záznamu...'); +@define('IFRAME_WARNING', 'Vá¹ prohlí¾eè nepodporuje iframe. Otevøete soubor serendipity_config.inc.php a nastavte promìnnou $serendipity[\'use_iframe\'] na FALSE.'); +@define('NONE', 'nic'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Základní nastavení pro nové záznamy'); +@define('UPGRADE', 'Aktualizace'); +@define('UPGRADE_TO_VERSION', 'Aktualizace na verzi %s'); +@define('DELETE_DIRECTORY', 'Vymazat adresáø'); +@define('DELETE_DIRECTORY_DESC', 'Chcete vymazat obsah adresáøe, obsahující mediální soubory, které mohou být pou¾ívány ve va¹ich záznamech.'); +@define('FORCE_DELETE', 'Vymazat V©ECHNY soubory v adresáøi, vèetnì tìch, které nejsou vytvoøeny pomocí Serendipity'); +@define('CREATE_DIRECTORY', 'Vytvoøit adresáø'); +@define('CREATE_NEW_DIRECTORY', 'Vytvoøit nový adresáø'); +@define('CREATE_DIRECTORY_DESC', 'Zde mù¾ete vytvoøit adresáø pro ukládání mediálních souborù. Zvolte název adresáøe a pøípadný nadøízený adresáø.'); +@define('BASE_DIRECTORY', 'Základní adresáø'); +@define('USERLEVEL_EDITOR_DESC', 'Autor'); +@define('USERLEVEL_CHIEF_DESC', 'Redaktor'); +@define('USERLEVEL_ADMIN_DESC', 'Administrátor'); +@define('USERCONF_USERLEVEL', 'Úroveò'); +@define('USERCONF_USERLEVEL_DESC', 'Tato úroveò urèuje práva u¾ivatele weblogu.'); +@define('USER_SELF_INFO', 'Pøihlá¹en jako %s (%s)'); +@define('ADMIN_ENTRIES', 'Záznamy'); +@define('RECHECK_INSTALLATION', 'Pøekontrolovat instalaci'); +@define('IMAGICK_EXEC_ERROR', 'Nelze spustit: "%s", chyba: %s, vrací promìnnou: %d'); +@define('INSTALL_OFFSET_DESC', 'Vlo¾te poèet hodin mezi èasem serveru (aktuálnì: %clock%) a va¹í èasovou zónou'); +@define('UNMET_REQUIREMENTS', 'Nesplnìné po¾adavky: %s'); +@define('CHARSET', 'Znaková sada'); +@define('AUTOLANG', 'Pou¾ít jazyk prohlí¾eèe jako defaultní'); +@define('AUTOLANG_DESC', 'Zapnutím této volby urèíte, ¾e jazyk prohlí¾eèe bude pøevzat jako základní pro u¾ivatelské rozhraní a pro záznamy.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetekce pou¾ité HTTP hostitelské adresy'); +@define('INSTALL_AUTODETECT_URL_DESC', 'Pøi volbì "Ano" bude Serendipity pøedpokládat, ¾e HTTP adresa hostitele, pou¾itá náv¹tìvníkem, je va¹e základní nastavení URL. Zapnutí umo¾ní pou¾ívání rùzných domén k pøístupu na va¹e stránky, a pou¾ití této jedné domény pro v¹echny odkazy ke sledování zmìn na stránkách.'); +@define('CONVERT_HTMLENTITIES', 'Zkusit automatickou konverzi HTML entit?'); +@define('EMPTY_SETTING', 'Nespecifikoval jste platnou hodnotu pro "%s"!'); +@define('USERCONF_REALNAME', 'Skuteèné jméno'); +@define('USERCONF_REALNAME_DESC', 'Plné jméno autora. Toto jméno uvidí ètenáøi'); +@define('HOTLINK_DONE', 'Soubor pøipojen odkazem.
Hotovo.'); +@define('ENTER_MEDIA_URL_METHOD', 'Zpùsob pøipojení:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Poznámka: Pokud zvolíte odkaz na server, ujistìte se, ¾e máte potøebná práva, nebo ¾e jde o vá¹ web. Odkazy vám umo¾ní vyu¾ívat obrázky z jiných ne¾ místních zdrojù.'); +@define('MEDIA_HOTLINKED', 'odkazován'); +@define('FETCH_METHOD_IMAGE', 'Nahrání na server'); +@define('FETCH_METHOD_HOTLINK', 'Odkaz na server'); +@define('DELETE_HOTLINK_FILE', 'Vymazán odkazovaný soubor %s'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_da.inc.php b/lang/serendipity_lang_da.inc.php new file mode 100644 index 0000000..3288b96 --- /dev/null +++ b/lang/serendipity_lang_da.inc.php @@ -0,0 +1,671 @@ + +# Thanks to: Jeppe Lund, +# Robert Piil, + + +@define('LANG_CHARSET', 'ISO-8859-1'); +@define('DATE_LOCALES', 'danish, da, da_DK, da_DK.ISO8859-1'); +@define('DATE_FORMAT_ENTRY', '%A d. %e. %B %Y'); +@define('DATE_FORMAT_SHORT', '%d.%m.%Y %H:%M'); +@define('WYSIWYG_LANG', 'da'); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Serendipity Administrationssuite'); +@define('HAVE_TO_BE_LOGGED_ON', 'Du skal være logget ind for at kunne se denne side'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Du har indtastet et forkert brugernavn eller adgangskode'); +@define('APPEARANCE', 'Udseende'); +@define('MANAGE_STYLES', 'Administrer temaer'); +@define('CONFIGURE_PLUGINS', 'Konfigurerer plugins'); +@define('CONFIGURATION', 'Konfiguration'); +@define('BACK_TO_BLOG', 'Tilbage til weblog'); +@define('LOGIN', 'Login'); +@define('LOGOUT', 'Log ud'); +@define('LOGGEDOUT', 'Logget ud.'); +@define('CREATE', 'Opret'); +@define('SAVE', 'Gem'); +@define('NAME', 'Navn'); +@define('CREATE_NEW_CAT', 'Opret ny kategori'); +@define('I_WANT_THUMB', 'Jeg vil bruge minibilledet i min artikel.'); +@define('I_WANT_BIG_IMAGE', 'Jeg vil bruge det originale billede i min artikel.'); +@define('I_WANT_NO_LINK', 'Vis billedet uden link'); +@define('I_WANT_IT_TO_LINK', 'Vis billedet med link'); +@define('BACK', 'Tilbage'); +@define('FORWARD', 'Fremad'); +@define('ANONYMOUS', 'Annonym'); +@define('NEW_TRACKBACK_TO', 'Ny trackback lavet til'); +@define('NEW_COMMENT_TO', 'Ny kommentar lavet til'); +@define('RECENT', 'Nyere...'); +@define('OLDER', 'Ældre...'); +@define('DONE', 'Færdig'); +@define('WELCOME_BACK', 'Velkommen tilbage,'); +@define('TITLE', 'Titel'); +@define('DESCRIPTION', 'Beskrivelse'); +@define('PLACEMENT', 'Placering'); +@define('DELETE', 'Slet'); +@define('UP', 'OP'); +@define('DOWN', 'NED'); +@define('ENTRIES', 'artikler'); +@define('NEW_ENTRY', 'Ny artikel'); +@define('EDIT_ENTRIES', 'Rediger artikler'); +@define('CATEGORIES', 'Kategorier'); +@define('WARNING_THIS_BLAHBLAH', "ADVARSEL:\\nDette kan tage lang tid hvis der er mange billeder uden minibilleder."); +@define('CREATE_THUMBS', 'Genopbyg minibilleder'); +@define('MANAGE_IMAGES', 'Administrer billeder'); +@define('NAME', 'Navn'); +@define('EMAIL', 'Email'); +@define('HOMEPAGE', 'Hjemmeside'); +@define('COMMENT', 'Kommentar'); +@define('REMEMBER_INFO', 'Husk oplysninger?'); +@define('SUBMIT_COMMENT', 'Tilføj kommentar'); +@define('NO_ENTRIES_TO_PRINT', 'Der er ingen artikler at vise'); +@define('COMMENTS', 'Kommentarer'); +@define('ADD_COMMENT', 'Tilføj kommentar'); +@define('NO_COMMENTS', 'Ingen kommentarer'); +@define('POSTED_BY', 'Skrevet af'); +@define('ON', 'aktiv'); +@define('A_NEW_COMMENT_BLAHBLAH', 'En ny kommentar er blevet oprettet på din blog "%s", til artiklen ved navn "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Et nyt trackback er blevet lavet til din artikel ved navn "%s".'); +@define('NO_CATEGORY', 'Ingen kategori'); +@define('ENTRY_BODY', 'Artikel indhold'); +@define('EXTENDED_BODY', 'Udvidet indhold'); +@define('CATEGORY', 'Kategori'); +@define('EDIT', 'Rediger'); +@define('NO_ENTRIES_BLAHBLAH', 'Ingen artikler blev fundet som indeholdt %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Din søgning på %s retunerede %s resultater:'); +@define('SEARCH_TOO_SHORT', 'Din søgning skal være på mere end 3 tegn'); +@define('IMAGE', 'Billede'); +@define('ERROR_FILE_NOT_EXISTS', 'Fejl: Det gamle filnavn findes ikke!'); +@define('ERROR_FILE_EXISTS', 'Fejl: Det nye filnavn bruges allerede, vælg et andet!'); +@define('ERROR_SOMETHING', 'Fejl: Der gik noget galt'); +@define('ADDING_IMAGE', 'Tilføjet billede...'); +@define('THUMB_CREATED_DONE', 'Minibillede er oprettet.
Done.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Fejl: Filen findes allerede på din maskine!'); +@define('GO', 'Begynd!'); +@define('NEWSIZE', 'Ny størrelse: '); +@define('RESIZE_BLAHBLAH', 'Ændre størrelse på %s

'); +@define('ORIGINAL_SIZE', 'Original størrelse: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Her kan du justere billedets størrelse. Hvis du vil bevare proportionerne, skal du bare indtaste én af værdirene og trykke på TAB-tasten, jeg vil dernæst automatisk beregne den anden værdi:'); +@define('QUICKJUMP_CALENDAR', 'Hurtigkalender'); +@define('QUICKSEARCH', 'Søgning'); +@define('SEARCH_FOR_ENTRY', 'Søg efter en artikel'); +@define('ARCHIVES', 'Arkiver'); +@define('BROWSE_ARCHIVES', 'Gennemse arkiver efter måneder'); +@define('TOP_REFERRER', 'Referencer'); +@define('SHOWS_TOP_SITES', 'Viser de sites som oftest linker til din blog'); +@define('TOP_EXITS', 'Udgangssider'); +@define('SHOWS_TOP_EXIT', 'Viser de udgangssider der er klikket flest gange på'); +@define('SYNDICATION', 'Syndikering'); +@define('SHOWS_RSS_BLAHBLAH', 'Viser RSS syndikeringslinks'); +@define('ADVERTISES_BLAHBLAH', 'Reklamer for din blogs oprindelse'); +@define('HTML_NUGGET', 'HTML Nugget'); +@define('HOLDS_A_BLAHBLAH', 'Indeholder et stykke HTML i din sidebar'); +@define('TITLE_FOR_NUGGET', 'Titel på din nugget'); +@define('THE_NUGGET', 'HTML-indholdet af din nugget'); +@define('SYNDICATE_THIS_BLOG', 'Syndiker denne blog'); +@define('YOU_CHOSE', 'Du valgte %s'); +@define('IMAGE_SIZE', 'Billedestørrelse'); +@define('IMAGE_AS_A_LINK', 'Billedeindsættelse'); +@define('POWERED_BY', 'Drives af'); +@define('TRACKBACKS', 'Trackbacks'); +@define('TRACKBACK', 'Trackback'); +@define('NO_TRACKBACKS', 'Ingen Trackbacks'); +@define('TOPICS_OF', 'Emner af'); +@define('VIEW_FULL', 'Vis i fuld'); +@define('VIEW_TOPICS', 'Vis emner'); +@define('AT', 'kl'); +@define('SET_AS_TEMPLATE', 'Sæt som skabelon'); +@define('IN', 'i'); +@define('EXCERPT', 'Uddrag'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Link til artikel'); +@define('LINK_TO_REMOTE_ENTRY', 'Link til ekstern artikel'); +@define('IP_ADDRESS', 'IP-adresse'); +@define('USER', 'Bruger'); +@define('THUMBNAIL_USING_OWN', 'Bruger %s som dets eget minibillede, fordi det allerede er så lille.'); +@define('THUMBNAIL_FAILED_COPY', 'Ville gerne have brugt %s som dets egen minibillede, men kunne ikke kopiere!'); +@define('AUTHOR', 'Forfatter'); +@define('LAST_UPDATED', 'Sidst opdateret'); +@define('TRACKBACK_SPECIFIC', 'Trackback URI til denne artikel'); +@define('DIRECT_LINK', 'Direkte link til denne artikel'); +@define('COMMENT_ADDED', 'Din kommentar blev tilføjet. '); +@define('COMMENT_ADDED_CLICK', 'Klik %her for at gå tilbage%s til kommentarerne, og %sher for at lukke%s dette vindue.'); +@define('COMMENT_NOT_ADDED', 'Din kommentar kunne ikke tilføjes fordi kommentarer til denne artikel er blevet deaktiveret.'); +@define('COMMENT_NOT_ADDED_CLICK', 'Klik %sher for at gå tilbage%s til kommentarene, og %sher for at lukke%s dette vindue. '); +@define('COMMENTS_DISABLE', 'Tillad ikke kommentarer til denne artikel'); +@define('COMMENTS_ENABLE', 'Tillad kommentarer til denne artikel'); +@define('COMMENTS_CLOSED', 'Forfatteren har valgt ikke at tillade kommentarer til denne artikel'); +@define('EMPTY_COMMENT', 'Din kommentar indeholdt ikke noget, gå venligst %stilbage%s og prøv igen'); +@define('ENTRIES_FOR', 'Artikler fra %s'); +@define('DOCUMENT_NOT_FOUND', 'Dokumentet %s kunne ikke findes.'); +@define('USERNAME', 'Brugernavn'); +@define('PASSWORD', 'Adgangskode'); +@define('AUTOMATIC_LOGIN', 'Gem oplysningerne'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity Installation'); +@define('LEFT', 'venstre'); +@define('RIGHT', 'højre'); +@define('HIDDEN', 'skjult'); +@define('REMOVE_TICKED_PLUGINS', 'Fjern valgte plugins'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Gem layout-ændringerne'); +@define('COMMENTS_FROM', 'Kommentar fra'); +@define('ERROR', 'Fejl'); +@define('ENTRY_SAVED', 'Din artikel blev gemt'); +@define('DELETE_SURE', 'Er du sikker på du vil slette #%s permanent?'); +@define('NOT_REALLY', 'Egentlig ikke...'); +@define('DUMP_IT', 'Smid den ud!'); +@define('RIP_ENTRY', 'Farvel artikel #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Kategori #%s blev slettet. Gamle artikler flyttet til kategori #%s'); +@define('CATEGORY_DELETED', 'Kategori #%s blev slettet.'); +@define('INVALID_CATEGORY', 'Ingen kategori blev valgt til sletning'); +@define('CATEGORY_SAVED', 'Kategori gemt'); +@define('SELECT_TEMPLATE', 'Vælg den skabelon du ønsker at bruge til din blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Der var problemer under indsættelsen af artiklerne!'); +@define('YES', 'Ja'); +@define('NO', 'Nej'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Check & gem'); +@define('DIRECTORY_WRITE_ERROR', 'Kan ikke skrive til biblioteket %s. Check filrettighederne.'); +@define('DIRECTORY_CREATE_ERROR', 'Biblioteket %s eksisterer ikke og kunne ikke oprettes. Opret venligst biblioteket manuelt'); +@define('DIRECTORY_RUN_CMD', ' -> Kør %s %s'); +@define('CANT_EXECUTE_BINARY', 'Kan ikke eksekvere %s'); +@define('FILE_WRITE_ERROR', 'Kan ikke skrive til filen %s.'); +@define('FILE_CREATE_YOURSELF', 'Opret venligst filen selv og check dens rettigheder'); +@define('COPY_CODE_BELOW', '
* Kopier blot koden nedenunder og placer den i %s i din %s mappe:

%s
' . "\n"); +@define('WWW_USER', 'Ændr www til den bruger som apache kører som (fx. nobody).'); +@define('BROWSER_RELOAD', 'Når du har gjort dette, så tryk på browserens "opdater" knap'); +@define('DIAGNOSTIC_ERROR', 'Vi har opdaget nogle fejl mens vi kørte nogle diagnostiker på dine indtastede informationer:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity er endnu ikke installeret. Klik her for at installere nu.'); +@define('INCLUDE_ERROR', 'serendipityfejl: Kunne ikke inkludere %s - Afbryder.'); +@define('DATABASE_ERROR', 'serendipityfejl: Kunne ikke oprette forbindelse til databasen - Afbryder.'); +@define('CREATE_DATABASE', 'Opretter standarddatabase setup...'); +@define('ATTEMPT_WRITE_FILE', 'Forsøger at skrive til %s ...'); +@define('WRITTEN_N_SAVED', 'Konfiguration skrevet & gemt'); +@define('IMAGE_ALIGNMENT', 'Billedejustering'); +@define('ENTER_NEW_NAME', 'Indtast det nye navn for: '); +@define('RESIZING', 'Ændre dimensioner'); +@define('RESIZE_DONE', 'Færdig (Ændrede %s billeder).'); +@define('SYNCING', 'Synkronisere databasen med billedemappen'); +@define('SYNC_DONE', 'Færdig (Synkroniserede %s billeder).'); +@define('DELETE_IMAGE_FAIL' , 'Kunne ikke slette billedet %s'); +@define('DELETE_THUMBNAIL', 'Slettede billedet ved navn %s'); +@define('FILE_NOT_FOUND', 'Kunne ikke finde filen ved navn %s, måske er den allerede slettet?'); +@define('ABORT_NOW', 'Afbryd nu'); +@define('REMOTE_FILE_NOT_FOUND', 'Filen kunne ikke findes på serveren, er du sikker på URLen: %s er korrekt?'); +@define('FILE_FETCHED', '%s hentet: %s'); +@define('FILE_UPLOADED', 'Filen %s er blevet uploadet: %s'); +@define('WORD_OR', 'eller'); +@define('SCALING_IMAGE', 'Ændre størrelsen på %s til %s x %s px'); +@define('KEEP_PROPORTIONS', 'Bevar forholdet'); +@define('REALLY_SCALE_IMAGE', 'Er du sikker på du vil ændre størrelsen på dette billede? Der er ingen vej tilbage!'); +@define('TOGGLE_ALL', 'Vis/Skjul alle'); +@define('TOGGLE_OPTION', 'Vis/Skjul denne option'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Abonnér på denne artikel'); +@define('UNSUBSCRIBE_OK', "%s er ikke længere abonnement på denne artikel"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Ny kommentar på abonnerede artikel "%s"'); +@define('SUBSCRIPTION_MAIL', "Hej %s,\n\nEn ny kommentar er blevet lavet til en artikel du abonnerer på hos \"%s\", ved navn \"%s\"\nNavnet på skribenten er: %s\n\nDu kan finde artiklen her: %s\n\nDu kan stoppe dit abonnement ved at klikke på dette link: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Hej %s,\n\nEt nyt trackback er blevet lavet til en artikel du abonnerer på hos \"%s\", ved navn \"%s\"\nNavnet på skribenten er: %s\n\nDu kan finde artiklen her: %s\n\nDu kan stoppe dit abonnement ved at klikke på dette link: %s\n"); +@define('SIGNATURE', "\n-- \n%s bruger Serendipity.\nDen bedste blog på dette, du kan også bruge det.\nKig nærmere på for at finde mere information."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 kommentarer'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Feltet "Hovedredaktør"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Feltet "webmaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Billede til RSS feedet'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Billedebredde'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Billedehøjde'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'Email adressen på webmasteren, hvis tilgængelig. (tom: skjult) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-mail adressen på redaktøren, hvis tilgængelig. (tom: skjult) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL på et billede i GIF/JPEG/PNG format, hvis tilgængeligt. (tom: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'i pixels, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'i pixels, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Feltet "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Antallet af minutter din blog skal gemmes af eksterne sider/programmer (tom: skjult) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Feltet "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Skal "pubDate"-feltet være indkapslet til en RSS-channel, for at vise datoen på den nyeste artikel?'); +@define('CONTENT', 'Indhold'); +@define('TYPE', 'Type'); +@define('DRAFT', 'Udkast'); +@define('PUBLISH', 'Udgiv'); +@define('PREVIEW', 'Vis'); +@define('DATE', 'Dato'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Advarsel: Den dato du indtastede var ugyldig. Det skal indtastes i følgende format: YYYY-MM-DD HH:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Viser listen over kategorier.'); +@define('ALL_AUTHORS', 'Alle forfattere'); +@define('CATEGORIES_TO_FETCH', 'Kategorier som skal hentes'); +@define('CATEGORIES_TO_FETCH_DESC', 'Hent kategorier fra en bestemt forfatter?'); +@define('PAGE_BROWSE_ENTRIES', 'Side %s af %s, i alt %s artikler'); +@define('PREVIOUS_PAGE', 'forrige side'); +@define('NEXT_PAGE', 'næste side'); +@define('ALL_CATEGORIES', 'Alle kategorier'); +@define('DO_MARKUP', 'Udført Markup-transformation'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Datoformat'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Formatet på artiklens faktiske dato, brug PHPs strftime() variabler. (Standard: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Kunne ikke åbne skabelonen, opdater Serendipity!'); +@define('ADVANCED_OPTIONS', 'Avancerede indstillinger'); +@define('EDIT_ENTRY', 'Rediger artikel'); +@define('HTACCESS_ERROR', 'For at kunne checke din lokale webserver\'s installation, skal Serendipity være i stand til at skrive til filen ".htaccess". Dette var ikke muligt pga. forkerte rettigheder. Justér rettighederne således:
  %s
og genindlæs siden.'); +@define('SORT_ORDER', 'Sorter efter'); +@define('SORT_ORDER_NAME', 'Filnavn'); +@define('SORT_ORDER_EXTENSION', 'Filtype'); +@define('SORT_ORDER_SIZE', 'Filstørrelse'); +@define('SORT_ORDER_WIDTH', 'Billedebrede'); +@define('SORT_ORDER_HEIGHT', 'Billedehøjde'); +@define('SORT_ORDER_DATE', 'Upload-dato'); +@define('SORT_ORDER_ASC', 'Stigende'); +@define('SORT_ORDER_DESC', 'Faldende'); +@define('THUMBNAIL_SHORT', 'Mini'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Formater %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Starten på ugen'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity har opdaget at din nuværende konfiguration passer til version %s. Serendipity selv er installeret som version %s, Det er nødvendigt at opgradere! Klik her!'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Velkommen til Serendipitys opgraderingsscript.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Scriptet vil hjælpe dig med at opgradere Serendipity %s.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Denne meddelelse vises, fordi Serendipity er installeret med version %s, men databasen er endnu ikke opgraderet til denne version.'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Databasen opdateringer (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Følgende .sql-filer skal eksekveres før Serendipity igen kan fungere normalt.'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Versionsspecifikke opgaver'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Ingen versionsspecifikke opgaver fundet'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Ønsker du at ovenstående opgaver udføres?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Nej, jeg udfører dem manuelt'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Ja tak!'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Det ser ud til at opgradering ikke er nødvendig.'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity er opgraderet'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Du har ignoreret en del af opgraderingen. Undersøg venligst om databasen er korrekt opdateret, og planlagte opgaver udført'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Din Serendipity-installation er nu opgraderet til version %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Du kan vende tilbage til din blog ved at klikke %sher%s'); +@define('MANAGE_USERS', 'Håndter brugerer'); +@define('CREATE_NEW_USER', 'Opret by bruger'); +@define('CREATE_NOT_AUTHORIZED', 'Du kan ikke redigere brugere med den samme brugerniveau som digselv'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Du kan ikke oprette brugere med en højere brugerniveau end digselv'); +@define('CREATED_USER', 'En ny bruger %s er blevet oprettet'); +@define('MODIFIED_USER', 'Egenskaberne for brugeren %s er blevet ændret'); +@define('USER_LEVEL', 'brugerniveau'); +@define('DELETE_USER', 'Du er ved at slette bruger #%d %s. Er du sikker? Dette vil forbyde visningen af alle artikler skrevet af ham.'); +@define('DELETED_USER', 'Bruger #%d %s er blevet slettet.'); +@define('LIMIT_TO_NUMBER', 'Hvor mange punkter skal vises?'); +@define('ENTRIES_PER_PAGE', 'artikler per side'); +@define('PERMISSIONS', 'Rettigheder'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Database indstillinger'); +@define('INSTALL_CAT_DB_DESC', 'Her kan du indtaste al din database information'); +@define('INSTALL_DBTYPE', 'Database type'); +@define('INSTALL_DBTYPE_DESC', 'Database type'); +@define('INSTALL_DBHOST', 'Database host'); +@define('INSTALL_DBHOST_DESC', 'Hostname til din database server'); +@define('INSTALL_DBUSER', 'Database bruger'); +@define('INSTALL_DBUSER_DESC', 'Brugernavnet der er brugt til at forbinde til din database'); +@define('INSTALL_DBPASS', 'Database adgangskode'); +@define('INSTALL_DBPASS_DESC', 'Adgangskoden der passer til ovenstående brugernavn'); +@define('INSTALL_DBNAME', 'Database navn'); +@define('INSTALL_DBNAME_DESC', 'Navnet på din database'); +@define('INSTALL_DBPREFIX', 'Database tabel præfix'); +@define('INSTALL_DBPREFIX_DESC', 'Præfix på tabelnavne, fx. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Stier'); +@define('INSTALL_CAT_PATHS_DESC', 'Forskellige stier til forskellige essentielle mapper og filer. Glem ikke efterfølgende slashes på biblioteker!'); +@define('INSTALL_FULLPATH', 'Fuld sti'); +@define('INSTALL_FULLPATH_DESC', 'Den fulde og absolutte sti til din serendipity installation'); +@define('INSTALL_UPLOADPATH', 'Upload sti'); +@define('INSTALL_UPLOADPATH_DESC', 'Alle uploads bliver placeret her, relativ til \'Full path\' - typisk \'uploads/\''); +@define('INSTALL_RELPATH', 'Relativ sti'); +@define('INSTALL_RELPATH_DESC', 'Sti til Serendipity i henhold til din browser, typisk \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Relativ skabelon sti'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Stien til mappen der indeholder dine skabeloner - Relativ til \'relative path\''); +@define('INSTALL_RELUPLOADPATH', 'Relativ upload sti'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Sti til dine uploads i henhold til din browser - Relativ til \'relative path\''); +@define('INSTALL_URL', 'URL til din blog'); +@define('INSTALL_URL_DESC', 'Base URL for din Serendipity installation'); +@define('INSTALL_INDEXFILE', 'Index fil'); +@define('INSTALL_INDEXFILE_DESC', 'Navnet på din Serendipity index fil'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Generelle indstillinger'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Tilpas den måde Serendipity opfører sig på'); +@define('INSTALL_USERNAME', 'Admin brugernavn'); +@define('INSTALL_USERNAME_DESC', 'Brugernavn til admin login'); +@define('INSTALL_PASSWORD', 'Admin adgangskode'); +@define('INSTALL_PASSWORD_DESC', 'Adgangskode til admin login'); +@define('INSTALL_EMAIL', 'Admin email'); +@define('INSTALL_EMAIL_DESC', 'E-mail adresse på ejeren af bloggen'); +@define('INSTALL_SENDMAIL', 'Send mails til admin?'); +@define('INSTALL_SENDMAIL_DESC', 'Vil du modtage emails når kommentare er givet på dine artikler?'); +@define('INSTALL_SUBSCRIBE', 'Tillad brugere at abonnere på artikler?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Tillad brugere at abonnere på en artikel og derved modtage en mail når der bliver oprettet nye kommentare på den artikel'); +@define('INSTALL_BLOGNAME', 'Navn på blog'); +@define('INSTALL_BLOGNAME_DESC', 'Titlen på din blog'); +@define('INSTALL_BLOGDESC', 'Blog beskrivelse'); +@define('INSTALL_BLOGDESC_DESC', 'Beskrivelse af din blog'); +@define('INSTALL_LANG', 'Sprog'); +@define('INSTALL_LANG_DESC', 'Vælg sproget på din blog'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Udseende og indstillinger'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Tilpas hvordan Serendipity ser ud og føles'); +@define('INSTALL_WYSIWYG', 'Brug WYSIWYG editor'); +@define('INSTALL_WYSIWYG_DESC', 'Vil du benytte WYSIWYG editoren? (Virker med IE5+, delvis i Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Gennemtving XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', 'Ønsker du at gennemtvinge XHTML 1.1 overholdelse (Kan skabe problemer i 4. generations browsere)'); +@define('INSTALL_POPUP', 'Aktiver brug af popup vinduer'); +@define('INSTALL_POPUP_DESC', 'Vil du åbne kommentarer og trackbacks i et popup vindue?'); +@define('INSTALL_EMBED', 'Er Serendipity embedded?'); +@define('INSTALL_EMBED_DESC', 'Hvis du ønsker at indkapsle Serendipity inde i en normal side, aktiver da dette direktiv for at ignorere headers og kun udskrive indholdet. Du kan benytte indexFile direktivet til at lave en wrapper fil hvor du placere din normale hjemmeside headers. Konsulter README filen for mere information!'); +@define('INSTALL_TOP_AS_LINKS', 'Vis top udgangssider/referencer som links?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"Nej": Udgangs- og henvisende sider er vist som ren tekst for at undgå google spam. "Ja": Udgangs- og henvisende sider er vist som hyperlinks. "standard": Brug indstillinger fra global konfiguration (anbefalet).'); +@define('INSTALL_BLOCKREF', 'Bloker referencer'); +@define('INSTALL_BLOCKREF_DESC', 'Er der nogle specielle hosts du ikke ønsker skal vises i reference listen? Separer listen af hostnavne med \';\' og bemærk at disse er blokere med substring masker!'); +@define('INSTALL_REWRITE', 'URL Omskrivning'); +@define('INSTALL_REWRITE_DESC', 'Vælg hvilken regel du ønsker at bruge når du generere URLs Aktivering at omskrivningsregler vil gøre dine URLs flotte og gøre din side bedre at indeksere for robotter som google. Webserveren skal enten understøtte mod_rewrite eller "AllowOverride All" for dit Serendipity bibliotek. Standardindstillingen er automatisk beregnet'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Billedekonverterings indstillinger'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Generel information om hvordan Serendipity skal håndtere billeder'); +@define('INSTALL_IMAGEMAGICK', 'Brug Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Har du image magick installeret og ønsker at bruge det til at ændre størrelse på billeder?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Sti til convert binær fil'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Fuld sti og navn på din image magick convert binær fil'); +@define('INSTALL_THUMBSUFFIX', 'Thumbnail suffiks'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Thumbnails vil blive navngivet i følgende format: original.[suffix].ext'); +@define('INSTALL_THUMBWIDTH', 'Thumbnail dimensioner'); +@define('INSTALL_THUMBWIDTH_DESC', 'Statisk maximal brede på et auto-genereret thumbnail'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Dine personlige detaljer'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Ændre dine personlige detaljer'); +@define('USERCONF_USERNAME', 'Dit brugernavn'); +@define('USERCONF_USERNAME_DESC', 'Brugernavnet du vil bruge for at logge ind i bloggen'); +@define('USERCONF_PASSWORD', 'Dit kodeord'); +@define('USERCONF_PASSWORD_DESC', 'Kodeordet du vil bruge for at logge ind i bloggen'); +@define('USERCONF_EMAIL', 'Din email adresse'); +@define('USERCONF_EMAIL_DESC', 'Din personlige email adresse'); +@define('USERCONF_SENDCOMMENTS', 'Send beskeder om nye kommentarer?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Ønsker du at modtage en mail når nye kommentarer bliver lavet på dine artikler?'); +@define('USERCONF_SENDTRACKBACKS', 'Send beskeder om nye trackbacks?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Ønsker du at modtage en mail når nye trackbacks bliver lavet på dine artikler?'); +@define('USERCONF_ALLOWPUBLISH', 'Tilladelse: Udgiv artikler?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Kan denne bruger udgive artikler?'); + +@define('DIRECTORIES_AVAILABLE', 'I listen over tilgængelige undermapper, kan du klikke på en ny mappe for at oprette en ny mappe inden for den stuktur.'); +@define('ALL_DIRECTORIES', 'alle mapper'); +@define('MANAGE_DIRECTORIES', 'Håndér mapper'); +@define('DIRECTORY_CREATED', 'Mappen %s er blevet oprettet.'); +@define('PARENT_DIRECTORY', 'Hovedmappe'); +@define('CONFIRM_DELETE_DIRECTORY', 'Er du sikker på du vil slette al indholdet af mappen %s?'); +@define('ERROR_NO_DIRECTORY', 'Fejl: Mappen %s eksistere ikke'); +@define('CHECKING_DIRECTORY', 'Checker filer i mappen %s'); +@define('DELETING_FILE', 'Sletter fil %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Kunne ikke fjerne en ikke-tom mappe. Afkryds "gennemtving sletning" feltet, hvis du vil slette disse og tryk derefter på submit igen. Eksisterende filer er:'); +@define('DIRECTORY_DELETE_FAILED', 'Sletning af mappe %s mislykkedes. Check rettigheder eller ovenstående beskeder.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Mappen %s er blevet slettet.'); +@define('SKIPPING_FILE_EXTENSION', 'Ignorerede filen: Manglende filtype %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Ignorere fil: %s er ikke læsbar.'); +@define('FOUND_FILE', 'Fandt ny/ændret fil: %s.'); +@define('ALREADY_SUBCATEGORY', '%s er allerede en underkategori af %s.'); +@define('PARENT_CATEGORY', 'Hovedkategori'); +@define('IN_REPLY_TO', 'Som svar på'); +@define('TOP_LEVEL', 'Topniveau'); +@define('XML_IMAGE_TO_DISPLAY', 'XML knap'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Links til XML Feeds vil blive vist med dette billede. Efterlad tomt for standard, indtast \'none\' for at deaktivere.'); +@define('SUCCESS', 'Succes'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', '.'); +@define('POWERED_BY_SHOW_TEXT', 'Vis "Serendipity" som tekst'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Vil vise "Serendipity Weblog" som tekst'); +@define('POWERED_BY_SHOW_IMAGE', 'Vis "Serendipity"" som et logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Vis Serendipity logoet'); +@define('SETTINGS_SAVED_AT', 'De nye indstillinger er blevet gemt kl %s'); +@define('PLUGIN_ITEM_DISPLAY', 'Hvor skal enheden vises?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Kun udvidet artikel'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Kun i oversigten'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Hele tiden'); +@define('RSS_IMPORT_CATEGORY', 'Brug denne kategori for kategoriløse artikler'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Der skete en ukendt fejl, filen blev ikke uploaded. Måske er din filstørrelse større end den maximale størrelse tilladt af din serveropsætning. Spørg din webudbyder eller rediger din php.ini fil for at tillade uploads af større filer.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Kommentarer på denne artikel vil først blive vist såfremt de bliver godkendt.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Du har følgende muligheder:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Advarsel: Denne kommentar kræver godkendelse førend den vil blive vist'); +@define('DELETE_COMMENT', 'Slet kommentar'); +@define('APPROVE_COMMENT', 'Godkend kommentar'); +@define('REQUIRES_REVIEW', 'Kræver godkendelse'); +@define('COMMENT_APPROVED', 'Kommentar #%s er blevet godkendt'); +@define('COMMENT_DELETED', 'Kommentar #%s er blevet slettet'); +@define('VIEW', 'Vis'); +@define('COMMENT_ALREADY_APPROVED', 'Kommentar #%s ser allerede ud til at være godkendt'); +@define('COMMENT_EDITED', 'Den valgte kommentar er blevet redigeret'); +@define('HIDE', 'Skjul'); +@define('VIEW_EXTENDED_ENTRY', 'Læs resten af "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Dette link er ikke ikke til at blive klikket. Det indeholder denne artikels trackback URI. Du kan bruge denne URI til at sende ping- & trackbacks fra din egen blog til denne artikel. For at kopiere linket, kan du højreklikke og vælge "Kopier genvej" i Internet Explorer eller "Copy Link Location" i Mozilla.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Advarsel: Dette trackback kræver godkendelse førend det vil blive vist'); +@define('DELETE_TRACKBACK', 'Slet trackback'); +@define('APPROVE_TRACKBACK', 'Godkend trackback'); +@define('TRACKBACK_APPROVED', 'Trackback #%s er blevet godkendt'); +@define('TRACKBACK_DELETED', 'Trackback #%s er blevet slettet'); +@define('COMMENTS_MODERATE', 'Kommentarer og trackbacks til denne artikel kræver godkendelse'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Brug https til login'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Lader loginlinket pege på en https-destination. Din webserver skal understøtte dette!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Gør eksterne links klikbare?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"nej": Eksterne links (Top udgangsider, Top henvisninger, bruger kommentarer) er ikke vist/vist som ren tekst hvor brugbart, for at forhindre google spam (anbefales). "ja": Eksterne links er vist som hyperlinks. Kan overskrives inde i hver enkel sidebar plugin konfigurationen!'); +@define('PAGE_BROWSE_COMMENTS', 'Side %s af %s, i alt %s kommentarer'); +@define('FILTERS', 'Filtrer'); +@define('FIND_ENTRIES', 'Find artikler'); +@define('FIND_COMMENTS', 'Find kommentarer'); +@define('FIND_MEDIA', 'Find media'); +@define('FILTER_DIRECTORY', 'Bibliotek'); +@define('SORT_BY', 'Sorter efter'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Intet trackback sendt: Kunne ikke åbne forbindelse til %s på port %d'); +@define('MEDIA', 'Media'); +@define('MEDIA_LIBRARY', 'Mediabibliotek'); +@define('ADD_MEDIA', 'Tilføj media'); +@define('ENTER_MEDIA_URL', 'Indtast en URL til filen du vil hente'); +@define('ENTER_MEDIA_UPLOAD', 'Vælg en fil du ønsker at uploade:'); +@define('SAVE_FILE_AS', 'Gem files som:'); +@define('STORE_IN_DIRECTORY', 'Gem i følgende bibliotek:'); +@define('MEDIA_RENAME', 'Omdøb denne fil'); +@define('IMAGE_RESIZE', 'Ændre størrelse på billede'); +@define('MEDIA_DELETE', 'Slet denne fil'); +@define('FILES_PER_PAGE', 'Filer per side'); +@define('CLICK_FILE_TO_INSERT', 'Klik på filen du vil indsætte:'); +@define('SELECT_FILE', 'Vælg filen du vil indsætte'); +@define('MEDIA_FULLSIZE', 'Fuld størrelse'); +@define('CALENDAR_BOW_DESC', 'Dagen i ugen der skal bruges som den første dag i ugen. Standardværdien er Mandag'); +@define('SUPERUSER', 'Blog Administration'); +@define('ALLOWS_YOU_BLAHBLAH', 'Placerer et link i sidebaren til din blog administration'); +@define('CALENDAR', 'Kalender'); +@define('SUPERUSER_OPEN_ADMIN', 'Åbn administration'); +@define('SUPERUSER_OPEN_LOGIN', 'Åbn loginskærm'); +@define('INVERT_SELECTIONS', 'Inverter valgte elementer'); +@define('COMMENTS_DELETE_CONFIRM', 'Er du sikker på du vil slette de valgte kommentarer?'); +@define('COMMENT_DELETE_CONFIRM', 'Er du sikker på du vil slette kommentar #%d, skrevet af %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Slet valgte kommentarer'); +@define('VIEW_COMMENT', 'Vis kommentar'); +@define('VIEW_ENTRY', 'Vis artikel'); +@define('DELETE_FILE', 'Slettede filen ved navn %s'); +@define('ABOUT_TO_DELETE_FILE', 'Du er ved at slette %s
Hvis du benytter denne fil i nogle af dine artikler, vil det resultere i døde links eller billeder
Er du sikker på du vil fortsætte?

'); +@define('TRACKBACK_SENDING', 'Sender trackback til URI %s...'); +@define('TRACKBACK_SENT', 'Trackback fuldført'); +@define('TRACKBACK_FAILED', 'Trackback fejl: %s'); +@define('TRACKBACK_NOT_FOUND', 'Ingen trackback URI fundet.'); +@define('TRACKBACK_URI_MISMATCH', 'Den automastiske trackback URI passer ikke vores egen URI.'); +@define('TRACKBACK_CHECKING', 'Checker %s for mulige trackbacks...'); +@define('TRACKBACK_NO_DATA', 'Modstående side indeholdte inden data'); +@define('TRACKBACK_SIZE', 'Modstående URI overskred den maximale filstørrelse på %s bytes.'); +@define('VIEWMODE_THREADED', 'Switch to threaded view'); +@define('COMMENTS_VIEWMODE_THREADED', 'Tråde'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Linear'); +@define('DISPLAY_COMMENTS_AS', 'Vis kommentarer som'); +@define('SIDEBAR_PLUGINS', 'Sidebarplugins'); +@define('EVENT_PLUGINS', 'Hændelseplugins'); +@define('ADD_MEDIA_BLAHBLAH', 'Tilføj en fil til dit mediearkiv:

Her kan du uploade mediafiler, eller bede mig hente dem fra et sted på nette! Hvis du ikke har et passende billeder, prøv at søg efter billeder på google der passer til dine tanker, resultatet er ofte brugbart og sjovt :)

Vælg metode:
'); +@define('COMMENTS_FILTER_SHOW', 'Vis'); +@define('COMMENTS_FILTER_ALL', 'Alle'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Kun godkendte'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Afventer godkendelse'); +@define('RSS_IMPORT_BODYONLY', 'Placer al den importeret tekst in i "artikel" delen, og ikke opdel ind i "udvidet artikel" sektionen.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Vil hele artiklen, med udvidet del, inde i RSS feed'); +@define('MT_DATA_FILE', 'Movable Type data fil'); +@define('FORCE', 'gennemtving'); +@define('CREATE_AUTHOR', 'Opret forfatter \'%s\'.'); +@define('CREATE_CATEGORY', 'Opret kategori \'%s\'.'); +@define('MYSQL_REQUIRED', 'Du skal have MySQL udvidelsen installere førend du kan udføre denne handling.'); +@define('COULDNT_CONNECT', 'Kunne ikke forbinde til MySQL database: %s.'); +@define('COULDNT_SELECT_DB', 'Kunne ikke vælge database: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Kunne ikke finde bruger information: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Kunne ikke finde kategori information: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Kunne ikke finde artikel information: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Kunne ikke finde kommentar information: %s.'); +@define('WEEK', 'Uge'); +@define('WEEKS', 'Uger'); +@define('MONTHS', 'Månder'); +@define('DAYS', 'Dage'); +@define('ARCHIVE_FREQUENCY', 'Kalender frekvens'); +@define('ARCHIVE_FREQUENCY_DESC', 'Angiver intervallet imellem hvert punkt på listen'); +@define('ARCHIVE_COUNT', 'Antal punkter på listen'); +@define('ARCHIVE_COUNT_DESC', 'Det totale antal af måneder, uger eller dage at vise'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Herunder er en liste over installerede plugins'); +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); +@define('EVENT_PLUGIN', 'event plugin'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Klik her for at installere et nyt %s'); +@define('VERSION', 'version'); +@define('INSTALL', 'Installer'); +@define('ALREADY_INSTALLED', 'Allerede installeret'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Vælge det plugin du ønsker at instalelre'); +@define('INSTALL_OFFSET', 'Server tidsforskydelse'); +@define('STICKY_POSTINGS', 'Vedvarende artikler'); +@define('INSTALL_FETCHLIMIT', 'Artikler på forsiden'); +@define('INSTALL_FETCHLIMIT_DESC', 'Antallet af artikler at vise på hver side på forsiden'); +@define('IMPORT_ENTRIES', 'Importer data'); +@define('EXPORT_ENTRIES', 'Eksporter artikler'); +@define('IMPORT_WELCOME', 'Velkommen til Serendipity importværktøj'); +@define('IMPORT_WHAT_CAN', 'Her kan du importere artikler fra andre weblog software applikationer'); +@define('IMPORT_SELECT', 'Vælg venligst det software du ønsker at importere fra'); +@define('IMPORT_PLEASE_ENTER', 'Indtast venligst det påkrævede data herunder'); +@define('IMPORT_NOW', 'Importer nu!'); +@define('IMPORT_STARTING', 'Starter import procedure...'); +@define('IMPORT_FAILED', 'Importeringen fejlede'); +@define('IMPORT_DONE', 'Importering gennemført'); +@define('IMPORT_WEBLOG_APP', 'Weblog applikation'); +@define('EXPORT_FEED', 'Eksporter fuldt RSS feed'); +@define('STATUS', 'Status efter import'); +@define('IMPORT_GENERIC_RSS', 'Almindeligt RSS import'); +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks til links fundet i artikler'); +@define('WELCOME_TO_ADMIN', 'Velkommen til Serendipity Administrations Suiteen.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Indtast venligst dine adgangsoplysninger herunder.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Drives af Serendipity %s og PHP %s'); +@define('INSTALL_USEGZIP', 'Benyt gzip komprimerede sider'); +@define('INSTALL_USEGZIP_DESC', 'For at fremskynde levering af sider, kan vi komprimere siderne vi sender til den besøgende, givet at hans browser understøtter dette. Dette er anbefalet'); +@define('INSTALL_SHOWFUTURE', 'Vis fremtidige artikler'); +@define('INSTALL_SHOWFUTURE_DESC', 'Hvis aktiveret, dette vil vise alle fremtidige artikler på din blog. Som standard skjules disse artikler og vises først når udgivelsesdatoen er nået.'); +@define('INSTALL_DBPERSISTENT', 'Brug vedvarende forbindelser'); +@define('INSTALL_DBPERSISTENT_DESC', 'Aktiver brug af vedvarende database forbindelser, læs mere her. Dette anbefales normalt ikke'); +@define('NO_IMAGES_FOUND', 'Ingen billeder fundet'); +@define('PERSONAL_SETTINGS', 'Personlige indstillinger'); +@define('REFERER', 'Henvisende side'); +@define('NOT_FOUND', 'Ikke fundet'); +@define('NOT_WRITABLE', 'Ikke skrivbar'); +@define('WRITABLE', 'Skrivbar'); +@define('PROBLEM_DIAGNOSTIC', 'Grundet en problematisk diagnose, kan du ikke fortsætte med installationen førend ovenstående fejl er rettet'); +@define('SELECT_INSTALLATION_TYPE', 'Vælg hvilken installationstype du vil benytte'); +@define('WELCOME_TO_INSTALLATION', 'Velkommen til Serendipity Installationen'); +@define('FIRST_WE_TAKE_A_LOOK', 'Først kigger vi på dit nuværende setup og vil forsøge at diagnosere eventuelle kompatibilitetsproblemer'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Fejl er vist som %s, anbefalinger som %s og succes som %s'); +@define('RED', 'rød'); +@define('YELLOW', 'gul'); +@define('GREEN', 'grøn'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s før-installations report'); +@define('RECOMMENDED', 'Anbefalet'); +@define('ACTUAL', 'Faktisk'); +@define('PHPINI_CONFIGURATION', 'php.ini konfiguration'); +@define('PHP_INSTALLATION', 'PHP installation'); +@define('THEY_DO', 'det gør de'); +@define('THEY_DONT', 'det før de ikke'); +@define('SIMPLE_INSTALLATION', 'Simpel installation'); +@define('EXPERT_INSTALLATION', 'Expert installation'); +@define('COMPLETE_INSTALLATION', 'Fuldfør installation'); +@define('WONT_INSTALL_DB_AGAIN', 'instalerer ikke database igen'); +@define('CHECK_DATABASE_EXISTS', 'Undersøger om databasen og tabllerne allerede findes'); +@define('CREATING_PRIMARY_AUTHOR', 'Opretter primær forfatter \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Sætter standard template'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Installere standard plugins'); +@define('SERENDIPITY_INSTALLED', 'Serendipity er nu installeret'); +@define('VISIT_BLOG_HERE', 'Besøg din nye blog her'); +@define('THANK_YOU_FOR_CHOOSING', 'Tak fordi du valgte Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'En fejl blev fundet under installationen'); +@define('OPERATING_SYSTEM', 'Operativsystem'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('IMAGE_ROTATE_LEFT', 'Roter billede 90 grader imod uret'); +@define('IMAGE_ROTATE_RIGHT', 'Roter billede 90 grader med uret'); +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); +@define('SEARCH_ERROR', 'Søgefunktionen fungere ikke som forventet. Besked til administratoren: Dette sker muligvis pga. en manglende index key i databasen. På MySQL systemer skal din bruger have rettigheder til at udføre dette query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
Den specifikke fejl returneret af databasen, var:
%s
'); +@define('EDIT_THIS_CAT', ' Redigerer "%s"'); +@define('CATEGORY_REMAINING', 'Slet denne kategori og flyt dens artikler ind i denne kategori'); +@define('CATEGORY_INDEX', 'Nedenunder er en liste over kategorier der er tilgængelige for dine artikler'); +@define('NO_CATEGORIES', 'Ingen kategorier'); +@define('RESET_DATE', 'Reset dato'); +@define('RESET_DATE_DESC', 'Klik her for at resette datoen til den nuværende tid'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Rettigheder kan gives ved at kører følgende shell kommando: `%s` på det fejlede bibliotek, eller ved at sætte det vha. et FTP program'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Advarsel: Din nuværende template bruger en forældet template metode, vi anbefaler du opgraderer, hvis muligt'); +@define('ENTRY_PUBLISHED_FUTURE', 'Denne artikler er endnu ikke udgivet.'); +@define('ENTRIES_BY', 'Artikler skrevet af %s'); +@define('PREVIOUS', 'Forrige'); +@define('NEXT', 'Næste'); +@define('APPROVE', 'Godkend'); +@define('DO_MARKUP_DESCRIPTION', 'Tilføj markup-transformationer på teksten (smilies, shortcut markups via *, /, _, ...). Hvis du slår dette fra vil al HTML-kode i teksten blive bibeholdt.'); +@define('CATEGORY_ALREADY_EXIST', 'En kategori med navnet "%s" findes allerede'); +@define('IMPORT_NOTES', 'Note:'); +@define('ERROR_FILE_FORBIDDEN', 'Det er ikke tilladt at uploade filer med aktivt indhold'); +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Forside'); +@define('QUOTE', 'Citer'); +@define('IFRAME_SAVE', 'Serendipity gemmer nu din artikel, sender trackbacks og udfører mulige XML-RPC calls. Dette kan tage noget tid..'); +@define('IFRAME_SAVE_DRAFT', 'Et udkast af denne artikel er blevet gemt'); +@define('IFRAME_PREVIEW', 'Serendipity opretter nu et preview af din artikel...'); +@define('IFRAME_WARNING', 'Din browser understøtter ikke iframes. Åbn serendipity_config.inc.php og sæt $serendipity[\'use_iframe\'] til FALSE.'); +@define('NONE', 'ingen'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Standard indstillinger for nye artikler'); +@define('UPGRADE', 'Opgrader'); +@define('UPGRADE_TO_VERSION', 'Opgrader til v%s'); +@define('DELETE_DIRECTORY', 'Slet mappe'); +@define('DELETE_DIRECTORY_DESC', 'Du er ved at slette indholdet af en mappe der indeholder multimedia filer, muligvis filer brugt i dine artikler.'); +@define('FORCE_DELETE', 'Slet ALLE filer i denne mappe, inklusiv dem ikke kendt af Serendipity'); +@define('CREATE_DIRECTORY', 'Opret mappe'); +@define('CREATE_NEW_DIRECTORY', 'Opret ny mappe'); +@define('CREATE_DIRECTORY_DESC', 'Her kan du oprette en ny mappe til at placere dine multimedia filer i. Vælg navnet på din nye mappe, og vælg en passende mappe at oprette den i.'); +@define('BASE_DIRECTORY', 'Rodmappe'); +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); +@define('USERLEVEL_CHIEF_DESC', 'Chefeditor'); +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); +@define('USERCONF_USERLEVEL', 'Adgangsniveau'); +@define('USERCONF_USERLEVEL_DESC', 'Dette niveau er brugt til at bestemme hvilken type adgang brugeren har til bloggen'); +@define('USER_SELF_INFO', 'Logget ind som %s (%s)'); +@define('ADMIN_ENTRIES', 'Artikler'); +@define('RECHECK_INSTALLATION', 'Check installation igen'); +@define('IMAGICK_EXEC_ERROR', 'Kunne ikke eksekvere: "%s", fejl: %s, return var: %d'); +@define('INSTALL_OFFSET_DESC', 'Indtast antallet af timer mellem tiden på din webserver (%clock%) og din fortrukne tidszone'); +@define('UNMET_REQUIREMENTS', 'Uopfyldt krav: %s'); +@define('CHARSET', 'Karaktersæt'); +@define('AUTOLANG', 'Brug, som standard, brugerens browser sprog'); +@define('AUTOLANG_DESC', 'Hvis aktiveret, vil brugerens browsersprog benyttes til at finde det viste sprog i dine artikler og interface.'); +@define('INSTALL_AUTODETECT_URL', 'Autoudregn brugte HTTP-Host'); +@define('INSTALL_AUTODETECT_URL_DESC', 'Hvis denne er sat til "ja", vil Serendipity sikre at den HTTP Host der var brug af din besøgende, er brugt som din BaseURL indstilling. Aktiverer du dette, kan du bruge flere domænenavne på samme Serendipity Blog.'); +@define('CONVERT_HTMLENTITIES', 'Prøv at automatisk konvertere HTML entities?'); +@define('EMPTY_SETTING', 'Du angav ikke en gyldig værdi for "%s"!'); +@define('USERCONF_REALNAME', 'Rigtigt navn'); +@define('USERCONF_REALNAME_DESC', 'Det fulde navn på fatteren. Dette er navnet set af læserne'); +@define('HOTLINK_DONE', 'Fil blev hotlinked.
Færdig.'); +@define('ENTER_MEDIA_URL_METHOD', 'Afhentningsmetode:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Bemærk: Hvis du vælger at hotlinke til en server, bør du sikre dig tilladelse til at gøre dette, eller være ejeren af serveren. Hotlink gør det muligt at bruge eksterne billeder, uden at gemme den lokalt.'); +@define('MEDIA_HOTLINKED', 'hotlinked'); +@define('FETCH_METHOD_IMAGE', 'Hent billede fra din server'); +@define('FETCH_METHOD_HOTLINK', 'Hotlink til server'); +@define('DELETE_HOTLINK_FILE', 'Slet den hotlinked fil ved navn %s'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Vis E-Mail adresser?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/lang/serendipity_lang_de.inc.php b/lang/serendipity_lang_de.inc.php new file mode 100644 index 0000000..dff9d25 --- /dev/null +++ b/lang/serendipity_lang_de.inc.php @@ -0,0 +1,669 @@ +Fertig.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Fehler: Diese Datei existiert schon auf dem Server!'); +@define('GO', 'Los!'); +@define('NEWSIZE', 'Neue Größe '); +@define('RESIZE_BLAHBLAH', 'Größe von %s ändern

'); +@define('ORIGINAL_SIZE', 'Originalgröße: %sx%s Pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Hier können Sie die Bildgröße ändern. Um die Proportionen beizubehalten, einfach einen der beiden Werte eingeben, und anschließend die TAB-Taste drücken, und Sie erhalten eine Vorschau mit korrekten Proportionen.'); +@define('DATE_FORMAT_1', 'd.m.Y'); +@define('QUICKJUMP_CALENDAR', 'QuickJump Kalender'); +@define('QUICKSEARCH', 'Suche'); +@define('SEARCH_FOR_ENTRY', 'Nach Einträgen suchen'); +@define('ARCHIVES', 'Archive'); +@define('BROWSE_ARCHIVES', 'Die Archive durchstöbern'); +@define('TOP_REFERRER', 'Top Referrer'); +@define('SHOWS_TOP_SITES', 'Zeigt die Top-Seiten, die auf das Blog linken'); +@define('TOP_EXITS', 'Top Exits'); +@define('SHOWS_TOP_EXIT', 'Zeigt die Top-Exit-Links des Blogs'); +@define('SYNDICATION', 'Syndication'); +@define('SHOWS_RSS_BLAHBLAH', 'Zeigt die RSS Syndication-Links'); +@define('ADVERTISES_BLAHBLAH', 'Zeigt einen Hinweis darauf, dass Serendipity als Blog-Software verwendet wird'); +@define('HTML_NUGGET', 'HTML Klotz'); +@define('HOLDS_A_BLAHBLAH', 'Zeigt einen kleinen Klotz HTML Code in einer der Seitenleisten an'); +@define('TITLE_FOR_NUGGET', 'Titel für den Klotz'); +@define('THE_NUGGET', 'Der HTML Klotz!'); +@define('SYNDICATE_THIS_BLOG', 'Blog abonnieren'); +@define('SEARCH_TOO_SHORT', 'Bitte geben Sie einen Suchbegriff mit mehr als drei Zeichen an.'); +@define('YOU_CHOSE', 'Sie haben sich für %s entschieden'); +@define('IMAGE_SIZE', 'Bildgröße'); +@define('IMAGE_ROTATE_LEFT', 'Bild 90 Grad gegen den Uhrzeigersinn drehen'); +@define('IMAGE_ROTATE_RIGHT', 'Bild 90 Grad im Uhrzeigersinn drehen'); +@define('IMAGE_AS_A_LINK', 'Bild als Link'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', 'Trackbacks'); +@define('TRACKBACK', 'Trackback'); +@define('NO_TRACKBACKS', 'Keine Trackbacks'); +@define('TOPICS_OF', 'Themen in'); +@define('VIEW_FULL', 'ganz anzeigen'); +@define('VIEW_TOPICS', 'Überschriften anzeigen'); +@define('AT', 'um'); +@define('SET_AS_TEMPLATE', 'Als Template wählen'); +@define('IN', 'in'); +@define('EXCERPT', 'Auszug'); +@define('TRACKED', 'Aufgenommen'); +@define('LINK_TO_ENTRY', 'Link zum Eintrag'); +@define('LINK_TO_REMOTE_ENTRY', 'Link zum Remote-Eintrag'); +@define('IP_ADDRESS', 'IP-Adresse'); +@define('USER', 'Benutzer'); +@define('THUMBNAIL_USING_OWN', 'Verwende %s als Vorschaubild, da das Originalbild bereits so klein ist.'); +@define('THUMBNAIL_FAILED_COPY', 'Wollte %s als Vorschaubild verwenden, aber das Kopieren schlug fehl!'); +@define('AUTHOR', 'Author'); +@define('LAST_UPDATED', 'Zuletzt aktualisiert'); +@define('TRACKBACK_SPECIFIC', 'Trackback für spezifische URI dieses Eintrags'); +@define('DIRECT_LINK', 'Direkter Link zu diesem Eintrag'); +@define('COMMENT_ADDED', 'Kommentar wurde hinzugefügt. '); +@define('COMMENT_ADDED_CLICK', 'Klicken Sie %shier, um zu den Kommentaren zurückzukehren%s und %shier, um das Fenster zu schließen%s.'); +@define('COMMENTS_DISABLE', 'Kommentare für diesen Eintrag nicht mehr zulassen'); +@define('COMMENTS_ENABLE', 'Kommentare für diesen Eintrag zulassen'); +@define('COMMENTS_CLOSED', 'Die Kommentarfunktion wurde vom Besitzer dieses Blogs in diesem Eintrag deaktiviert. '); +@define('COMMENT_NOT_ADDED', 'Kommentar wurde nicht hinzugefügt, da der Eintrag geschlossen wurde.'); +@define('COMMENT_NOT_ADDED_CLICK', 'Klicken Sie %shier, um zu den Kommentaren zurückzukehren%s und %shier, um das Fenster zu schließen%s.'); +@define('EMPTY_COMMENT', 'Ihr Kommentar war leer, bitte %sgehen Sie zurück%s und versuchen es erneut'); +@define('ENTRIES_FOR', 'Einträge für %s'); +@define('DOCUMENT_NOT_FOUND', 'Das Dokument %s wurde nicht gefunden.'); +@define('USERNAME', 'Benutzername'); +@define('PASSWORD', 'Passwort'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity-Installation'); +@define('LEFT', 'links'); +@define('RIGHT', 'rechts'); +@define('HIDDEN', 'versteckt'); +@define('REMOVE_TICKED_PLUGINS', 'Markierte Plugins entfernen'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Änderungen am Layout speichern'); +@define('COMMENTS_FROM', 'Kommentare von'); +@define('ERROR', 'Fehler'); +@define('ENTRY_SAVED', 'Der Eintrag wurde gespeichert'); +@define('DELETE_SURE', 'Soll #%s permanent gelöscht werden?'); +@define('NOT_REALLY', 'Nicht wirklich...'); +@define('DUMP_IT', 'Hinfort damit!'); +@define('RIP_ENTRY', 'Ruhe in Frieden, #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Kategorie #%s wurde gelöscht. Alte Artikel in dieser Kategorie nach %s verschoben'); +@define('CATEGORY_DELETED', 'Kategorie #%s wurde gelöscht.'); +@define('INVALID_CATEGORY', 'Es wurde keine Kategorie zum Löschen gewählt.'); +@define('CATEGORY_SAVED', 'Kategorie gespeichert'); +@define('SELECT_TEMPLATE', 'Wählen Sie das Template für das Blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Einträge konnten nicht importiert werden!'); +@define('YES', 'Ja'); +@define('NO', 'Nein'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Testen & speichern'); +@define('DIRECTORY_WRITE_ERROR', 'Keine Schreibrechte für Verzeichnis %s. Bitte korrigieren'); +@define('DIRECTORY_CREATE_ERROR', 'Verzeichnis %s existiert nicht und konnte nicht erstellt werden. Bitte legen Sie es manuell an.'); +@define('DIRECTORY_RUN_CMD', ' -> führen Sie %s %s aus!'); +@define('CANT_EXECUTE_BINARY', 'Kann die \'%s\'-Datei nicht ausführen'); +@define('FILE_WRITE_ERROR', 'Datei %s kann nicht geschrieben werden.'); +@define('FILE_CREATE_YOURSELF', ' Bitte die Datei manuell anlegen oder Dateirechte korrigieren.'); +@define('COPY_CODE_BELOW', '
* Kopieren Sie den folgenden Code in die Datei %s des %s Verzeichnisses:

%s
' . "\n"); +@define('WWW_USER', 'Ersetzen Sie \'www\' mit dem User, als der der Webserver läuft. (z.B. \'nobody\')'); +@define('BROWSER_RELOAD', 'Danach aktualisieren Sie bitte diese Seite im Browser'); +@define('DIAGNOSTIC_ERROR', 'Bei der Einrichtung der Installation traten einige Fehler auf:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity ist noch nicht eingerichtet. Bitte jetzt installieren.'); +@define('INCLUDE_ERROR', 'Serendipity Fehler: Kann Datei %s nicht einbinden - wird beendet.'); +@define('DATABASE_ERROR', 'Serendipity Fehler: Kann keine Verbindung zur Datenbank herstellen - wird beendet.'); +@define('CREATE_DATABASE', 'Richte Datenbank ein...'); +@define('ATTEMPT_WRITE_FILE', 'Probiere die Datei %s zu erstellen...'); +@define('WRITTEN_N_SAVED', 'Konfiguration geschrieben und gesichert'); +@define('IMAGE_ALIGNMENT', 'Bildausrichtung'); +@define('ENTER_NEW_NAME', 'Bitte einen neuen Namen eingeben für: '); +@define('RESIZING', 'Anpassen der Bildgröße'); +@define('RESIZE_DONE', 'Fertig (%s Bildgrößen angepaßt).'); +@define('DELETE_IMAGE_FAIL' , 'Kann Bild namens %s nicht löschen'); +@define('DELETE_THUMBNAIL', 'Vorschaubilder zu %s gelöscht'); +@define('FILE_NOT_FOUND', 'Die Datei namens %s kann nicht gefunden werden, vielleicht wurde diese schon gelöscht?'); +@define('ABORT_NOW', 'Abbrechen'); +@define('REMOTE_FILE_NOT_FOUND', 'Die Datei konnte auf dem Server nicht gefunden werden. Sind Sie sicher, dass die URL %s korrekt ist?'); +@define('FILE_FETCHED', '%s geladen als %s'); +@define('FILE_UPLOADED', 'Datei %s erfolgreich als %s hochgeladen'); +@define('WORD_OR', 'Oder'); +@define('SCALING_IMAGE', 'Ändere Größe von %s nach %s x %s px'); +@define('KEEP_PROPORTIONS', 'Proportionen beibehalten'); +@define('REALLY_SCALE_IMAGE', 'Bildgröße wirklich verändert? Kein zurück!'); +@define('TOGGLE_ALL', 'Alle Optionen ein-/ausblenden'); +@define('TOGGLE_OPTION', 'Option ein-/ausblenden'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Bei Aktualisierung dieser Kommentare benachrichtigen'); +@define('UNSUBSCRIBE_OK', 'Sie (%s) erhalten nun keine weiteren Benachrichtigungen mehr.'); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Benachrichtigung zu neuem Kommentar des Eintrags "%s"'); +@define('SUBSCRIPTION_MAIL', "Hallo %s,\n\nEin neuer Kommentar wurde dem Eintrag hinzugefügt, den Sie auf \"%s\" namens \"%s\" finden.\nDer Name des Autoren ist: %s\n\nSie können den Eintrag hier finden: %s\n\nSie können diese Benachrichtung mit folgender URL kündigen: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Hallo %s,\n\nEin neues Trackback wurde dem Eintrag hinzugefügt, den Sie auf \"%s\" namens \"%s\" finden.\nDer Name des Autoren ist: %s\n\nSie können den Eintrag hier finden: %s\n\nSie können diese Benachrichtung mit folgender URL kündigen: %s\n"); +@define('SIGNATURE', "\n-- \n%s wird betrieben mit Serendipity.\nDas allerbeste Blog, Sie können es auch nutzen.\nWie das geht, sehen Sie auf ."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 Kommentar'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Feld "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Feld "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Bild für den RSS feed'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Breite des Bildes'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Höhe des Bildes'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-Mail Adresse des Webmasters, falls vorhanden. (leer: nicht verwenden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-Mail Adresse des verantwortlichen Editors, falls vorhanden. (leer: nicht verwenden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL für ein Bild im GIF/JPEG/PNG Format, falls vorhanden. (leer: Serendipity-Logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'in Pixeln, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'in Pixeln, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Feld "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Anzahl der Minuten, nachdem das Blog von fremden Seiten nicht mehr gecached werden sollte (leer: nicht verwenden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Feld "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Soll das "pubDate"-Feld für den RSS-Kanal eingebettet werden, um das Datum des letzten Eintrags zu enthalten?'); +@define('CONTENT', 'Inhalt'); +@define('TYPE', 'Typ'); +@define('DRAFT', 'Entwurf'); +@define('PUBLISH', 'Veröffentlichung'); +@define('PREVIEW', 'Vorschau'); +@define('DATE', 'Datum'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Warnung: Das Datum, welches Sie für den Artikel angegeben haben ist ungültig. Es muss dem Format JJJJ-MM-TT SS:MM entsprechen.'); +@define('CATEGORY_PLUGIN_DESC', 'Zeigt eine Liste der Kategorien'); +@define('ALL_AUTHORS', 'Alle Autoren'); +@define('CATEGORIES_TO_FETCH', 'Quelle der Kategorien'); +@define('CATEGORIES_TO_FETCH_DESC', 'Kategorien welcher Autoren einbeziehen?'); +@define('PAGE_BROWSE_ENTRIES', 'Seite %s von %s, insgesamt %s Einträge'); +@define('PREVIOUS_PAGE', 'vorige Seite'); +@define('NEXT_PAGE', 'nächste Seite'); +@define('ALL_CATEGORIES', 'Alle Kategorien'); +@define('DO_MARKUP', 'Textformatierung(en) durchführen'); +@define('AUTOMATIC_LOGIN', 'Daten speichern'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Datumsformat'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Das Datumsformat des Eintrages, mithilfe von PHPs strftime() Variablen. (Standard: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Die Templatedatei konnte nicht geöffnet werden, bitte die Serendipity-Version aktualisieren!'); +@define('ADVANCED_OPTIONS', 'Erweiterte Optionen'); +@define('EDIT_ENTRY', 'Eintrag bearbeiten'); +@define('HTACCESS_ERROR', 'Um die Webserverkonfiguration zu testen benötigt Serendipity die Möglichkeit, die Datei ".htaccess" zu erstellen. Dies war aufgrund von Rechteproblemen nicht möglich. Bitte passen Sie die Rechte wie folgt an:
  %s
und laden Sie diese Seite neu.'); +@define('SIDEBAR_PLUGINS', 'Seitenleisten Plugins'); +@define('EVENT_PLUGINS', 'Ereignis Plugins'); +@define('SYNCING', 'Synchronisiere Datenbank mit Bilder-Ordner'); +@define('SYNC_DONE', 'Fertig (%s Bilder synchronisiert).'); +@define('SORT_ORDER', 'Sortierung'); +@define('SORT_ORDER_NAME', 'Dateiname'); +@define('SORT_ORDER_EXTENSION', 'Dateiendung'); +@define('SORT_ORDER_SIZE', 'Dateigröße'); +@define('SORT_ORDER_WIDTH', 'Bildbreite'); +@define('SORT_ORDER_HEIGHT', 'Bildhöhe'); +@define('SORT_ORDER_DATE', 'Upload-Datum'); +@define('SORT_ORDER_ASC', 'Aufsteigend'); +@define('SORT_ORDER_DESC', 'Absteigend'); +@define('THUMBNAIL_SHORT', 'Vorsch.'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Textformatierung auf %s anwenden'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Anfang der Woche'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity hat entdeckt, dass derzeit Version %s verwendet wird. Jedoch wurde Version %s installiert, daher müssten Sie die Installation aktualisieren!'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Willkommen beim Serendipity Aktualisierungs-Agenten'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Ich möchte Ihnen gerne beim Aktualisieren der Serendipity %s Installation helfen.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Diese Seite erscheint, da gerade Serendipity %s installiert wurde, aber die Datenbank noch nicht an diese Version angepasst wurde.'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Datenbank-Aktualisierungen (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Die folgenden .sql Dateien wurden gefunden und müssen nun ausgeführt werden, bevor Serendipity wieder wie gewohnt funktioniert.'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Versionsabhängige Funktionen'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Keine versionsabhängigen Funktionen gefunden'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Soll ich die aufgeführten Funktionen ausführen?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Nein, das werde ich manuell erledigen'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Ja, bitte ausführen'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Es müssen keine Aktualisierungen ausgeführt werden'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity wurde an die neue Version angepasst'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Sie haben den automatischen Aktualisierungsvorgang ignoriert. Bitte stellen Sie sicher, dass die Datenbank anhand der .sql Dateien aktualisiert wird und die geplanten Funktionen aufgerufen werden.'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Die Serendipity-Installation ist nun auf die Version %s aktualisiert.'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Zurück zum %sBlog%s'); +@define('MANAGE_USERS', 'Benutzerverwaltung'); +@define('CREATE_NEW_USER', 'Einen neuen Benutzer anlegen'); +@define('CREATE_NOT_AUTHORIZED', 'Sie können keine Benutzer mit demselben Userlevel wie Ihrem eigenen bearbeiten'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Sie können keine Benutzer mit einem höheren Benutzerlevel als Ihrem anlegen'); +@define('CREATED_USER', 'Der neue Benutzer %s wurde angelegt'); +@define('MODIFIED_USER', 'Die Eigenschaften von Benutzer %s wurden geändert'); +@define('USER_LEVEL', 'Userlevel'); +@define('DELETE_USER', 'Sie wollen den Benutzer #%d %s löschen. Sind sie sicher? Dadurch werden seine Artikel nicht mehr auf der Oberfläche angezeigt.'); +@define('DELETED_USER', 'Benutzer #%d %s gelöscht.'); +@define('LIMIT_TO_NUMBER', 'Wieviele Elemente sollen angezeigt werden?'); +@define('ENTRIES_PER_PAGE', 'Artikel pro Seite'); +@define('DIRECTORIES_AVAILABLE', 'In der Liste der verfügbaren Unterverzeichnisse kann durch einen Klick auf einen Verzeichnisnamen ein neuer Ordner unterhalb des gewählten erstellt werden.'); +@define('ALL_DIRECTORIES', 'alle Verzeichnisse'); +@define('MANAGE_DIRECTORIES', 'Verzeichnisse verwalten'); +@define('DIRECTORY_CREATED', 'Verzeichnis %s wurde angelegt.'); +@define('PARENT_DIRECTORY', 'Stammverzeichnis'); +@define('CONFIRM_DELETE_DIRECTORY', 'Wirklich alle Inhalte von Verzeichnis %s löschen?'); +@define('ERROR_NO_DIRECTORY', 'Fehler: Verzeichnis %s existiert nicht.'); +@define('CHECKING_DIRECTORY', 'Prüfe Dateien im Verzeichnis %s'); +@define('DELETING_FILE', 'Lösche Datei %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Konnte das Verzeichnis nicht löschen, da noch Dateien vorhanden sind. Bitte die "Alle Dateien löschen"-Auswahlbox anklicken, falls diese Dateien trotzdem gelöscht werden sollen. Die noch vorhandenen Dateien sind:'); +@define('DIRECTORY_DELETE_FAILED', 'Das Löschen des Verzeichnisses %s ist fehlgeschlagen. Bitte Verzeichnisrechte oder vorige Meldungen überprüfen.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Verzeichnis %s erfolgreich gelöscht.'); +@define('SKIPPING_FILE_EXTENSION', 'Überspringe Datei: Fehlende Dateiendung von %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Überspringe Datei: %s nicht lesbar.'); +@define('FOUND_FILE', 'Neue/Geänderte Datei %s gefunden.'); +@define('ALREADY_SUBCATEGORY', '%s ist bereits eine Unterkategorie von %s.'); +@define('PARENT_CATEGORY', 'Übergeordnete Kategorie'); +@define('IN_REPLY_TO', 'Antwort zu'); +@define('TOP_LEVEL', 'Ursprung'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'Rechte'); +@define('XML_IMAGE_TO_DISPLAY', 'XML-Button'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Bilddatei um ein Icon für XML-Feeds darzustellen. Für das Standardbild leer lassen oder \'none\' zum deaktivieren.'); +@define('SETTINGS_SAVED_AT', 'Die neuen Einstellungen wurden um %s gespeichert.'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Datenbankeinstellungen'); +@define('INSTALL_CAT_DB_DESC', 'Konfigurieren Sie hier die Datenbank. Serendipity benötigt die Daten, um lauffähig zu sein.'); +@define('INSTALL_DBTYPE', 'Datenbanktyp'); +@define('INSTALL_DBTYPE_DESC', 'Datenbanktyp'); +@define('INSTALL_DBHOST', 'Datenbank Servername'); +@define('INSTALL_DBHOST_DESC', 'Datenbank Servername'); +@define('INSTALL_DBUSER', 'Datenbank Username'); +@define('INSTALL_DBUSER_DESC', 'Datenbank Username'); +@define('INSTALL_DBPASS', 'Datenbank Passwort'); +@define('INSTALL_DBPASS_DESC', 'Datenbank Passwort'); +@define('INSTALL_DBNAME', 'Datenbankname'); +@define('INSTALL_DBNAME_DESC', 'Name der Datenbank'); +@define('INSTALL_DBPREFIX', 'Datenbank-Präfix'); +@define('INSTALL_DBPREFIX_DESC', 'Präfix für Tabellennamen, z.B. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Pfade'); +@define('INSTALL_CAT_PATHS_DESC', 'Zahlreiche Pfade zu unterschiedlichen wichtigen Verzeichnissen und Dateien. Unbedingt auf abschließenden Schrägstrich nach Pfaden achten!'); +@define('INSTALL_FULLPATH', 'Voller Pfad'); +@define('INSTALL_FULLPATH_DESC', 'Der volle und absolute Pfad zur Serendipity Installation.'); +@define('INSTALL_UPLOADPATH', 'Upload-Pfad'); +@define('INSTALL_UPLOADPATH_DESC', 'Alle Dateien werden hierhin hochgeladen. Relativ zum vollen Pfad - üblicherweise \'uploads/\''); +@define('INSTALL_RELPATH', 'Relativer HTTP-Pfad'); +@define('INSTALL_RELPATH_DESC', 'Der HTTP-Pfad zu Serendipity für den Browser, üblicherweise \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Relativer Template-Pfad'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Der Pfad zum Verzeichnis, der die Templates enthält - Relativ zum HTTP-Pfad'); +@define('INSTALL_RELUPLOADPATH', 'Relativer Upload-Pfad'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Der Pfad zum Uploadverzeichnis für den Browser - Relativ zum HTTP-Pfad'); +@define('INSTALL_URL', 'URL zum Blog'); +@define('INSTALL_URL_DESC', 'Stamm-URL zur Serendipity-Installation'); +@define('INSTALL_INDEXFILE', 'Index-Datei'); +@define('INSTALL_INDEXFILE_DESC', 'Welche Datei wird als Indexdatei verwendet (index.php)'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Generelle Einstellungen'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Stellt die Grundeigenschaften von Serendipity ein'); +@define('INSTALL_USERNAME', 'Admin Username'); +@define('INSTALL_USERNAME_DESC', 'Username für den Administrator-Zugang'); +@define('INSTALL_PASSWORD', 'Admin Passwort'); +@define('INSTALL_PASSWORD_DESC', 'Passwort für den Administrator-Zugang'); +@define('INSTALL_EMAIL', 'Admin E-Mail'); +@define('INSTALL_EMAIL_DESC', 'E-Mail des Administrators'); +@define('INSTALL_SENDMAIL', 'Sende E-Mails zum Admin?'); +@define('INSTALL_SENDMAIL_DESC', 'Soll der Administrator E-Mails erhalten, wenn Kommentare zum Blog geschrieben werden?'); +@define('INSTALL_SUBSCRIBE', 'Abonnieren von Einträgen erlauben?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Soll es den Besuchern des Blogs möglich sein, einen Eintrag zu abonnieren und so alle neuen Kommentare dazu per E-Mail erhalten?'); +@define('INSTALL_BLOGNAME', 'Blog Titel'); +@define('INSTALL_BLOGNAME_DESC', 'Der Titel des Blogs'); +@define('INSTALL_BLOGDESC', 'Blog Beschreibung'); +@define('INSTALL_BLOGDESC_DESC', 'Die Beschreibung des Blogs'); +@define('INSTALL_LANG', 'Sprache'); +@define('INSTALL_LANG_DESC', 'Wählen Sie die Sprache des Blogs'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Design und Optionen'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Legt fest wie Serendipity aussieht'); +@define('INSTALL_WYSIWYG', 'Grafischen WYSIWYG-Editor verwenden'); +@define('INSTALL_WYSIWYG_DESC', 'Soll der grafische WYSIWYG-Editor verwendet werden? (Funktioniert im IE5+, größenteils Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'XHTML1.1 Standard verwenden'); +@define('INSTALL_XHTML11_DESC', 'Soll der XHTML 1.1 Standard verwendet werden? (führt zu gültigem Code aber kann bei älteren Browsern Schwierigkeiten erzeugen)'); +@define('INSTALL_POPUP', 'Popups für Kommentare, Trackbacks usw. verwenden?'); +@define('INSTALL_POPUP_DESC', 'Sollen die Links zu den Kommentaren, Trackbacks etc. mit Popups geöffnet werden?'); +@define('INSTALL_EMBED', 'Eingebettete Nutzung von Serendipity aktivieren?'); +@define('INSTALL_EMBED_DESC', 'Falls Serendipity innerhalb einer normalen Seite eingebettet werden soll, aktivieren Sie diese Option. Serendipity stellt dann nur Inhalte dar, und Sie können sich um Header und Footer kümmern. Lesen Sie die Datei README für weitere Informationen.'); +@define('INSTALL_TOP_AS_LINKS', 'Top Exits/Referrers als Link anzeigen?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"Nein": Exit/Referer-URLs werden als Text angezeigt, um Googlespam zu verhindern. "Ja": Exit/Referer-URLs werden als Hyperlinks angezeigt. "Default": Die Einstellung aus der globalen Konfiguration wird übernommen (empfohlen).'); +@define('INSTALL_BLOCKREF', 'Geblockte Referer'); +@define('INSTALL_BLOCKREF_DESC', 'Sollen spezielle Hosts aus der Referrer-Liste gesperrt werden? Hostnamen getrennt mit ";" eingeben. Jeder Hostname wird als Teilstring überprüft, so dass "goo" sowohl "google.com" als auch "googlegroups.com" sperren würde.'); +@define('INSTALL_REWRITE', 'URL-Formung'); +@define('INSTALL_REWRITE_DESC', 'Wählen Sie die Methode zur Erzeugung der URLs. Wenn diese aktiviert werden, können sprechende Namen für jeden Artikel verwendet werden und somit besser von Suchmaschinen indiziert Der Webserver muss entweder mod_rewrite oder die "AllowOverride All"-Direktive unterstützen. Der Standardwert wird automagisch bestimmt'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Bildkonvertierung'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Wie soll Serendipity Bilder handhaben'); +@define('INSTALL_IMAGEMAGICK', 'Imagemagick zur Skalierung verwenden'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Ist ImageMagick installiert? Verwendet ansonsten die GDLib.'); +@define('INSTALL_IMAGEMAGICKPATH', 'Pfad zur convert ImageMagick-Datei'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Voller Pfad und Name zur Image-Magick Datei'); +@define('INSTALL_THUMBSUFFIX', 'Thumbnail-Endung'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Thumbnails werden nach dem Schema originalname.Suffix.erweiterung benannt.'); +@define('INSTALL_THUMBWIDTH', 'Thumbnailgröße'); +@define('INSTALL_THUMBWIDTH_DESC', 'Maximale Breite/Höhe der automatisch erzeugten Thumbnails'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Persönliche Einstellungen'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Einstellungen des eigenen Accounts'); +@define('USERCONF_USERNAME', 'Username'); +@define('USERCONF_USERNAME_DESC', 'Ihr Username'); +@define('USERCONF_PASSWORD', 'Passwort'); +@define('USERCONF_PASSWORD_DESC', 'Ihr Passwort'); +@define('USERCONF_EMAIL', 'E-Mail'); +@define('USERCONF_EMAIL_DESC', 'Ihre E-Mail Adresse'); +@define('USERCONF_SENDCOMMENTS', 'Über Kommentare benachrichtigen?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Wollen Sie eine E-Mail erhalten, sobald ein neuer Kommentar zu Ihrem Eintrag geschrieben wurde?'); +@define('USERCONF_SENDTRACKBACKS', 'Über Trackbacks benachrichtigen?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Wollen Sie eine E-Mail erhalten, sobald ein neues Trackback zu Ihrem Eintrag geschrieben wurde?'); +@define('USERCONF_ALLOWPUBLISH', 'Rechte: Einträge veröffentlichen?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Darf Einträge veröffentlichen?'); +@define('SUCCESS', 'Erfolgreich beendet'); +@define('POWERED_BY_SHOW_TEXT', 'Zeige "Serendipity" als Text'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Zeigt den Text "Serendipity Blog" an'); +@define('POWERED_BY_SHOW_IMAGE', 'Zeige "Serendipity" als Logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Stellt das Serendipity-Logo dar'); +@define('PLUGIN_ITEM_DISPLAY', 'Wo soll dieses Plugin angezeigt werden?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Nur Artikel-Detailansicht'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Nur Artikelübersicht'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Überall'); +@define('RSS_IMPORT_CATEGORY', 'Diese Kategorie für nicht zugeordnete importierte Einträge verwenden'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Ein Fehler trat beim Dateiupload auf. Vielleicht ist die Datei größer als durch die Server-Konfiguration zugelassen. Bitte mit Ihrem ISP absprechen oder die php.ini datei bearbeiten um größere Uploads zuzulassen.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Kommentare werden erst nach redaktioneller Prüfung freigeschaltet.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Folgende Möglichkeiten stehen zur Verfügung:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Hinweis: Dieser Kommentar wird ohne Bewilligung nicht dargestellt'); +@define('DELETE_COMMENT', 'Kommentar löschen'); +@define('APPROVE_COMMENT', 'Kommentar bewilligen'); +@define('REQUIRES_REVIEW', 'Bewilligung notwendig'); +@define('COMMENT_APPROVED', 'Kommentar #%s wurde erfolgreich bewilligt'); +@define('COMMENT_DELETED', 'Kommentar #%s wurde erfolgreich gelöscht'); +@define('VIEW', 'Anzeigen'); +@define('COMMENT_ALREADY_APPROVED', 'Kommentar #%s wurde bereits bewilligt'); +@define('COMMENT_EDITED', 'Der gewählte Kommentare wurde bearbeitet'); +@define('HIDE', 'Ausblenden'); +@define('VIEW_EXTENDED_ENTRY', '"%s" vollständig lesen'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Dieser Link ist nicht aktiv. Er enthält die Tracback-URI zu diesem Eintrag. Sie können diese URI benutzen um Ping- und Trackbacks von Ihrem eigenen Blog zu diesem Eintrag zu schicken. Um den Link zu kopieren, führen Sie einen Rechtsklick aus und wählen "Verknüpfung kopieren" im Internet Explorer oder "Linkadresse kopieren" in Mozilla.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Warnung: Dieses Trackback wird ohne Bewilligung nicht dargestellt'); +@define('DELETE_TRACKBACK', 'Trackback löschen'); +@define('APPROVE_TRACKBACK', 'Trackback bewilligen'); +@define('TRACKBACK_APPROVED', 'Trackback #%s wurde erfolgreich bewilligt'); +@define('TRACKBACK_DELETED', 'Trackback #%s wurde erfolgreich gelöscht'); +@define('COMMENTS_MODERATE', 'Kommentare und Trackbacks dieses Eintrags werden moderiert'); +@define('PLUGIN_SUPERUSER_HTTPS', 'https zum Login verwenden'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Erstellt eine https-URL als Login-Link zum Blog. Der Webserver muss dies unterstützen!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Externe Links klickbar?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"Nein": Ungeprüfte externe Links (Top Exits, Top Referer, Kommentare) werden unterdrückt/als Text angezeigt, um Googlespam zu verhindern (empfohlen). "Ja": Externe Links werden als Hyperlinks angezeigt. Diese Einstellung kann in den einzelnen Plugins überschrieben werden.'); +@define('PAGE_BROWSE_COMMENTS', 'Seite %s von %s, %s Kommentare insgesamt'); +@define('FILTERS', 'Filter'); +@define('FIND_ENTRIES', 'Einträge durchsuchen'); +@define('FIND_COMMENTS', 'Kommentare durchsuchen'); +@define('FIND_MEDIA', 'Mediendaten durchsuchen'); +@define('FILTER_DIRECTORY', 'Verzeichnis'); +@define('SORT_BY', 'Sortieren nach'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Kein Trackback: Konnte Verbindung zu %s auf Port %d nicht herstellen'); +@define('MEDIA', 'Mediendatenbank'); +@define('MEDIA_LIBRARY', 'Mediendatenbank'); +@define('ADD_MEDIA', 'Mediendaten hinzufügen'); +@define('ENTER_MEDIA_URL', 'URL zum Download angeben:'); +@define('ENTER_MEDIA_UPLOAD', 'Datei zum Hochladen angeben:'); +@define('SAVE_FILE_AS', 'Datei speichern mit Name:'); +@define('STORE_IN_DIRECTORY', 'In diesem Verzeichnis ablegen: '); +@define('MEDIA_RENAME', 'Datei umbenennen'); +@define('IMAGE_RESIZE', 'Dateiausmaße ändern'); +@define('MEDIA_DELETE', 'Datei löschen'); +@define('FILES_PER_PAGE', 'Dateien pro Seite'); +@define('CLICK_FILE_TO_INSERT', 'Auf eine Datei klicken um diese einzufügen:'); +@define('SELECT_FILE', 'Bitte wählen Sie eine Datei'); +@define('MEDIA_FULLSIZE', 'Vollbild'); +@define('CALENDAR_BOW_DESC', 'Welcher Tag gibt den Wochenanfang an? Standard ist Montag.'); +@define('SUPERUSER', 'Verwaltung des Blog'); +@define('ALLOWS_YOU_BLAHBLAH', 'Zeigt einen Link zur Verwaltung des Blogs in der Seitenleiste an'); +@define('CALENDAR', 'Kalender'); +@define('SUPERUSER_OPEN_ADMIN', 'Zur Verwaltung des Blog'); +@define('SUPERUSER_OPEN_LOGIN', 'Login zum Blog'); +@define('INVERT_SELECTIONS', 'Auswahl umkehren'); +@define('COMMENTS_DELETE_CONFIRM', 'Sollen die markierten Kommentare gelöscht werden?'); +@define('COMMENT_DELETE_CONFIRM', 'Soll das Kommentar #%d von %s wirklich gelöscht werden?'); +@define('DELETE_SELECTED_COMMENTS', 'Markierte Kommentare löschen'); +@define('VIEW_COMMENT', 'Kommentar ansehen'); +@define('VIEW_ENTRY', 'Eintrag ansehen'); +@define('DELETE_FILE', 'Datei namens %s gelöscht'); +@define('ABOUT_TO_DELETE_FILE', 'Sie sind dabei die Datei %s zu löschen.
Wenn Sie die Datei in einem Ihrer Einträge verwenden, wird das Löschen Lücken erzeugen.
Soll trotzdem fortgefahren werden?

'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Ein neues Trackback für den Blog-Eintrag namens "%s" wurde empfangen.'); +@define('LOGIN', 'Login'); +@define('TRACKBACK_SENDING', 'Sende Trackback zu URI %s...'); +@define('TRACKBACK_SENT', 'Trackback erfolgreich'); +@define('TRACKBACK_FAILED', 'Trackback failed: %s'); +@define('TRACKBACK_NOT_FOUND', 'Keine Trackback-URI gefunden.'); +@define('TRACKBACK_URI_MISMATCH', 'Die automatisch erkannte Trackback-URI gleicht nicht der angegebenen URI.'); +@define('TRACKBACK_CHECKING', 'Überprüfe %s auf mögliche Trackbacks...'); +@define('TRACKBACK_NO_DATA', 'URI enthielt keine Daten'); +@define('TRACKBACK_SIZE', 'URI ist größer als die erlaubten %s Bytes.'); +@define('VIEWMODE_THREADED', 'Als Baumstruktur anzeigen'); +@define('COMMENTS_VIEWMODE_THREADED', 'Verschachtelt'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Linear'); +@define('DISPLAY_COMMENTS_AS', 'Ansicht der Kommentare: '); +@define('ADD_MEDIA_BLAHBLAH', 'Bild/Datei zur Sammlung hinzufügen:

Hier können Sie eine Datei (z.B. ein Bild) hochladen, oder mitteilen, von wo es geladen werden soll! Wenn das passende Bild fehlt, einfach bei Google danach suchen. Probieren Sie mal Googles Bildsuche, die Resultate sind oft brauchbar, aber auf jeden Fall witzig :). Aber vorsicht: Die meisten Bilder sind urheberrechtlich geschützt, also vorher fragen um Ärger zu vermeiden.

Methode wählen:
'); +@define('COMMENTS_FILTER_SHOW', 'Zeige'); +@define('COMMENTS_FILTER_ALL', 'Alle'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Nur bewilligte'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Zu bewilligende'); +@define('RSS_IMPORT_BODYONLY', 'Füge den gesamten importierten Text in das einzelne "Text"-Feld ein. Verhindert die Aufteilung in den "Erweiterten Eintrag"-Bereich.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Volle Einträge mit erweitertem Text im RSS-Feed einbinden'); +@define('MT_DATA_FILE', 'Movable Type Datensätze'); +@define('FORCE', 'Erzwingen'); +@define('CREATE_AUTHOR', 'Erstelle Autoren \'%s\'.'); +@define('CREATE_CATEGORY', 'Erstelle Kategorie \'%s\'.'); +@define('MYSQL_REQUIRED', 'Die MySQL-Extension muss installiert sein, um diese Aktion durchzuführen.'); +@define('COULDNT_CONNECT', 'Verbindung zu MySQL-Datenbank %s fehlgeschlagen.'); +@define('COULDNT_SELECT_DB', 'Datenbank %s konnte nicht ausgewählt werden.'); +@define('COULDNT_SELECT_USER_INFO', 'Die Benutzerinformationen von %s konnten nicht gelesen werden.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Die Kategorien von %s konnten nicht gelesen werden.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Die Einträge von %s konnten nicht gelesen werden.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Die Kommentare von %s konnten nicht gelesen werden.'); +@define('WEEK', 'Woche'); +@define('WEEKS', 'Wochen'); +@define('MONTHS', 'Monate'); +@define('DAYS', 'Tage'); +@define('ARCHIVE_FREQUENCY', 'Frequenz der Einträge des Kalenders'); +@define('ARCHIVE_FREQUENCY_DESC', 'Der Kalenderinterval, der zwischen den Einträgen verwendet werden soll'); +@define('ARCHIVE_COUNT', 'Anzahl von Einträgen im Archiv'); +@define('ARCHIVE_COUNT_DESC', 'Die Anzahl der angezeigten Monate, Wochen oder Tagen'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Es folgt eine Liste installierter Plugins'); +@define('SIDEBAR_PLUGIN', 'Seitenleisten-Plugin'); +@define('EVENT_PLUGIN', 'Ereignis-Plugin'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Hier klicken um %s zu installieren'); +@define('VERSION', 'version'); +@define('INSTALL', 'Installieren'); +@define('ALREADY_INSTALLED', 'Bereits installiert'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Plugin zur Installation wählen'); +@define('INSTALL_OFFSET', 'Server Zeitunterschied'); +@define('STICKY_POSTINGS', 'Dauerhafte Einträge'); +@define('INSTALL_FETCHLIMIT', 'Anzahl der Artikel auf der Startseite'); +@define('INSTALL_FETCHLIMIT_DESC', 'Wieviele Artikel sollen auf jeder Seite des Blogs angezeigt werden'); +@define('IMPORT_ENTRIES', 'Daten importieren'); +@define('EXPORT_ENTRIES', 'Einträge exportieren'); +@define('IMPORT_WELCOME', 'Willkommen im Serendipity Import-Bereich'); +@define('IMPORT_WHAT_CAN', 'Hier können Daten von anderen Weblog-Installationen importiert werde'); +@define('IMPORT_SELECT', 'Bitte die Art der Software auswählen, von der die Daten importiert werden sollen'); +@define('IMPORT_PLEASE_ENTER', 'Bitte die folgenden Daten eintrage'); +@define('IMPORT_NOW', 'Jetzt importieren!'); +@define('IMPORT_STARTING', 'Starte Import-Vorgang...'); +@define('IMPORT_FAILED', 'Import fehlgeschlagen'); +@define('IMPORT_DONE', 'Import erfolgreich abgeschlossen'); +@define('IMPORT_WEBLOG_APP', 'Weblog-Software'); +@define('IMPORT_NOTES', 'Hinweis'); +@define('EXPORT_FEED', 'Vollständigen RSS-Feed exportieren'); +@define('STATUS', 'Status nach dem Importieren'); +@define('IMPORT_GENERIC_RSS', 'Allgemeiner RSS-Import'); +@define('ACTIVATE_AUTODISCOVERY', 'Trackbacks an erkannte Links im Eintrag senden'); +@define('WELCOME_TO_ADMIN', 'Willkommen zur Serendipity Administrationsoberfläche.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Bitte geben Sie die Zugangsdaten ein.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Betrieben mit Serendipity %s und PHP %s'); +@define('INSTALL_USEGZIP', 'GZIP Kompression verwenden'); +@define('INSTALL_USEGZIP_DESC', 'Um die Auslieferung von Seiten zu beschleunigen, können diese vorher GZIP komprimiert werden, sofern der Browser des Betrachters dies unterstützt. Diese Einstellung ist empfohlen.'); +@define('INSTALL_SHOWFUTURE', 'Zukünftige Einträge zeigen'); +@define('INSTALL_SHOWFUTURE_DESC', 'Falls aktiviert, werden Einträge deren Datum in der Zukunft liegt angezeigt. Standardmäßig werden solche Einträge versteckt und erst angezeigt, wenn das eingetragene Datum erreicht wird.'); +@define('INSTALL_DBPERSISTENT', 'Persistente Verbindungen nutzen'); +@define('INSTALL_DBPERSISTENT_DESC', 'Aktiviert die nutzung einer persistenten Datenbankverbindung. Mehr dazu in der PHP-Dokumentation. Üblicherweise wird diese Einstellung nicht empfohlen.'); +@define('NO_IMAGES_FOUND', 'Keine Bilder gefunden'); +@define('PERSONAL_SETTINGS', 'Eigene Einstellungen'); +@define('REFERER', 'Referer'); +@define('NOT_FOUND', 'Nicht gefunden'); +@define('WRITABLE', 'Beschreibbar'); +@define('NOT_WRITABLE', 'Nicht beschreibbar'); +@define('PROBLEM_DIAGNOSTIC', 'Da ein Fehler bei der Systemdiagnose auftrat, muss dieser erst behoben werden bevor die Installation weitergeführt werden kann.'); +@define('SELECT_INSTALLATION_TYPE', 'Bitte die Installationsart wählen'); +@define('WELCOME_TO_INSTALLATION', 'Willkommen bei der Installation von Serendipity'); +@define('FIRST_WE_TAKE_A_LOOK', 'Als Erstes wird eine Systemdiagnose durchgeführt, um etwaigen Inkompatibiläten oder fehlenden Modulen vorzubeugen.'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Fehler werden in %s, Empfehlungen in %s und erfolgreiche Meldungen in %s dargestellt.'); +@define('RED', 'rot'); +@define('YELLOW', 'gelb'); +@define('GREEN', 'grün'); +@define('PRE_INSTALLATION_REPORT', 'Systemdiagnose von Serendipity v.%s'); +@define('RECOMMENDED', 'Empfohlen'); +@define('ACTUAL', 'Vorhanden'); +@define('PHPINI_CONFIGURATION', 'php.ini Konfiguration'); +@define('PHP_INSTALLATION', 'PHP Installation'); +@define('THEY_DO', 'Positiv'); +@define('THEY_DONT', 'Negativ'); +@define('SIMPLE_INSTALLATION', 'Einfache Installation'); +@define('EXPERT_INSTALLATION', 'Fortgeschrittene Installation'); +@define('COMPLETE_INSTALLATION', 'Vollständige Installation'); +@define('WONT_INSTALL_DB_AGAIN', 'werde Datenbank nicht erneut erzeugen'); +@define('CHECK_DATABASE_EXISTS', 'Prüfe ob Datenbank und Tabellen bereits bestehen'); +@define('CREATING_PRIMARY_AUTHOR', 'Erstelle Hauptbenutzer \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Setze Standard-Template'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Installiere Standard-Plugins'); +@define('SERENDIPITY_INSTALLED', 'Serendipity wurde erfolgreich installiert'); +@define('VISIT_BLOG_HERE', 'Besuchen Sie Ihr neues Blog hier'); +@define('THANK_YOU_FOR_CHOOSING', 'Danke, dass Sie Serendipity gewählt haben.'); +@define('ERROR_DETECTED_IN_INSTALL', 'Bei der Installation trat ein Fehler auf'); +@define('OPERATING_SYSTEM', 'Betriebssystem'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('TEMPLATE_SET', '\'%s\' wurde als Template gewählt'); +@define('SEARCH_ERROR', 'Die Suche konnte nicht wie gewünscht ausgeführt werden. Hinweis für den Administrator dieses Blogs: Der Fehler kann durch fehlende Index-Schlüssel der Datenbank verursacht werden. Auf MySQL-Systemen muss der Datenbankbenutzer-Account in der Lage sein, Index-Schlüssel zu erstellen und folgende Abfrage auszuführen:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
Die genaue Fehlermeldung der Datenbank bei der Suche lautete:
%s
'); +@define('EDIT_THIS_CAT', 'Bearbeite "%s"'); +@define('CATEGORY_REMAINING', 'Diese Kategorie löschen und Einträge darin in folgende Kategorie verschieben'); +@define('CATEGORY_INDEX', 'Es folgt eine Liste von verfügbaren Kategorien'); +@define('NO_CATEGORIES', 'Keine Kategorien'); +@define('RESET_DATE', 'Datum zurücksetzen'); +@define('RESET_DATE_DESC', 'Hier klicken um das Datum auf die aktuelle Systemzeit zu setzen'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Zugriffsrechte können durch folgenden Shell-Befehl (oder auch mittels FTP-Client) geändert werden: `%s` mit dem Namen des unbeschreibbaren Verzeichnisses.'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Hinweis: Das aktuelle Template verwendet eine ältere Methode der HTML-Erzeugung. Falls möglich bitte das Template auf die Nutzung von Smarty optimieren.'); +@define('ENTRY_PUBLISHED_FUTURE', 'Dieser Artikel ist noch nicht veröffentlicht.'); +@define('ENTRIES_BY', 'Einträge von %s'); +@define('PREVIOUS', 'Zurück'); +@define('NEXT', 'Weiter'); +@define('APPROVE', 'Bewilligen'); +@define('DO_MARKUP_DESCRIPTION', 'Textformatierung(en) durchführen, wie z.B. Smilies, Schnellformatierung via *, /, _, ...). Dadurch wird jeglicher eingegebener HTML-Code beibehalten.'); +@define('CATEGORY_ALREADY_EXIST', 'Eine Kategorie namens "%s" besteht bereits'); +@define('ERROR_FILE_FORBIDDEN', 'Der Upload von Dateien mit aktivem Inhalt ist nicht gestattet'); +@define('ADMIN', 'Administration'); +@define('ADMIN_FRONTPAGE', 'Startseite'); +@define('QUOTE', 'Zitat'); +@define('IFRAME_SAVE', 'Serendipity speichert nun den Eintrag, erstellt etwaige Trackbacks und führt mögliche XML-RPC Aufrufe durch. Dies kann eine Weile dauern...'); +@define('IFRAME_SAVE_DRAFT', 'Der Entwurf dieses Eintrags wurde gespeichert'); +@define('IFRAME_PREVIEW', 'Serendipity erstellt die Vorschau des Eintrags...'); +@define('IFRAME_WARNING', 'Ihr Browser unterstützt keine iframes. Bitte die Datei serendipity_config.inc.php öffnen und die Variable $serendipity[\'use_iframe\'] auf FALSE setzen.'); +@define('NONE', 'keine'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Voreinstellungen für neue Einträge'); +@define('UPGRADE', 'Aktualisieren'); +@define('UPGRADE_TO_VERSION', 'Aktuelle version %s'); +@define('DELETE_DIRECTORY', 'Verzeichnis löschen'); +@define('DELETE_DIRECTORY_DESC', 'Sie sind dabei, den Inhalt eines Verzeichnisses zu löschen, in dem Dateien enthalten sind, die möglicherweise in Blog-Einträgen verwendet wurden!'); +@define('FORCE_DELETE', 'ALLE Dateien dieses Verzeichnisses löschen, inklusive der Dateien, die Serendipity nicht katalogisiert hat'); +@define('CREATE_DIRECTORY', 'Verzeichnis anlegen'); +@define('CREATE_NEW_DIRECTORY', 'Neues Verzeichnis anlegen'); +@define('CREATE_DIRECTORY_DESC', 'Hier kann ein neues Verzeichnis angelegt werden um Mediendaten zu speichern. Bitte den Namen des neuen Verzeichnisses angeben und optional ein übergeordnetes Verzeichnis auswählen.'); +@define('BASE_DIRECTORY', 'Stammverzeichnis'); +@define('USERLEVEL_EDITOR_DESC', 'Redakteur'); +@define('USERLEVEL_CHIEF_DESC', 'Chef-Redakteur'); +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); +@define('USERCONF_USERLEVEL', 'Zugriffsrechte'); +@define('USERCONF_USERLEVEL_DESC', 'Zugriffsrechte bestimmen die Art und den Umfang des Zugriffes eines Benutzers auf die Funkionalitäten des Blogs'); +@define('USER_SELF_INFO', 'Angemeldet als %s (%s)'); +@define('ADMIN_ENTRIES', 'Einträge'); +@define('RECHECK_INSTALLATION', 'Installation erneut überprüfen'); +@define('IMAGICK_EXEC_ERROR', 'Konnte folgendes Programm nicht ausführen: "%s", Fehlermeldung: %s, Rückgabewert: %d'); +@define('INSTALL_OFFSET_DESC', 'Wieviele Stunden liegen zwischen der Uhrzeit des Servers (aktuell: %clock%) und der eigenen Zeitzone'); +@define('UNMET_REQUIREMENTS', 'Bedingung unerfüllt: %s'); +@define('CHARSET', 'Zeichensatz'); +@define('AUTOLANG', 'Sprache des Browsers eines Besuchers verwenden'); +@define('AUTOLANG_DESC', 'Falls aktiviert wird die im Browser des Besuchers eingestellte Sprache als Standardsprache für Einträge und die Serendipity Oberfläche benutzt.'); +@define('INSTALL_AUTODETECT_URL', 'HTTP-Hostnamen automatisch erkennen'); +@define('INSTALL_AUTODETECT_URL_DESC', 'Falls aktiviert wird Serendipity sicherstellen, dass der vom Besucher gewählte HTTP-Hostname als BaseURL variable verwendet wird. Sofern diese Option aktiviert ist, ist es möglich, mehrere Domainnamen für das Weblog zu verwenden. Alle Links werden dann mit dem HTTP-Hostnamen umgeschrieben, der vom Besucher gewählt wurde.'); +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Voller Name'); +@define('USERCONF_REALNAME_DESC', 'Der vollständige Name des Autoren. Nur dieser Name wird von Besuchern gelesen.'); +@define('HOTLINK_DONE', 'Link zur Datei erstellt.
Fertig.'); +@define('ENTER_MEDIA_URL_METHOD', 'Download-Methode:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Hinweis: Falls Sie auf eine Datei/Grafik nur verweisen wollen, stellen Sie bitte sicher, dass Sie Erlaubnis haben zu diesen Bildern zu linken, oder dass die Zielwebseite ihre ist. Dateiverweise/Links ermöglichen es eine Datei nicht selber zu speichern, sondern stattdessen nur zum Zielort zu verweisen.'); +@define('MEDIA_HOTLINKED', 'Link'); +@define('FETCH_METHOD_IMAGE', 'Bild auf diesem Server speichern'); +@define('FETCH_METHOD_HOTLINK', 'Nur zum Quellserver linken'); +@define('DELETE_HOTLINK_FILE', 'Link zu Datei namens %s löschen?'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'E-Mail Adressen einbinden?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_en.inc.php b/lang/serendipity_lang_en.inc.php new file mode 100644 index 0000000..539f42f --- /dev/null +++ b/lang/serendipity_lang_en.inc.php @@ -0,0 +1,668 @@ +Done.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Error: File already exists on your machine!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Unknown error occured, file not uploaded. Maybe your filesize is larger than the maximum size allowed by your server installation. Check with your ISP or edit your php.ini file to allow larger file size uploads.'); +@define('GO', 'Go!'); +@define('NEWSIZE', 'New size: '); +@define('RESIZE_BLAHBLAH', 'Resize %s

'); +@define('ORIGINAL_SIZE', 'Original size: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Here, you can adjust the image size. If you want to resize the image proportionally, just enter a value in one of the two boxes and press the TAB key -- I will automatically calculate the new size so the image proportions do not get messed up

'); +@define('QUICKJUMP_CALENDAR', 'QuickJump Calendar'); +@define('QUICKSEARCH', 'Quicksearch'); +@define('SEARCH_FOR_ENTRY', 'Search for an entry'); +@define('ARCHIVES', 'Archives'); +@define('BROWSE_ARCHIVES', 'Browse archives by month'); +@define('TOP_REFERRER', 'Top Referrers'); +@define('SHOWS_TOP_SITES', 'Shows top sites that linked to your blogs'); +@define('TOP_EXITS', 'Top Exits'); +@define('SHOWS_TOP_EXIT', 'Shows top exit links from your blogs'); +@define('SYNDICATION', 'Syndication'); +@define('SHOWS_RSS_BLAHBLAH', 'Shows RSS syndication links'); +@define('ADVERTISES_BLAHBLAH', 'Advertises the origins of your blog'); +@define('HTML_NUGGET', 'HTML Nugget'); +@define('HOLDS_A_BLAHBLAH', 'Holds a nugget of HTML in your sidebar'); +@define('TITLE_FOR_NUGGET', 'Title for the nugget'); +@define('THE_NUGGET', 'The Nugget of HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Syndicate This Blog'); +@define('YOU_CHOSE', 'You chose %s'); +@define('IMAGE_ROTATE_LEFT', 'Rotate image 90 degrees counter-clockwise'); +@define('IMAGE_ROTATE_RIGHT', 'Rotate image 90 degrees clockwise'); +@define('IMAGE_SIZE', 'Image size'); +@define('IMAGE_AS_A_LINK', 'Image insertion'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', 'Trackbacks'); +@define('TRACKBACK', 'Trackback'); +@define('NO_TRACKBACKS', 'No Trackbacks'); +@define('TOPICS_OF', 'Topics from'); +@define('VIEW_FULL', 'view full'); +@define('VIEW_TOPICS', 'view topics'); +@define('AT', 'at'); +@define('SET_AS_TEMPLATE', 'Set as template'); +@define('IN', 'in'); +@define('EXCERPT', 'Excerpt'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Link to entry'); +@define('LINK_TO_REMOTE_ENTRY', 'Link to remote-entry'); +@define('IP_ADDRESS', 'IP-address'); +@define('USER', 'User'); +@define('THUMBNAIL_USING_OWN', 'Using %s as its own thumbnail because it is so small already.'); +@define('THUMBNAIL_FAILED_COPY', 'Wanted to use %s as its own thumbnail, but failed to copy!'); +@define('AUTHOR', 'Author'); +@define('LAST_UPDATED', 'Last Updated'); +@define('TRACKBACK_SPECIFIC', 'Trackback specific URI for this entry'); +@define('DIRECT_LINK', 'Direct link to this entry'); +@define('COMMENT_ADDED', 'Your comment was successfully added. '); +@define('COMMENT_ADDED_CLICK', 'Click %shere to return%s to the comments, and %shere to close%s this window.'); +@define('COMMENT_NOT_ADDED', 'Your comment could not be added, because comments for this entry have been disabled. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Click %shere to return%s to the comments, and %shere to close%s this window.'); +@define('COMMENTS_DISABLE', 'Do not allow comments to this entry'); +@define('COMMENTS_ENABLE', 'Allow comments to this entry'); +@define('COMMENTS_CLOSED', 'The author does not allow comments to this entry'); +@define('EMPTY_COMMENT', 'Your comment did not contain anything, please %sgo back%s and try again'); +@define('ENTRIES_FOR', 'Entries from %s'); +@define('DOCUMENT_NOT_FOUND', 'The document %s was not found.'); +@define('USERNAME', 'Username'); +@define('PASSWORD', 'Password'); +@define('AUTOMATIC_LOGIN', 'Save information'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity Installation'); +@define('LEFT', 'left'); +@define('RIGHT', 'right'); +@define('HIDDEN', 'hidden'); +@define('REMOVE_TICKED_PLUGINS', 'Remove ticked plugins'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Save changes to layout'); +@define('COMMENTS_FROM', 'Comments from'); +@define('ERROR', 'Error'); +@define('ENTRY_SAVED', 'Your entry has been saved'); +@define('DELETE_SURE', 'Are you sure you want to delete #%s permanently?'); +@define('NOT_REALLY', 'No'); +@define('DUMP_IT', 'Yes'); +@define('RIP_ENTRY', 'Entry #%s deleted.'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Category #%s deleted. Old articles moved to category #%s.'); +@define('CATEGORY_DELETED', 'Category #%s deleted.'); +@define('INVALID_CATEGORY', 'No category was provided for deletion'); +@define('CATEGORY_SAVED', 'Category saved'); +@define('SELECT_TEMPLATE', 'Select the template you wish to use for your blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Entries were not successfully inserted!'); +@define('MT_DATA_FILE', 'Movable Type data file'); +@define('FORCE', 'Force'); +@define('CREATE_AUTHOR', 'Create author \'%s\'.'); +@define('CREATE_CATEGORY', 'Create category \'%s\'.'); +@define('MYSQL_REQUIRED', 'You must have the MySQL extension in order to perform this action.'); +@define('COULDNT_CONNECT', 'Could not connect to MySQL database: %s.'); +@define('COULDNT_SELECT_DB', 'Could not select database: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Could not select user information: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Could not select category information: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Could not select entry information: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Could not select comment information: %s.'); +@define('YES', 'Yes'); +@define('NO', 'No'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Check & save'); +@define('DIRECTORY_WRITE_ERROR', 'Cannot write to directory %s. Please check the permissions.'); +@define('DIRECTORY_CREATE_ERROR', 'Directory %s does not exist and could not be created. Please create the directory manually'); +@define('DIRECTORY_RUN_CMD', ' -> run %s %s'); +@define('CANT_EXECUTE_BINARY', 'Cannot execute the %s binary'); +@define('FILE_WRITE_ERROR', 'Cannot write to file %s.'); +@define('FILE_CREATE_YOURSELF', 'Please create the file yourself or check permissions'); +@define('COPY_CODE_BELOW', '
* Just copy the code below and place it in %s in your %s folder:
%s
' . "\n"); +@define('WWW_USER', 'Change www to the user apache runs as (e.g. nobody).'); +@define('BROWSER_RELOAD', 'Once you have done this, hit your browser\'s "reload" button.'); +@define('DIAGNOSTIC_ERROR', 'We detected some errors while running some diagnostics on your entered information:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity is not yet installed. Please install it now.'); +@define('INCLUDE_ERROR', 'serendipity error: could not include %s - exiting.'); +@define('DATABASE_ERROR', 'serendipity error: unable to connect to database - exiting.'); +@define('CREATE_DATABASE', 'Creating default database setup...'); +@define('ATTEMPT_WRITE_FILE', 'Attempting to write %s file...'); +@define('WRITTEN_N_SAVED', 'Configuration written & saved'); +@define('IMAGE_ALIGNMENT', 'Image alignment'); +@define('ENTER_NEW_NAME', 'Enter the new name for: '); +@define('RESIZING', 'Resizing'); +@define('RESIZE_DONE', 'Done (resized %s images).'); +@define('SYNCING', 'Synchronizing the database with the image folder'); +@define('SYNC_DONE', 'Done (Synchronized %s images).'); +@define('FILE_NOT_FOUND', 'Unable to locate the file entitled %s, maybe it has already been deleted?'); +@define('ABORT_NOW', 'Abort now'); +@define('REMOTE_FILE_NOT_FOUND', 'File was not located on the remote server, are you sure the URL: %s is correct?'); +@define('FILE_FETCHED', '%s fetched as %s'); +@define('FILE_UPLOADED', 'File %s successfully uploaded as %s'); +@define('WORD_OR', 'Or'); +@define('SCALING_IMAGE', 'Scaling %s to %s x %s px'); +@define('KEEP_PROPORTIONS', 'Keep proportions'); +@define('REALLY_SCALE_IMAGE', 'Really scale the image? This operation cannot be undone!'); +@define('TOGGLE_ALL', 'Toggle expand all'); +@define('TOGGLE_OPTION', 'Toggle option'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Subscribe to this entry'); +@define('UNSUBSCRIBE_OK', "%s is now unsubscribed from this entry"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'New comment to subscribed entry "%s"'); +@define('SUBSCRIPTION_MAIL', "Hello %s,\n\nA new comment was made to the entry you are monitoring on \"%s\", entitled \"%s\"\nThe name of the poster is: %s\n\nYou can find the entry here: %s\n\nYou can unsubscribe by clicking on this link: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Hello %s,\n\nA new trackback was added to the entry you are monitoring on \"%s\", entitled \"%s\"\nThe name of the poster is: %s\n\nYou can find the entry here: %s\n\nYou can unsubscribe by clicking on this link: %s\n"); +@define('SIGNATURE', "\n-- \n%s is powered by Serendipity.\nThe best blog around, you can use it too.\nCheck out to find out how."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comments'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Field "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Field "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Image for the RSS feed'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Image width'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Image height'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-Mail address of the webmaster, if available. (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-Mail address of the managing editor, if available. (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL of an image in GIF/JPEG/PNG format, if available. (empty: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'in pixels, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'in pixels, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Field "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Amount of minutes after which your blog should not be cached any more by foreign sites/applications (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Field "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Should the "pubDate"-field be embedded for a RSS-channel, to show the date of the latest entry?'); +@define('CONTENT', 'Content'); +@define('TYPE', 'Type'); +@define('DRAFT', 'Draft'); +@define('PUBLISH', 'Publish'); +@define('PREVIEW', 'Preview'); +@define('DATE', 'Date'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Warning: The date you specified was invalid. It has to be given in YYYY-MM-DD HH:MM format.'); +@define('CATEGORY_PLUGIN_DESC', 'Shows the list of categories.'); +@define('ALL_AUTHORS', 'All authors'); +@define('CATEGORIES_TO_FETCH', 'Categories to fetch'); +@define('CATEGORIES_TO_FETCH_DESC', 'Fetch categories from which author?'); +@define('PAGE_BROWSE_ENTRIES', 'Page %s of %s, totalling %s entries'); +@define('PREVIOUS_PAGE', 'previous page'); +@define('NEXT_PAGE', 'next page'); +@define('ALL_CATEGORIES', 'All categories'); +@define('DO_MARKUP', 'Perform Markup Transformations'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Dateformatting'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'The format of the entry\'s actual date, using PHPs strftime() variables. (Default: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Unable to open template file, please update serendipity!'); +@define('ADVANCED_OPTIONS', 'Advanced Options'); +@define('EDIT_ENTRY', 'Edit entry'); +@define('HTACCESS_ERROR', 'To check your local webserver installation, serendipity needs to be able to write the file ".htaccess". This was not possible because of permission errors. Please adjust the permissions like this:
  %s
and reload this page.'); +@define('SIDEBAR_PLUGINS', 'Sidebar Plugins'); +@define('EVENT_PLUGINS', 'Event Plugins'); +@define('SORT_ORDER', 'Sort order'); +@define('SORT_ORDER_NAME', 'Filename'); +@define('SORT_ORDER_EXTENSION', 'File extension'); +@define('SORT_ORDER_SIZE', 'Filesize'); +@define('SORT_ORDER_WIDTH', 'Image width'); +@define('SORT_ORDER_HEIGHT', 'Image height'); +@define('SORT_ORDER_DATE', 'Upload date'); +@define('SORT_ORDER_ASC', 'Ascending'); +@define('SORT_ORDER_DESC', 'Descending'); +@define('THUMBNAIL_SHORT', 'Thumb'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Apply markup to %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Beginning of the week'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity has detected that your currently installed Serendipity version is %s. It seems you are attempting to upgrade to version %s, so you need to click here to continue the upgrade process.'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Hi, and welcome to the Serendipity upgrade agent.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'I am here to help you upgrade your Serendipity %s installation.'); +@define('SERENDIPITY_UPGRADER_WHY', 'You are seeing this message because you have just installed Serendipity %s, but have not yet upgraded your database installation to fit this version'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Database updates (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'I have found the following .sql files which needs to be run before you can continue normal operation of Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Version specific tasks'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'No version specific tasks found'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Do you wish me to perform the above tasks?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'No, I will run them manually'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Yes, please do so'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'It appears you do not need any upgrades run'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Consider Serendipity upgraded'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'You have ignored the upgrade stage of Serendipity, please make sure your database is correctly installed, and scheduled functions are run'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Your Serendipity installation is now upgraded to version %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'You can return to your blog by clicking %shere%s'); +@define('MANAGE_USERS', 'Manage users'); +@define('CREATE_NEW_USER', 'Create new user'); +@define('CREATE_NOT_AUTHORIZED', 'You cannot modify users with the same userlevel as yourself'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'You cannot create users with a higher userlevel than yourself'); +@define('CREATED_USER', 'A new user %s has been created'); +@define('MODIFIED_USER', 'The properties of user %s have been changed'); +@define('USER_LEVEL', 'Userlevel'); +@define('DELETE_USER', 'You are about to delete user #%d %s. Are you serious? This will disallow showing any entries written by him on the frontend.'); +@define('DELETED_USER', 'User #%d %s deleted.'); +@define('LIMIT_TO_NUMBER', 'How many items should be displayed?'); +@define('ENTRIES_PER_PAGE', 'entries per page'); +@define('XML_IMAGE_TO_DISPLAY', 'XML Button'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Links to XML Feeds will be displayed by this image. Leave empty for default, enter \'none\' to disable.'); + +@define('DIRECTORIES_AVAILABLE', 'In the list of available subdirectories you can click on any directory name to create a new directory within that structure.'); +@define('ALL_DIRECTORIES', 'all directories'); +@define('MANAGE_DIRECTORIES', 'Manage directories'); +@define('DIRECTORY_CREATED', 'Directory %s has been created.'); +@define('PARENT_DIRECTORY', 'Parent directory'); +@define('CONFIRM_DELETE_DIRECTORY', 'Are you sure you want to remove all the contents of directory %s?'); +@define('ERROR_NO_DIRECTORY', 'Error: Directory %s does not exist'); +@define('CHECKING_DIRECTORY', 'Checking files in directory %s'); +@define('DELETING_FILE', 'Deleting file %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Could not remove non-empty directory. Check the "force deletion" checkbox if you want to remove those files as well, and then submit again. Existing files are:'); +@define('DIRECTORY_DELETE_FAILED', 'Deletion of directory %s failed. Check permissions or messages above.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Directory %s successfully deleted.'); +@define('SKIPPING_FILE_EXTENSION', 'Skipping file: Missing extension on %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Skipping file: %s not readable.'); +@define('FOUND_FILE', 'Found new/modified file: %s.'); +@define('ALREADY_SUBCATEGORY', '%s is a already a subcategory of %s.'); +@define('PARENT_CATEGORY', 'Parent category'); +@define('IN_REPLY_TO', 'In reply to'); +@define('TOP_LEVEL', 'Top level'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'Permissions'); +@define('SETTINGS_SAVED_AT', 'The new settings have been saved at %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Database Settings'); +@define('INSTALL_CAT_DB_DESC', 'Here you can enter all your database information. Serendipity needs this to be able to function'); +@define('INSTALL_DBTYPE', 'Database type'); +@define('INSTALL_DBTYPE_DESC', 'Database type'); +@define('INSTALL_DBHOST', 'Database host'); +@define('INSTALL_DBHOST_DESC', 'The hostname for your database server'); +@define('INSTALL_DBUSER', 'Database user'); +@define('INSTALL_DBUSER_DESC', 'The username used to connect to your database'); +@define('INSTALL_DBPASS', 'Database password'); +@define('INSTALL_DBPASS_DESC', 'The password matching the above username'); +@define('INSTALL_DBNAME', 'Database name'); +@define('INSTALL_DBNAME_DESC', 'The name of your database'); +@define('INSTALL_DBPREFIX', 'Database table prefix'); +@define('INSTALL_DBPREFIX_DESC', 'Prefix for the table names, e.g. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Paths'); +@define('INSTALL_CAT_PATHS_DESC', 'Various paths to different essential folders and files. Do not forget trailing slashes for directories!'); +@define('INSTALL_FULLPATH', 'Full path'); +@define('INSTALL_FULLPATH_DESC', 'The full and absolute path to your serendipity installation'); +@define('INSTALL_UPLOADPATH', 'Upload path'); +@define('INSTALL_UPLOADPATH_DESC', 'All uploads will go here, relative to the \'Full path\' - typically \'uploads/\''); +@define('INSTALL_RELPATH', 'Relative path'); +@define('INSTALL_RELPATH_DESC', 'Path to serendipity for your browser, typically \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Relative template path'); +@define('INSTALL_RELTEMPLPATH_DESC', 'The path to the folder containing your templates - Relative to the \'relative path\''); +@define('INSTALL_RELUPLOADPATH', 'Relative upload path'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Path to your uploads for browsers - Relative to the \'relative path\''); +@define('INSTALL_URL', 'URL to blog'); +@define('INSTALL_URL_DESC', 'Base URL to your serendipity installation'); +@define('INSTALL_INDEXFILE', 'Index file'); +@define('INSTALL_INDEXFILE_DESC', 'The name of your serendipity index file'); + +/* GENERAL SETTINGS */ +@define('INSTALL_CAT_SETTINGS', 'General Settings'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Customize how Serendipity behaves'); +@define('INSTALL_USERNAME', 'Admin username'); +@define('INSTALL_USERNAME_DESC', 'Username for admin login'); +@define('INSTALL_PASSWORD', 'Admin password'); +@define('INSTALL_PASSWORD_DESC', 'Password for admin login'); +@define('INSTALL_EMAIL', 'Admin email'); +@define('INSTALL_EMAIL_DESC', 'Email for the blog administrator'); +@define('INSTALL_SENDMAIL', 'Send mails to admin?'); +@define('INSTALL_SENDMAIL_DESC', 'Do you want to receive emails when comments are posted to your entries?'); +@define('INSTALL_SUBSCRIBE', 'Allow users to subscribe to entries?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Allow users to subscribe to an entry and thereby receive a mail when new comments are made to that entry'); +@define('INSTALL_BLOGNAME', 'Blog name'); +@define('INSTALL_BLOGNAME_DESC', 'The title of your blog'); +@define('INSTALL_BLOGDESC', 'Blog description'); +@define('INSTALL_BLOGDESC_DESC', 'Description of your blog'); +@define('INSTALL_LANG', 'Language'); +@define('INSTALL_LANG_DESC', 'Select the language for your blog'); + +/* APPEARANCE AND OPTIONS */ +@define('INSTALL_CAT_DISPLAY', 'Appearance and Options'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Customize how Serendipity looks and feels'); +@define('INSTALL_WYSIWYG', 'Use WYSIWYG editor'); +@define('INSTALL_WYSIWYG_DESC', 'Do you want to use the WYSIWYG editor? (Works on IE5+, partially in Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Force XHTML 1.1 compliance'); +@define('INSTALL_XHTML11_DESC', 'Do you want to force XHTML 1.1 compliance (may cause problems for back-/frontend on older 4th generation browsers)'); +@define('INSTALL_POPUP', 'Enable use of popup windows'); +@define('INSTALL_POPUP_DESC', 'Do you want to use popup windows for comments, trackbacks et al?'); +@define('INSTALL_EMBED', 'Is serendipity embedded?'); +@define('INSTALL_EMBED_DESC', 'If you want to embed serendipity within a regular page, set to true to discard any headers and just print the contents. You can make use of the indexFile option to use a wrapper class where you put your normal webpage headers. See the README file for more information!'); +@define('INSTALL_TOP_AS_LINKS', 'Show Top Exits/Referrers as links?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"no": Exits and Referrers are shown as plain text to prevent google spam. "yes": Exits and Referrers are shown as hyperlinks. "default": Use setting from global configuration (recommended).'); +@define('INSTALL_BLOCKREF', 'Blocked Referers'); +@define('INSTALL_BLOCKREF_DESC', 'Are there any special hosts you want not to show up in the referers list? Separate the list of hostnames with \';\' and note that the host is blocked by substring matches!'); +@define('INSTALL_REWRITE', 'URL Rewriting'); +@define('INSTALL_REWRITE_DESC', 'Select which rules you wish to use when generating URLs. Enabling rewrite rules will make pretty URLs for your blog and make it better indexable for spiders like google. The webserver needs to support either mod_rewrite or "AllowOverride All" for your serendipity dir. The default setting is auto-detected'); + +/* IMAGECONVERSION SETTINGS */ +@define('INSTALL_CAT_IMAGECONV', 'Image Conversion Settings'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Enter general information about how serendipity should handle Images'); +@define('INSTALL_IMAGEMAGICK', 'Use ImageMagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Do you have ImageMagick installed and want to use it to resize images?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Path to convert binary'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Full path & name of your ImageMagick convert binary'); +@define('INSTALL_THUMBSUFFIX', 'Thumbnail suffix'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Thumbnails will be named with the following format: original.[suffix].ext'); +@define('INSTALL_THUMBWIDTH', 'Thumbnail dimensions'); +@define('INSTALL_THUMBWIDTH_DESC', 'Static maximum width of auto-generated thumbnails'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Your personal details'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Change your personal details'); +@define('USERCONF_USERNAME', 'Your username'); +@define('USERCONF_USERNAME_DESC', 'The username you use to log in to the blog'); +@define('USERCONF_PASSWORD', 'Your password'); +@define('USERCONF_PASSWORD_DESC', 'The password you wish to use to log in to the blog'); +@define('USERCONF_EMAIL', 'Your e-mail address'); +@define('USERCONF_EMAIL_DESC', 'Your personal e-mail address'); +@define('USERCONF_SENDCOMMENTS', 'Send comment announcements?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Do you want to receive emails when comments are posted to your entries?'); +@define('USERCONF_SENDTRACKBACKS', 'Send trackback announcements?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Do you want to receive emails when trackbacks are posted to your entries?'); +@define('USERCONF_ALLOWPUBLISH', 'Rights: Publishing entries?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Is this user allowed to publish entries?'); +@define('SUCCESS', 'Success'); +@define('POWERED_BY_SHOW_TEXT', 'Show "Serendipity" as text'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Will display "Serendipity Weblog" as text'); +@define('POWERED_BY_SHOW_IMAGE', 'Show "Serendipity" with a logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Displays the Serendipity logo'); +@define('PLUGIN_ITEM_DISPLAY', 'Where should the item be displayed?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Extended entry only'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Overview page only'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'All times'); +@define('RSS_IMPORT_CATEGORY', 'Use this category for non-matching imported entries'); + +@define('COMMENTS_WILL_BE_MODERATED', 'Submitted comments will be subject to moderation before being displayed.'); +@define('YOU_HAVE_THESE_OPTIONS', 'You have the following options available:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Warning: This comment needs approval before it will be displayed'); +@define('DELETE_COMMENT', 'Delete comment'); +@define('APPROVE_COMMENT', 'Approve comment'); +@define('REQUIRES_REVIEW', 'Requires review'); +@define('COMMENT_APPROVED', 'Comment #%s has successfully been approved'); +@define('COMMENT_DELETED', 'Comment #%s has successfully been deleted'); +@define('COMMENTS_MODERATE', 'Comments & trackbacks to this entry requires moderation'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Warning: This trackback needs approval before it will be displayed'); +@define('DELETE_TRACKBACK', 'Delete trackback'); +@define('APPROVE_TRACKBACK', 'Approve trackback'); +@define('TRACKBACK_APPROVED', 'Trackback #%s has successfully been approved'); +@define('TRACKBACK_DELETED', 'Trackback #%s has successfully been deleted'); +@define('VIEW', 'View'); +@define('COMMENT_ALREADY_APPROVED', 'Comment #%s appears to already have been approved'); +@define('COMMENT_EDITED', 'The selected comment has been edited'); +@define('HIDE', 'Hide'); +@define('VIEW_EXTENDED_ENTRY', 'Continue reading "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'This link is not meant to be clicked. It contains the trackback URI for this entry. You can use this URI to send ping- & trackbacks from your own blog to this entry. To copy the link, right click and select "Copy Shortcut" in Internet Explorer or "Copy Link Location" in Mozilla.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Use https for login'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Lets the login-link point to a https-location. Your webserver needs to support this!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Make external links clickable?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": Unchecked external links (Top Exits, Top Referrers, User comments) are not shown/shown as plain text where applicable to prevent google spam (recommended). "yes": Unchecked external links are shown as hyperlinks. Can be overridden within sidebar plugin configuration!'); +@define('PAGE_BROWSE_COMMENTS', 'Page %s of %s, totalling %s comments'); +@define('FILTERS', 'Filters'); +@define('FIND_ENTRIES', 'Find entries'); +@define('FIND_COMMENTS', 'Find comments'); +@define('FIND_MEDIA', 'Find media'); +@define('FILTER_DIRECTORY', 'Directory'); +@define('SORT_BY', 'Sort by'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'No Trackback sent: Could not open connection to %s on port %d'); +@define('MEDIA', 'Media'); +@define('MEDIA_LIBRARY', 'Media library'); +@define('ADD_MEDIA', 'Add media'); +@define('ENTER_MEDIA_URL', 'Enter an URL of a file to fetch:'); +@define('ENTER_MEDIA_UPLOAD', 'Select a file you wish to upload:'); +@define('SAVE_FILE_AS', 'Save the file as:'); +@define('STORE_IN_DIRECTORY', 'Store inside the following directory: '); +@define('ADD_MEDIA_BLAHBLAH', 'Add a file to your media repository:

Here you can upload mediafiles, or tell me to fetch them from somewhere in the web! If you do not have an appropriate image, search for images on google matching your thoughts, the results are often useful and funny :) But be careful, most images are copyrighted, so you should ask before using them.

Select method:
'); +@define('MEDIA_RENAME', 'Rename this file'); +@define('IMAGE_RESIZE', 'Resize this image'); +@define('MEDIA_DELETE', 'Delete this file'); +@define('FILES_PER_PAGE', 'Files per page'); +@define('CLICK_FILE_TO_INSERT', 'Click the file you want to insert:'); +@define('SELECT_FILE', 'Select file to insert'); +@define('MEDIA_FULLSIZE', 'Fullsize'); +@define('CALENDAR_BOW_DESC', 'The day of the week that should be considered the beginning of the week. Default is Monday'); +@define('SUPERUSER', 'Blog Administration'); +@define('ALLOWS_YOU_BLAHBLAH', 'Provides a link in the sidebar to your blog administration'); +@define('CALENDAR', 'Calendar'); +@define('SUPERUSER_OPEN_ADMIN', 'Open administration'); +@define('SUPERUSER_OPEN_LOGIN', 'Open login screen'); +@define('INVERT_SELECTIONS', 'Invert Selections'); +@define('COMMENTS_DELETE_CONFIRM', 'Are you sure you wish to delete the selected comments?'); +@define('COMMENT_DELETE_CONFIRM', 'Are you sure you wish to delete comment #%d, written by %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Delete selected comments'); +@define('VIEW_COMMENT', 'View comment'); +@define('VIEW_ENTRY', 'View entry'); +@define('DELETE_FILE_FAIL' , 'Unable to delete file %s'); +@define('DELETE_THUMBNAIL', 'Deleted the image thumbnail entitled %s'); +@define('DELETE_FILE', 'Deleted the file entitled %s'); +@define('ABOUT_TO_DELETE_FILE', 'You are about to delete %s
If you are using this file in some of your entries, it will cause dead links or images
Are you sure you wish to proceed?

'); +@define('TRACKBACK_SENDING', 'Sending trackback to URI %s...'); +@define('TRACKBACK_SENT', 'Trackback successful'); +@define('TRACKBACK_FAILED', 'Trackback failed: %s'); +@define('TRACKBACK_NOT_FOUND', 'No trackback-URI found.'); +@define('TRACKBACK_URI_MISMATCH', 'The autodiscovered trackback URI does not match our target URI.'); +@define('TRACKBACK_CHECKING', 'Checking %s for possible trackbacks...'); +@define('TRACKBACK_NO_DATA', 'Target contained no data'); +@define('TRACKBACK_SIZE', 'Target URI exceeded maximum filesize of %s bytes.'); +@define('COMMENTS_VIEWMODE_THREADED', 'Threaded'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Linear'); +@define('DISPLAY_COMMENTS_AS', 'Display comments as'); +@define('COMMENTS_FILTER_SHOW', 'Show'); +@define('COMMENTS_FILTER_ALL', 'All'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Only approved'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Pending approval'); +@define('RSS_IMPORT_BODYONLY', 'Put all imported text in the "body" section and do not split up into "extended entry" section.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Show full articles with extended body inside RSS feed'); +@define('WEEK', 'Week'); +@define('WEEKS', 'Weeks'); +@define('MONTHS', 'Months'); +@define('DAYS', 'Days'); +@define('ARCHIVE_FREQUENCY', 'Calendar item frequency'); +@define('ARCHIVE_FREQUENCY_DESC', 'The calendar interval to use between each item in the list'); +@define('ARCHIVE_COUNT', 'Number of items in the list'); +@define('ARCHIVE_COUNT_DESC', 'The total number of months, weeks or days to display'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Below is a list of installed plugins'); +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); +@define('EVENT_PLUGIN', 'event plugin'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Click here to install a new %s'); +@define('VERSION', 'version'); +@define('INSTALL', 'Install'); +@define('ALREADY_INSTALLED', 'Already installed'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Select the plugin which you wish to install'); +@define('INSTALL_OFFSET', 'Server time Offset'); +@define('STICKY_POSTINGS', 'Sticky Postings'); +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); +@define('IMPORT_ENTRIES', 'Import data'); +@define('EXPORT_ENTRIES', 'Export entries'); +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); +@define('IMPORT_NOW', 'Import now!'); +@define('IMPORT_STARTING', 'Starting import procedure...'); +@define('IMPORT_FAILED', 'Import failed'); +@define('IMPORT_DONE', 'Import successfully completed'); +@define('IMPORT_WEBLOG_APP', 'Weblog application'); +@define('IMPORT_NOTES', 'Note:'); +@define('EXPORT_FEED', 'Export full RSS feed'); +@define('STATUS', 'Status after import'); +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); +@define('INSTALL_SHOWFUTURE', 'Show future entries'); +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); +@define('NO_IMAGES_FOUND', 'No images found'); +@define('PERSONAL_SETTINGS', 'Personal Settings'); +@define('REFERER', 'Referer'); +@define('NOT_FOUND', 'Not found'); +@define('WRITABLE', 'Writable'); +@define('NOT_WRITABLE', 'Not writable'); +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation until the above errors are fixed'); +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); +@define('RED', 'red'); +@define('YELLOW', 'yellow'); +@define('GREEN', 'green'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); +@define('RECOMMENDED', 'Recommended'); +@define('ACTUAL', 'Actual'); +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); +@define('PHP_INSTALLATION', 'PHP installation'); +@define('THEY_DO', 'they do'); +@define('THEY_DONT', 'they do not'); +@define('SIMPLE_INSTALLATION', 'Simple installation'); +@define('EXPERT_INSTALLATION', 'Expert installation'); +@define('COMPLETE_INSTALLATION', 'Complete installation'); +@define('WONT_INSTALL_DB_AGAIN', 'will not install the database again'); +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); +@define('OPERATING_SYSTEM', 'Operating system'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); +@define('EDIT_THIS_CAT', 'Editing "%s"'); +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); +@define('NO_CATEGORIES', 'No categories'); +@define('RESET_DATE', 'Reset date'); +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); +@define('ENTRIES_BY', 'Entries by %s'); +@define('PREVIOUS', 'Previous'); +@define('NEXT', 'Next'); +@define('APPROVE', 'Approve'); +@define('DO_MARKUP_DESCRIPTION', 'Apply markup transformations to the text (smilies, shortcut markups via *, /, _, ...). Disabling this will preserve any HTML-code in the text.'); +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); +@define('ADMIN', 'Administration'); +@define('ADMIN_FRONTPAGE', 'Frontpage'); +@define('QUOTE', 'Quote'); +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); +@define('UPGRADE', 'Upgrade'); +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); +@define('DELETE_DIRECTORY', 'Delete directory'); +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); +@define('CREATE_DIRECTORY', 'Create directory'); +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); +@define('BASE_DIRECTORY', 'Base directory'); +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); +@define('USERCONF_USERLEVEL', 'Access level'); +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); +@define('ADMIN_ENTRIES', 'Entries'); +@define('RECHECK_INSTALLATION', 'Recheck installation'); +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_es.inc.php b/lang/serendipity_lang_es.inc.php new file mode 100644 index 0000000..fb8a357 --- /dev/null +++ b/lang/serendipity_lang_es.inc.php @@ -0,0 +1,673 @@ +, +# Manuel García + +@define('LANG_CHARSET', 'ISO-8859-15'); +@define('DATE_LOCALES', 'spanish, sp, es, es_ES, es_ES.ISO_8859-1, es_ES.ISO8859-1, es-ES'); +@define('DATE_FORMAT_ENTRY', '%A, %e de %B del %Y'); +@define('DATE_FORMAT_SHORT', '%d.%m.%Y %H:%M'); +@define('WYSIWYG_LANG', 'es'); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Suite de Administración de Serendipity'); +@define('HAVE_TO_BE_LOGGED_ON', 'Debes identificarte para ver esta página'); +@define('APPEARANCE', 'Apariencia'); +@define('MANAGE_STYLES', 'Gestión de estilos'); +@define('CONFIGURE_PLUGINS', 'Configurar extensiones'); +@define('CONFIGURATION', 'Configuración'); +@define('BACK_TO_BLOG', 'Volver al weblog'); +@define('LOGOUT', 'Desconectar'); +@define('LOGGEDOUT', 'Desconectado'); +@define('CREATE_NEW_CAT', 'Crear una categoría nueva'); +@define('CREATE', 'Crear'); +@define('SAVE', 'Guardar'); +@define('NAME', 'Nombre'); +@define('I_WANT_THUMB', 'Quiero usar la miniatura en mi entrada.'); +@define('I_WANT_BIG_IMAGE', 'Quiero usar la imagen más grande en mi entrada.'); +@define('I_WANT_NO_LINK', ' Quiero que aparezca como una imagen'); +@define('I_WANT_IT_TO_LINK', 'Quiero que aparezca como un enlace a esta URL:'); +@define('BACK', 'Atrás'); +@define('FORWARD', 'Seguir'); +@define('ANONYMOUS', 'Anónimo'); +@define('NEW_TRACKBACK_TO', 'Nueva referencia hecha para'); +@define('NEW_COMMENT_TO', 'Nuevo comentario para'); +@define('RECENT', 'Recientes...'); +@define('OLDER', 'Antiguos...'); +@define('DONE', 'Hecho'); +@define('WELCOME_BACK', 'Bienvenido de nuevo,'); +@define('TITLE', 'Título'); +@define('DESCRIPTION', 'Descripción'); +@define('PLACEMENT', 'Localización'); +@define('DELETE', 'Borrar'); +@define('SAVE', 'Guardar'); +@define('UP', 'ARRIBA'); +@define('DOWN', 'ABAJO'); +@define('ENTRIES', 'entradas'); +@define('NEW_ENTRY', 'Nueva entrada'); +@define('EDIT_ENTRIES', 'Editar entradas'); +@define('CATEGORIES', 'Categorías'); +@define('WARNING_THIS_BLAHBLAH', "ATENCIÓN:\\nPuede tardar si hay muchas imágenes que no tienen miniatura."); +@define('CREATE_THUMBS', 'Crear las miniaturas'); +@define('MANAGE_IMAGES', 'Gestión de imágenes'); +@define('NAME', 'Nombre'); +@define('EMAIL', 'Correo electrónico'); +@define('HOMEPAGE', 'URL personal'); +@define('COMMENT', 'Comentario'); +@define('REMEMBER_INFO', '¿Recordar la información? '); +@define('SUBMIT_COMMENT', 'Enviar comentario'); +@define('NO_ENTRIES_TO_PRINT', 'No hay entradas para mostrar'); +@define('COMMENTS', 'Comentarios'); +@define('ADD_COMMENT', 'Añadir comentario'); +@define('NO_COMMENTS', 'No hay comentarios'); +@define('POSTED_BY', 'Publicado por'); +@define('ON', 'activado'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Se ha realizado un nuevo comentario en tu blog "%s", para la entrada titulada "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Se ha realizado una nueva referencia a la entrada titulada "%s".'); +@define('NO_CATEGORY', 'No existe la categoría'); +@define('ENTRY_BODY', 'Texto de la entrada'); +@define('EXTENDED_BODY', 'Texto ampliado'); +@define('CATEGORY', 'Categoría'); +@define('EDIT', 'Editar'); +@define('NO_ENTRIES_BLAHBLAH', 'No se han encontrado resultados para la búsqueda %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'La búsqueda para %s ha obtenido %s resultados:'); +@define('SEARCH_TOO_SHORT', 'La búsqueda debe tener tres caracteres como mínimo '); +@define('IMAGE', 'Imagen'); +@define('ERROR_FILE_NOT_EXISTS', 'Error: ¡El fichero antiguo no existe!'); +@define('ERROR_FILE_EXISTS', 'Error: ¡Un fichero con ese nombre ya existe, selecciona otro!'); +@define('ERROR_SOMETHING', 'Error: Algo está mal.'); +@define('ADDING_IMAGE', 'Añadiendo imagen...'); +@define('THUMB_CREATED_DONE', 'Miniatura creada.
Hecho.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Error: ¡El fichero ya existe en el sistema!'); +@define('GO', '¡Ir!'); +@define('NEWSIZE', 'Nuevo tamaño: '); +@define('RESIZE_BLAHBLAH', 'Cambiar tamaño %s

'); +@define('ORIGINAL_SIZE', 'Tamaño original: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Aquí puedes ajustar el nuevo tamaño de la imagen. Si quieres mantener las proporciones sólo introduce uno de los valores y presiona la tecla tabulador (TAB), de esta forma se ajustará automáticamente:'); +@define('DATE_FORMAT_1', 'd.m.Y'); +@define('QUICKJUMP_CALENDAR', 'Calendario rápido'); +@define('QUICKSEARCH', 'Buscar'); +@define('SEARCH_FOR_ENTRY', 'Busca una entrada'); +@define('ARCHIVES', 'Archivos'); +@define('BROWSE_ARCHIVES', 'Navega los archivos por mes'); +@define('TOP_REFERRER', 'Sitios asociados'); +@define('SHOWS_TOP_SITES', 'Muestra los sitios que enlazan a tu weblog'); +@define('TOP_EXITS', 'Salidas'); +@define('SHOWS_TOP_EXIT', 'Muestra los enlaces de salida más frecuentes desde tu weblog'); +@define('SYNDICATION', 'Sindicación'); +@define('SHOWS_RSS_BLAHBLAH', 'Muestra los enlaces RSS de sindicación'); +@define('ADVERTISES_BLAHBLAH', 'Informa del programa en el que se basa tu weblog'); +@define('HTML_NUGGET', 'Fragmento de HTML'); +@define('HOLDS_A_BLAHBLAH', 'Presenta un fragmento de HTML en la barra lateral'); +@define('TITLE_FOR_NUGGET', 'Título para el fragmento de HTML'); +@define('THE_NUGGET', '¡Fragmento de HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Sindica este blog'); +@define('YOU_CHOSE', 'Elige %s'); +@define('IMAGE_SIZE', 'Tamaño de la imagen'); +@define('IMAGE_AS_A_LINK', 'Inserción de imagen'); +@define('POWERED_BY', 'Basado en'); +@define('TRACKBACKS', 'Referencias'); +@define('TRACKBACK', 'Referencia'); +@define('NO_TRACKBACKS', 'No hay referencias'); +@define('TOPICS_OF', 'Temas de'); +@define('VIEW_FULL', 'ver completo'); +@define('VIEW_TOPICS', 'ver temas'); +@define('AT', 'a las'); +@define('SET_AS_TEMPLATE', 'Mantenlo como plantilla'); +@define('IN', 'en'); +@define('EXCERPT', 'Segmento'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Enlazar a la entrada'); +@define('LINK_TO_REMOTE_ENTRY', 'Enlazar a una entrada remota'); +@define('IP_ADDRESS', 'Dirección IP'); +@define('USER', 'Usuario'); +@define('THUMBNAIL_USING_OWN', 'Usando %s como su miniatura debido al escaso tamaño.'); +@define('THUMBNAIL_FAILED_COPY', 'Querías usar %s como tu miniatura, ¡pero ha fallado la copia!'); +@define('AUTHOR', 'Autor'); +@define('LAST_UPDATED', 'Última actualización'); +@define('TRACKBACK_SPECIFIC', 'URI de referencia para esta entrada'); +@define('DIRECT_LINK', 'Enlace directo a esta entrada'); +@define('COMMENT_ADDED', 'Tu comentario ha sido añadido correctamente. '); +@define('COMMENT_ADDED_CLICK', 'Pulsa %saquí para volver%s a los comentarios, y %saquí para cerrar%s esta ventana.'); +@define('COMMENT_NOT_ADDED', 'Tu comentario no ha podido ser añadido, la posibilidad de añadir comentarios a esta entrada ha sido desactivada. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Pulsa %saquí para volver%s a los comentarios, y %saquí para cerrar%s esta ventana'); +@define('COMMENTS_DISABLE', 'No permitir comentarios a esta entrada'); +@define('COMMENTS_ENABLE', 'Permitir comentarios a esta entrada'); +@define('COMMENTS_CLOSED', 'El autor no permite añadir comentarios a esta entrada'); +@define('EMPTY_COMMENT', 'Tu comentario está vacío, por favor %svuelve%s e inténtalo de nuevo'); +@define('ENTRIES_FOR', 'Entradas para %s'); +@define('DOCUMENT_NOT_FOUND', 'El documento %s no se encontró.'); +@define('USERNAME', 'Nombre de usuario'); +@define('PASSWORD', 'Contraseña'); +@define('SERENDIPITY_INSTALLATION', 'Instalación de Serendipity'); +@define('LEFT', 'Izquierda'); +@define('RIGHT', 'Derecha'); +@define('HIDDEN', 'Oculto'); +@define('REMOVE_TICKED_PLUGINS', 'Quita las extensiones seleccionadas'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Guarda los cambios en el diseño'); +@define('COMMENTS_FROM', 'Comentarios para'); +@define('ERROR', 'Error'); +@define('DELETE_SURE', '¿Estás seguro de que quieres eliminar #%s permanentemente?'); +@define('NOT_REALLY', 'No...'); +@define('DUMP_IT', 'Sí'); +@define('RIP_ENTRY', 'Entrada #%s borrada.'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Categoría #%s eliminada. Los artículos antiguos han sido movidos a la categoría #%s'); +@define('CATEGORY_DELETED', 'Categoría #%s eliminada.'); +@define('INVALID_CATEGORY', 'Ninguna categoría valida para borrar'); +@define('CATEGORY_SAVED', 'Categoría guardada'); +@define('SELECT_TEMPLATE', 'Selecciona la plantilla que deseas utilizar en tu weblog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', '¡No se ha podido insertar las entradas!'); +@define('YES', 'Sí'); +@define('NO', 'No'); +@define('USE_DEFAULT', 'Predeterminado'); +@define('CHECK_N_SAVE', 'Revisa y guarda'); +@define('DIRECTORY_WRITE_ERROR', 'No puedes escribir en el directorio %s. Comprueba los permisos.'); +@define('DIRECTORY_CREATE_ERROR', 'El directorio %s no existe y no puede ser creado. Créalo manualmente.'); +@define('DIRECTORY_RUN_CMD', ' -> ejecuta %s %s'); +@define('CANT_EXECUTE_BINARY', 'No se puede ejecutar %s'); +@define('FILE_WRITE_ERROR', 'No se puede escribir el fichero %s.'); +@define('FILE_CREATE_YOURSELF', 'Crea el fichero tu mismo o verifica los permisos'); +@define('COPY_CODE_BELOW', '
* Tan solo copia el código situado debajo y ponlo %s dentro %s del directorio:

%s
' . "\n"); +@define('WWW_USER', 'Cambia www por el usuario que está ejecutando el servidor web (p. ej. nobody).'); +@define('BROWSER_RELOAD', 'Una vez hecho esto, pulsa en tu navegador el botón "Recargar".'); +@define('DIAGNOSTIC_ERROR', 'Hemos detectado algunos errores mientras se ejecutaban varias comprobaciones en la información que has introducido:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity no está instalado todavía. Por favor instálalo ahora.'); +@define('INCLUDE_ERROR', 'Error de Serendipity: no se puede incluir %s - saliendo.'); +@define('DATABASE_ERROR', 'Error de Serendipity: no es posible conectar a la base de datos - saliendo.'); +@define('CREATE_DATABASE', 'Creando la configuración predeterminada de la base de datos...'); +@define('ATTEMPT_WRITE_FILE', 'Intentando escribir el fichero %s...'); +@define('WRITTEN_N_SAVED', 'Configuración realizada y guardada'); +@define('IMAGE_ALIGNMENT', 'Alineación de imágenes'); +@define('ENTER_NEW_NAME', 'Introduzca el nuevo nombre para: '); +@define('RESIZING', 'Cambiando el tamaño'); +@define('RESIZE_DONE', 'Terminado (las imágenes %s cambiaron de tamaño).'); +@define('DELETE_IMAGE_FAIL' , 'No se puede eliminar la imagen %s'); +@define('DELETE_THUMBNAIL', 'Eliminada la imagen miniatura llamada %s'); +@define('FILE_NOT_FOUND', 'No es posible encontrar el fichero con nombre %s, ¿es posible que lo haya borrado ya?'); +@define('ABORT_NOW', 'Salir ahora'); +@define('REMOTE_FILE_NOT_FOUND', 'El fichero no fue localizado en el servidor remoto, ¿estás seguro de que la URL: %s es correcta?'); +@define('FILE_FETCHED', '%s enlazado como: %s'); +@define('FILE_UPLOADED', 'El fichero %s fue transferido correctamente: %s'); +@define('WORD_OR', 'O...'); +@define('SCALING_IMAGE', 'Escalando %s a %s x %s px'); +@define('KEEP_PROPORTIONS', 'Mantener las proporciones'); +@define('REALLY_SCALE_IMAGE', '¿Realmente deseas escalar la imagen? ¡No se podrá deshacer esta acción!'); +@define('TOGGLE_ALL', 'Mostrar/Ocultar todo'); +@define('TOGGLE_OPTION', 'Mostrar/Ocultar'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Suscribirse a esta entrada'); +@define('UNSUBSCRIBE_OK', "%s ya no está suscrito a esta entrada"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Nuevo comentario en la entrada suscrita "%s"'); +@define('SUBSCRIPTION_MAIL', "Hola %s,\n\nHay un nuevo comentario a la entrada \"%s\", titulada \"%s\"\nEl autor es: %s\n\nPuedes encontrar la entrada aquí: %s\n\nPuedes dejar de recibir información sobre esta entrada haciendo click aquí: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Hola %s,\n\nHay una nueva referencia a la entrada \"%s\", titulada \"%s\"\nEl autor es: %s\n\nPuedes encontrar la entrada aquí: %s\n\nPuedes dejar de recibir información sobre esta entrada haciendo click aquí: %s\n"); +@define('SIGNATURE', "\n-- \n%s está basado en Serendipity.\nEl mejor programa para blog ;).\nVisita y compruébalo."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comentarios'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Campo "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Campo "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Imagen para el feed RSS'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Anchura de la imagen'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Altura de la imagen'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'Correo electrónico del webmaster, si está disponible. (déjalo vacío para no mostrarlo) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'Correo electrónico del editor, si está disponible. (déjalo vacío para no mostrarlo) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL de una imagen en formato GIF/JPEG/PNG, si está disponible. (dejándolo vacío se usara el logo de Serendipity)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'en pixels, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'en pixels, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Campo "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Cantidad de minutos, después de los cuales, tu blog no será verificado por ningún site o aplicación externa (si lo dejas vacío no se mostrara) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Campo "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', '¿Debería el campo "pubDate" estar incluido en un canal RSS para mostrar la fecha de la última entrada?'); +@define('CONTENT', 'Contenido'); +@define('TYPE', 'Tipo'); +@define('DRAFT', 'Borrador'); +@define('PUBLISH', 'Publicar'); +@define('PREVIEW', 'Previsualización'); +@define('DATE', 'Fecha'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Aviso: La fecha especificada no es válida. Debe tener el formato AAAA-MM-DD HH:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Muestra la lista de categorías.'); +@define('ALL_AUTHORS', 'Todos los autores'); +@define('CATEGORIES_TO_FETCH', 'Categorías enlazadas'); +@define('CATEGORIES_TO_FETCH_DESC', '¿De que autor quiere enlazar las categorías?'); +@define('PAGE_BROWSE_ENTRIES', 'Página %s de %s, en total %s entradas'); +@define('PREVIOUS_PAGE', 'página anterior'); +@define('NEXT_PAGE', 'página siguiente'); +@define('ALL_CATEGORIES', 'Todas las categorías'); + +/* TRANSLATE */ +@define('WRONG_USERNAME_OR_PASSWORD', 'Usuario o contraseña erróneo'); +@define('HTACCESS_ERROR', 'Para verificar tu instalación del servidor web, serendipity deber ser capaz de escribir en el fichero ".htaccess". Esto no fue posible debido a errores de permisos. Por favor, ajusta los permisos como:
 %s
y recarga esta página.'); +@define('SIDEBAR_PLUGINS', 'Extensiones de barra lateral'); +@define('EVENT_PLUGINS', 'Extensiones de eventos'); +@define('SYNCING', 'Sincronizando la base de datos con el directorio de imágenes.'); +@define('SYNC_DONE', 'Hecho (Sincronizadas %s imágenes).'); +@define('SORT_ORDER', 'Ordenar por'); +@define('SORT_ORDER_NAME', 'Nombre de fichero'); +@define('SORT_ORDER_EXTENSION', 'Extensión de fichero'); +@define('SORT_ORDER_SIZE', 'Tamaño de fichero'); +@define('SORT_ORDER_WIDTH', 'Anchura de imagen'); +@define('SORT_ORDER_HEIGHT', 'Altura de imagen'); +@define('SORT_ORDER_DATE', 'Fecha de transferencia'); +@define('SORT_ORDER_ASC', 'Ascendente'); +@define('SORT_ORDER_DESC', 'Descendente'); +@define('THUMBNAIL_SHORT', 'Miniatura'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Aplicar marca a %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Inicio de la semana'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Se ha detectado una discrepancia entre tu configuración actual que es la versión %s, y la de serendipity versión %s, ¡necesitas actualizar! Haz click aquí'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Hola y bienvenido al agente de actualización de Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Estoy aquí para ayudarte a actualizar tu instalación %s de Serendipity.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Estás viendo este mensaje porque has instalado Serendipity %s, pero no has actualizado la instalación de la base de datos para coincidir con esta versión'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Actualizaciones para la base de datos (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'He encontrado los siguientes ficheros .sql que se necesitan ejecutar antes de que puedas continuar usando normalmente Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Tareas específicas de la versión'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'No se ha encontrado tareas específicas de la versión'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', '¿Quieres que realice las tareas descritas?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'No, las ejecutaré manualmente'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Sí, por favor'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Parece que no necesitas ejecutar ninguna actualización'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Considera actualizado Serendipity'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Has ignorado el paso de actualización de Serendipity, asegúrate que tu base de datos está correctamente instalada y que las funciones planeadas son ejecutadas.'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Tu instalación de Serendipity se ha actualizado a la versión %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Puedes volver a tu blog haciendo click %saquí%s'); +@define('MANAGE_USERS', 'Gestión de usuarios'); +@define('CREATE_NEW_USER', 'Crear nuevo usuario'); +@define('CREATE_NOT_AUTHORIZED', 'No puedes modificar usuarios con el mismo nivel que el tuyo'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'No puedes crear usuarios con un nivel mayor que el tuyo'); +@define('CREATED_USER', 'Un nuevo usuario %s se ha creado'); +@define('MODIFIED_USER', 'Las propiedades del usuario %s se han cambiado'); +@define('USER_LEVEL', 'Nivel de usuario'); +@define('DELETE_USER', 'Estás a punto de borrar al usuario #%d %s. ¿Estás seguro? Esto no permitirá mostrar las entradas escritas por él.'); +@define('DELETED_USER', 'Usuario #%d %s borrado.'); +@define('LIMIT_TO_NUMBER', '¿Cuántos elementos deberían mostrarse?'); +@define('ENTRIES_PER_PAGE', 'entradas por página'); +@define('DIRECTORIES_AVAILABLE', 'En la lista de subdirectorios disponibles puedes hacer click en el nombre de un directorio para crear un nuevo directorio dentro de esa estructura.'); +@define('ALL_DIRECTORIES', 'todos los directorios'); +@define('MANAGE_DIRECTORIES', 'Gestión de directorios'); +@define('DIRECTORY_CREATED', 'Directorio %s creado.'); +@define('PARENT_DIRECTORY', 'Directorio superior'); +@define('CONFIRM_DELETE_DIRECTORY', '¿Estás seguro de que quieres eliminar todos los contenidos del directorio %s?'); +@define('ERROR_NO_DIRECTORY', 'Error: Directorio %s no existe'); +@define('CHECKING_DIRECTORY', 'Verificar ficheros en directorio %s'); +@define('DELETING_FILE', 'Borrando fichero %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'No puedo borrar un directorio con ficheros. Marca "forzar borrado" si quieres eliminar también los ficheros e inténtalo de nuevo. Los ficheros que existen son:'); +@define('DIRECTORY_DELETE_FAILED', 'Eliminación del directorio %s fallida. Revisa los permisos o los mensajes anteriores.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Directorio %s eliminado exitosamente.'); +@define('SKIPPING_FILE_EXTENSION', 'Saltando fichero: falta extensión en %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Saltando fichero: %s no se puede leer.'); +@define('FOUND_FILE', 'Encontrado fichero nuevo/modificado: %s.'); +@define('ALREADY_SUBCATEGORY', '%s es ya una subcategoría de %s.'); +@define('PARENT_CATEGORY', 'Categoría superior'); +@define('IN_REPLY_TO', 'En respuesta a'); +@define('TOP_LEVEL', 'Nivel superior'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'Permisos'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Opciones de la base de datos'); +@define('INSTALL_CAT_DB_DESC', 'Introduce aquí la información de tu base de datos. Serendipity la necesita para funcionar'); +@define('INSTALL_DBTYPE', 'Tipo'); +@define('INSTALL_DBTYPE_DESC', 'El tipo de gestor de la base de datos'); +@define('INSTALL_DBHOST', 'Servidor'); +@define('INSTALL_DBHOST_DESC', 'El servidor donde está el gestor de la base de datos'); +@define('INSTALL_DBUSER', 'Usuario'); +@define('INSTALL_DBUSER_DESC', 'El usuario que conecta a la base de datos'); +@define('INSTALL_DBPASS', 'Contraseña'); +@define('INSTALL_DBPASS_DESC', 'La contraseña para el usuario'); +@define('INSTALL_DBNAME', 'Nombre'); +@define('INSTALL_DBNAME_DESC', 'El nombre de la base de datos'); +@define('INSTALL_DBPREFIX', 'Prefijo'); +@define('INSTALL_DBPREFIX_DESC', 'Prefijo para los nombres de las tablas, p. ej. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Rutas'); +@define('INSTALL_CAT_PATHS_DESC', 'Varias rutas a ficheros y directorios esenciales. ¡No olvides la barra final en los directorios!'); +@define('INSTALL_FULLPATH', 'Ruta completa'); +@define('INSTALL_FULLPATH_DESC', 'La ruta completa y absoluta a tu instalación de serendipity'); +@define('INSTALL_UPLOADPATH', 'Ruta para los ficheros transferidos'); +@define('INSTALL_UPLOADPATH_DESC', 'Todos los ficheros transferidos irán aquí, relativo a \'Ruta completa\' - normalmente \'uploads/\''); +@define('INSTALL_RELPATH', 'Ruta relativa'); +@define('INSTALL_RELPATH_DESC', 'Ruta de serendipity para tu navegador, normalmente \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Ruta relativa para las plantillas'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Ruta al directorio que contiene tus plantillas - Relativa a la \'ruta relativa\''); +@define('INSTALL_RELUPLOADPATH', 'Ruta relativa para los ficheros transferidos'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Ruta de los ficheros transferidos - Relativa a la \'ruta relativa\''); +@define('INSTALL_URL', 'URL para el blog'); +@define('INSTALL_URL_DESC', 'URL base de tu instalación de serendipity'); +@define('INSTALL_INDEXFILE', 'Fichero índice'); +@define('INSTALL_INDEXFILE_DESC', 'El nombre del fichero índice de serendipity'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Opciones generales'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Configura el comportamiento de Serendipity'); +@define('INSTALL_USERNAME', 'Usuario administrador'); +@define('INSTALL_USERNAME_DESC', 'Nombre de usuario del administrador'); +@define('INSTALL_PASSWORD', 'Contraseña de administrador'); +@define('INSTALL_PASSWORD_DESC', 'Contraseña del administrador'); +@define('INSTALL_EMAIL', 'Correo electrónico'); +@define('INSTALL_EMAIL_DESC', 'Correo electrónico del administrador'); +@define('INSTALL_SENDMAIL', '¿Enviar correos al administrador?'); +@define('INSTALL_SENDMAIL_DESC', '¿Quieres recibir un correo electrónico cuando envían comentarios a tus entradas?'); +@define('INSTALL_SUBSCRIBE', '¿Permitir la subscripción de los usuarios a las entradas?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Permite a los usuarios subscribirse a una entrada y de ese modo recibir un correo electrónico cuando se hacen nuevos comentarios a esa entrada'); +@define('INSTALL_BLOGNAME', 'Nombre del blog'); +@define('INSTALL_BLOGNAME_DESC', 'El título de tu blog'); +@define('INSTALL_BLOGDESC', 'Descripción del blog'); +@define('INSTALL_BLOGDESC_DESC', 'Descripción de tu blog'); +@define('INSTALL_LANG', 'Idioma'); +@define('INSTALL_LANG_DESC', 'Selecciona el idioma del blog'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Apariencia'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Configura el aspecto general de Serendipity'); +@define('INSTALL_WYSIWYG', 'Usar editor WYSIWYG'); +@define('INSTALL_WYSIWYG_DESC', '¿Quieres usar el editor WYSIWYG? (Funciona con IE5+, parcialmente con Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Forzar compatibilidad XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', '¿Quieres forzar la compatibilidad XHTML 1.1? (puede causar problemas con navegadores más antiguos que la 4ª generación)'); +@define('INSTALL_POPUP', 'Activar el uso de ventanas emergentes'); +@define('INSTALL_POPUP_DESC', '¿Quieres que el blog use una ventana emergente para los comentarios, referencias, etc.?'); +@define('INSTALL_EMBED', '¿Está Serendipity insertado en otra web?'); +@define('INSTALL_EMBED_DESC', 'Si quieres insertar Serendipity dentro de otra página, ajusta a "true" para eliminar cualquier cabecera y sólo mostrar los contenidos. Puedes hacer uso de la opción indexFile y usar una clase donde pongas las cabeceras normales de tu página web. ¡Lee el fichero README para más información!'); +@define('INSTALL_TOP_AS_LINKS', '¿Mostrar Salidas/Sitios asociados como enlaces?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"no": Las Salidas y los Sitios asociados se muestran como texto sin formato para prevenir spam en google. "yes": Las Salidas y Sitios asociando se muestran como enlaces. "default": Usar el valor de la configuración global (recomendado).'); +@define('INSTALL_BLOCKREF', 'Sitios asociados bloqueados'); +@define('INSTALL_BLOCKREF_DESC', '¿Hay algún servidor que no quieras que se muestre en la lista de Sitios asociados? Separa la lista de nombres de dominio con \';\' y advierte que se ¡bloquea por coincidencias en subcadenas!'); +@define('INSTALL_REWRITE', 'Reescritura de URL'); +@define('INSTALL_REWRITE_DESC', 'Selecciona la regla que quieres usar para generar URL. Activando estas reglas hará URL bonitas para tu blog y lo hará más indexable para los robots como google. El servidor web necesita tener o mod_rewrite o "AllowOverride All" para el directorio de serendipity. El valor predeterminado es autodetectado'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Opciones para la conversión de imágenes'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Información sobre cómo debería serendipity manejar imágenes'); +@define('INSTALL_IMAGEMAGICK', 'Usar ImageMagick'); +@define('INSTALL_IMAGEMAGICK_DESC', '¿Tienes ImageMagick instalado y quieres usarlo para redimensionar imágenes?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Ruta hasta el programa convert'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Ruta completa y nombre del programa convert de ImageMagick'); +@define('INSTALL_THUMBSUFFIX', 'Sufijo de la miniatura'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Las miniaturas se crearán con el siguiente formato: original.[sufijo].ext'); +@define('INSTALL_THUMBWIDTH', 'Dimensiones de las miniaturas'); +@define('INSTALL_THUMBWIDTH_DESC', 'Anchura máxima estática de las miniaturas auto-generadas'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Datos personales'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Cambia los datos personales'); +@define('USERCONF_USERNAME', 'Nombre de usuario'); +@define('USERCONF_USERNAME_DESC', 'El nombre de usuario que se usa para conectar al blog'); +@define('USERCONF_PASSWORD', 'Contraseña'); +@define('USERCONF_PASSWORD_DESC', 'La contraseña que se usará para conectar al blog'); +@define('USERCONF_EMAIL', 'Correo electrónico'); +@define('USERCONF_EMAIL_DESC', 'La dirección de correo electrónico personal'); +@define('USERCONF_SENDCOMMENTS', '¿Enviar avisos de comentarios?'); +@define('USERCONF_SENDCOMMENTS_DESC', '¿Recibir correos electrónicos cuando ponen comentarios en las entradas?'); +@define('USERCONF_SENDTRACKBACKS', '¿Enviar avisos de referencias?'); +@define('USERCONF_SENDTRACKBACKS_DESC', '¿Recibir correos electrónicos cuando hacen referencias a las entradas?'); +@define('USERCONF_ALLOWPUBLISH', 'Derechos: ¿Publicar entradas?'); +@define('USERCONF_ALLOWPUBLISH_DESC', '¿El usuario puede publicar entradas?'); +@define('XML_IMAGE_TO_DISPLAY', 'Botón XML'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Enlaces a feeds XML se mostrarán con esta imagen. Déjalo vacío para el valor predeterminado, introduce \'none\' para desactivar.'); +@define('ENTRY_SAVED', 'Tu entrada ha sido guardada'); +@define('SUCCESS', 'Éxito'); + +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', '.'); + +@define('POWERED_BY_SHOW_TEXT', 'Mostrar "Serendipity" como texto'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Mostrará "Serendipity Weblog" como texto'); +@define('POWERED_BY_SHOW_IMAGE', 'Mostrar "Serendipity" con una imagen'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Mostrará el logotipo de Serendipity'); +/* TRANSLATE */ +@define('SETTINGS_SAVED_AT', 'La nueva configuración se ha guardado en la hora %s'); +@define('PLUGIN_ITEM_DISPLAY', '¿Dónde debería mostrarse el elemento?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Sólo en la entrada extendida'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Sólo en la entrada general'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Siempre'); +@define('RSS_IMPORT_CATEGORY', 'Usa esta categoría para las entradas importadas que no coincidan'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Ocurrió un error desconocido, fichero no importado. Quizás el tamaño del fichero es mayor que el tamaño máximo permitido por tu instalación. Verifica con tu ISP o edita tu fichero php.ini para permitir transferir ficheros de tamaño más grande.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Los comentarios enviados serán sometidos a moderación antes de ser mostrados.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Tienes disponibles las siguientes opciones:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Aviso: Este comentario necesita aprobación antes de que se muestre'); +@define('DELETE_COMMENT', 'Borrar comentario'); +@define('APPROVE_COMMENT', 'Aprobar comentario'); +@define('REQUIRES_REVIEW', 'Requiere revisión'); +@define('COMMENT_APPROVED', 'El comentario #%s ha sido aprobado exitosamente'); +@define('COMMENT_DELETED', 'El comentario #%s ha sido borrado exitosamente'); +@define('VIEW', 'Ver'); +@define('COMMENT_ALREADY_APPROVED', 'El comentario #%s ya parece haber sido aprobado'); +@define('COMMENT_EDITED', 'El comentario seleccionado ha sido editado'); +@define('HIDE', 'Ocultar'); +@define('VIEW_EXTENDED_ENTRY', 'Continua leyendo "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Este enlace no es para hacer click en él. Contiene la URI de referencia para esta entrada. Puedes usar esta URI para enviar "ping-" y "trackbacks" desde tu propio blog a esta entrada. Para copiar el enlace, haz click con el botón derecho y selecciona "Copy Shortcut" en Internet Explorer o "Copy Link Location" en Mozilla.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Aviso: Esta referencia necesita aprobación antes de que se muestre'); +@define('DELETE_TRACKBACK', 'Borrar referencia'); +@define('APPROVE_TRACKBACK', 'Aprobar referencia'); +@define('TRACKBACK_APPROVED', 'La referencia #%s ha sido aprobada exitosamente'); +@define('TRACKBACK_DELETED', 'La referencia #%s ha sido borrado exitosamente'); +@define('COMMENTS_MODERATE', 'Comentarios y referencias a esta entrada requieren moderación'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Usar https para conectar'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Hacer que el enlace para conectar apunte a una conexión https. ¡Tu servidor web necesita soporte para esto!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', '¿Poder hacer click en los enlaces externos?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": Enlaces externos no verificados (Top Salidas, Top Sitios asociados, Comentarios de usuarios) no se muestran/se muestran como texto sin formato donde se pueda para prevenir spam de google (recomendado). "yes": Enlaces externos no verificados se muestran como enlaces. ¡Puede ser modificado en la configuración del plugin de la barra lateral!'); +@define('PAGE_BROWSE_COMMENTS', 'Página %s de %s, total %s comentarios'); +@define('FILTERS', 'Filtros'); +@define('FIND_ENTRIES', 'Encontrar entradas'); +@define('FIND_COMMENTS', 'Encontrar comentarios'); +@define('FIND_MEDIA', 'Encontrar medios'); +@define('FILTER_DIRECTORY', 'Directorio'); +@define('SORT_BY', 'Ordenación'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'No se ha enviado la referencia: No se pudo establecer conexión con %s en el puerto %d'); +@define('MEDIA', 'Medios'); +@define('MEDIA_LIBRARY', 'Biblioteca de medios'); +@define('ADD_MEDIA', 'Añadir medio'); +@define('ENTER_MEDIA_URL', 'Introduce una URL para obtener el fichero:'); +@define('ENTER_MEDIA_UPLOAD', 'Selecciona el fichero que quieres transferir:'); +@define('SAVE_FILE_AS', 'Guardar el fichero como:'); +@define('STORE_IN_DIRECTORY', 'Almacenar dentro del siguiente directorio: '); +@define('MEDIA_RENAME', 'Renombrar este fichero'); +@define('IMAGE_RESIZE', 'Redimensionar esta imagen'); +@define('MEDIA_DELETE', 'Borrar este fichero'); +@define('FILES_PER_PAGE', 'Ficheros por página'); +@define('CLICK_FILE_TO_INSERT', 'Haz click en el fichero que quieres insertar:'); +@define('SELECT_FILE', 'Selecciona el fichero a insertar'); +@define('MEDIA_FULLSIZE', 'Tamaño real'); +@define('CALENDAR_BOW_DESC', 'El día de la semana que debe considerarse como principio de semana. El predeterminado es el lunes'); +@define('SUPERUSER', 'Administración del Blog'); +@define('ALLOWS_YOU_BLAHBLAH', 'Muestra un enlace en la barra lateral para acceder a la administración de tu blog'); +@define('CALENDAR', 'Calendario'); +@define('SUPERUSER_OPEN_ADMIN', 'Abre administración'); +@define('SUPERUSER_OPEN_LOGIN', 'Abre ventana de conexión'); +@define('INVERT_SELECTIONS', 'Invertir selecciones'); +@define('COMMENTS_DELETE_CONFIRM', '¿Estás seguro que deseas eliminar los comentarios seleccionados?'); +@define('COMMENT_DELETE_CONFIRM', '¿Estás seguro que deseas eliminar el comentario #%d, escrito por %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Borrar comentarios seleccionados'); +@define('VIEW_COMMENT', 'Ver comentario'); +@define('VIEW_ENTRY', 'Ver entrada'); +@define('DELETE_FILE', 'Borrado el fichero llamado %s'); +@define('ABOUT_TO_DELETE_FILE', 'Estás a punto de borrar %s
Si estás usando este fichero en alguna de tus entradas, esto causará enlaces o imágenes rotos
¿Estás seguro de que quieres seguir?

'); +@define('TRACKBACK_SENDING', 'Enviando referencia a la URI %s...'); +@define('TRACKBACK_SENT', 'Referencia exitosa'); +@define('TRACKBACK_FAILED', 'Referencia fallida: %s'); +@define('TRACKBACK_NOT_FOUND', 'No encontrada URI de referencia.'); +@define('TRACKBACK_URI_MISMATCH', 'La referencia autodetectada no coincide con nuestra URI destino.'); +@define('TRACKBACK_CHECKING', 'Comprobando %s para posibles referencias...'); +@define('TRACKBACK_NO_DATA', 'Destino no contenía datos'); +@define('TRACKBACK_SIZE', 'La URI de destino excedió el tamaño de fichero máximo de %s bytes.'); +@define('VIEWMODE_THREADED', 'Cambiar a vista por hilos'); +@define('COMMENTS_VIEWMODE_THREADED', 'Hilos'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Plano'); +@define('DISPLAY_COMMENTS_AS', 'Mostrar comentarios como'); +@define('LOGIN', 'Conectar'); +@define('AUTOMATIC_LOGIN', 'Guardar información'); +@define('DO_MARKUP', 'Realizar transformaciones marcas'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Formato de fecha'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'El formato de fecha de la entrada actual, usa las variables strftime() de PHP. (Predeterminado: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Incapaz de abrir el fichero plantilla, ¡por favor actualiza serendipity!'); +@define('ADVANCED_OPTIONS', 'Opciones avanzadas'); +@define('EDIT_ENTRY', 'Editar entrada'); +@define('ADD_MEDIA_BLAHBLAH', 'Añade un fichero a tu colección de medios:

Desde aquí puedes transferir un fichero de medios o puedes decirme que los coja de algún ¡lugar de la web! Si no tienes una imagen apropiada, busca imágenes en google que vaya con tu forma de pensar, los resultados son útiles y divertidos a veces :)

Selecciona el método:
'); +@define('COMMENTS_FILTER_SHOW', 'Mostrar'); +@define('COMMENTS_FILTER_ALL', 'Todo'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Sólo lo aprobado'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Pendiente de aprobación'); +@define('RSS_IMPORT_BODYONLY', 'Pon todo el texto importado en el "cuerpo" y no lo separes en la sección "entrada extendida".'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Mostrar los artículos completos con la entrada extendida dentro del feed RSS'); +@define('MT_DATA_FILE', 'fichero de datos de Movable Type'); +@define('FORCE', 'Forzar'); +@define('CREATE_AUTHOR', 'Crear autor \'%s\'.'); +@define('CREATE_CATEGORY', 'Crear categoría \'%s\'.'); +@define('MYSQL_REQUIRED', 'Debes tener la extensión MySQL para poder llevar a cabo esta acción.'); +@define('COULDNT_CONNECT', 'No se puede conectar al gestor de base de datos MySQL: %s.'); +@define('COULDNT_SELECT_DB', 'No se puede seleccionar la base de datos: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'No se puede seleccionar la información del usuario: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'No se puede seleccionar la información de la categoría: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'No se puede seleccionar la información de la entrada: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'No se puede seleccionar la información del comentario: %s.'); +@define('WEEK', 'Semana'); +@define('WEEKS', 'Semanas'); +@define('MONTHS', 'Meses'); +@define('DAYS', 'Días'); +@define('ARCHIVE_FREQUENCY', 'Frecuencia de los elementos del Calendario'); +@define('ARCHIVE_FREQUENCY_DESC', 'El intervalo temporal a usar entre cada elemento en la lista'); +@define('ARCHIVE_COUNT', 'Número de elementos en la lista'); +@define('ARCHIVE_COUNT_DESC', 'El número total de meses, semanas o días que se visualizan'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Abajo está la lista de las extensiones instaladas'); +@define('SIDEBAR_PLUGIN', 'extensión de barra lateral'); +@define('EVENT_PLUGIN', 'extensión de evento'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Click aquí para instalar una nueva %s'); +@define('VERSION', 'versión'); +@define('INSTALL', 'Instalar'); +@define('ALREADY_INSTALLED', 'Ya está instalado'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Selecciona la extensión que quieras instalar'); +@define('INSTALL_OFFSET', 'Diferencia horaria del servidor'); +@define('STICKY_POSTINGS', 'Entradas permanentes'); +@define('INSTALL_FETCHLIMIT', 'Entradas a mostrar en la página principal'); +@define('INSTALL_FETCHLIMIT_DESC', 'Número de entradas a mostrar en la página principal'); +@define('IMPORT_ENTRIES', 'Importar entradas'); +@define('EXPORT_ENTRIES', 'Exportar entradas'); +@define('IMPORT_WELCOME', 'Bienvenido a la utilidad de importación de Serendipity'); +@define('IMPORT_WHAT_CAN', 'Aquí puedes importar entradas producidas en otros programas de weblog'); +@define('IMPORT_SELECT', 'Por favor selecciona el software desde el que quieres importar'); +@define('IMPORT_PLEASE_ENTER', 'Por favor introduce los datos como se requiere debajo'); +@define('IMPORT_NOW', '¡Importar ahora!'); +@define('IMPORT_STARTING', 'Iniciando procedimiento de importación...'); +@define('IMPORT_FAILED', 'Importación fallida'); +@define('IMPORT_DONE', 'Importación completada con éxito'); +@define('IMPORT_WEBLOG_APP', 'Aplicación weblog'); +@define('EXPORT_FEED', 'Exportar el feed RSS completo'); +@define('STATUS', 'Estatus después de importar'); +@define('IMPORT_GENERIC_RSS', 'Importar RSS genérico'); +@define('ACTIVATE_AUTODISCOVERY', 'Enviar referencias a los enlaces encontrados en la entrada'); +@define('WELCOME_TO_ADMIN', 'Bienvenido a la Suite de Administración de Serendipity.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Por favor introduce tus credenciales abajo.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Basado en Serendipity %s y PHP %s'); +@define('INSTALL_USEGZIP', 'Usar páginas comprimidas con gzip'); +@define('INSTALL_USEGZIP_DESC', 'Para acelerar el envío de páginas, se pueden comprimir las páginas que se envían al visitante, si su navegador lo admite. Esto es lo recomendado'); +@define('INSTALL_SHOWFUTURE', 'Mostrar entradas futuras'); +@define('INSTALL_SHOWFUTURE_DESC', 'Si se activa, mostrará todas las entradas con fecha futura en tu blog. La acción predeterminada es no mostrar esas entradas y sólo hacerlo cuando llegue la fecha de publicación.'); +@define('INSTALL_DBPERSISTENT', 'Usar conexiones persistentes'); +@define('INSTALL_DBPERSISTENT_DESC', 'Activar el uso de conexiones persistentes a la base de datos, lee más en here. Normalmente no se recomienda esto'); +@define('NO_IMAGES_FOUND', 'No se encontraron imágenes'); +@define('PERSONAL_SETTINGS', 'Configuración personal'); +@define('REFERER', 'Referer'); +@define('NOT_FOUND', 'No encontrado'); +@define('NOT_WRITABLE', 'No se puede escribir'); +@define('WRITABLE', 'Se puede escribir'); +@define('PROBLEM_DIAGNOSTIC', 'Debido a los problemas encontrados, no puedes continuar con la instalación sin antes arreglar los errores señalados'); +@define('SELECT_INSTALLATION_TYPE', 'Selecciona qué tipo de instalación quieres usar'); +@define('WELCOME_TO_INSTALLATION', 'Bienvenido a la Instalación de Serendipity'); +@define('FIRST_WE_TAKE_A_LOOK', 'Primero determinaremos tu configuración actual e intentaremos diagnosticar cualquier problema de compatibilidad'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Los errores se muestran en %s, las recomendaciones en %s y lo bien configurado en %s'); +@define('RED', 'rojo'); +@define('YELLOW', 'amarillo'); +@define('GREEN', 'verde'); +@define('PRE_INSTALLATION_REPORT', 'Informe de preinstalación de Serendipity v%s'); +@define('RECOMMENDED', 'Recomendado'); +@define('ACTUAL', 'Actual'); +@define('PHPINI_CONFIGURATION', 'Configuración de php.ini'); +@define('PHP_INSTALLATION', 'Instalación de PHP'); +@define('THEY_DO', 'existen'); +@define('THEY_DONT', 'no existen'); +@define('SIMPLE_INSTALLATION', 'Instalación simple'); +@define('EXPERT_INSTALLATION', 'Instalación avanzada'); +@define('COMPLETE_INSTALLATION', 'Completar instalación'); +@define('WONT_INSTALL_DB_AGAIN', 'no se instalará de nuevo la base de datos'); +@define('CHECK_DATABASE_EXISTS', 'Comprobando si la base de datos y las tablas ya existen'); +@define('CREATING_PRIMARY_AUTHOR', 'Creando el autor principal \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Configurando la plantilla predeterminada'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Instalando extensiones predeterminadas'); +@define('SERENDIPITY_INSTALLED', 'Serendipity se ha instalado exitosamente'); +@define('VISIT_BLOG_HERE', 'Visita tu nuevo blog aquí'); +@define('THANK_YOU_FOR_CHOOSING', 'Gracias por elegir Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'Se detectó un error en la instalación'); +@define('OPERATING_SYSTEM', 'Sistema operativo'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('TEMPLATE_SET', '\'%s\' ha sido configurada como tu plantilla activa'); +@define('SEARCH_ERROR', 'La función de búsqueda no funcionó como se esperaba. Aviso para el administrador de este blog: esto ocurre porque faltan claves de índice en tu base de datos. En sistemas MySQL tu cuenta de usuario en la base de datos necesita tener privilegios para ejecutar esta consulta:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
El error específico devuelto por la base de datos fue:
%s
'); +@define('EDIT_THIS_CAT', 'Editando "%s"'); +@define('CATEGORY_REMAINING', 'Borra esta categoría y mueve sus entradas a esta categoría'); +@define('CATEGORY_INDEX', 'Abajo se muestra una lista de las categorías disponibles para tus entradas'); +@define('NO_CATEGORIES', 'No hay categorías'); +@define('RESET_DATE', 'Volver a poner la fecha'); +@define('RESET_DATE_DESC', 'Click aquí para poner la fecha actual'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Los permisos se pueden modificar ejecutando: `%s` sobre el directorio que ha fallado, lo puedes hacer desde la línea de comandos o usando un programa FTP'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Aviso: Tu plantilla actual está usando un método obsoleto de plantillas, actualízala si es posible'); +@define('ENTRY_PUBLISHED_FUTURE', 'Esta entrada no se ha publicado todavía.'); +@define('ENTRIES_BY', 'Entradas por %s'); +@define('PREVIOUS', 'Anterior'); +@define('NEXT', 'Siguiente'); +@define('APPROVE', 'Aprobar'); +@define('DO_MARKUP_DESCRIPTION', 'Aplicar transformaciones de marcas al texto (caras, marcas abreviadas como *. /, _, ...). Desactivando esto preservará cualquier código HTML en el texto.'); +@define('CATEGORY_ALREADY_EXIST', 'Una categoría con el nombre "%s" ya existe'); +@define('IMPORT_NOTES', 'Nota:'); +@define('ERROR_FILE_FORBIDDEN', 'No te está permitido transferir ficheros con contenido activo'); +@define('ADMIN', 'Administración'); +@define('ADMIN_FRONTPAGE', 'Página principal'); +@define('QUOTE', 'Quote'); +@define('IFRAME_SAVE', 'Serendipity está guardando tu entrada, creando referencias y llevando a cabo las posibles llamadas XML-RPC. Esto puede durar un tiempo..'); +@define('IFRAME_SAVE_DRAFT', 'Se ha guardado un borrador de esta entrada'); +@define('IFRAME_PREVIEW', 'Serendipity está creando la vista previa de tu entrada...'); +@define('IFRAME_WARNING', 'Tu navegador no admite el concepto de "iframes". Por favor, edita tu fichero serendipity_config.inc.php y ajusta la variable $serendipity[\'use_iframe\'] a FALSE.'); +@define('NONE', 'ninguno'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Configuración predeterminada para las nuevas entradas'); +@define('UPGRADE', 'Actualizar'); +@define('UPGRADE_TO_VERSION', 'Actualizar a la versión %s'); +@define('DELETE_DIRECTORY', 'Borrar directorio'); +@define('DELETE_DIRECTORY_DESC', 'Estás a punto de borrar los contenidos de un directorio que contiene ficheros de medios, posiblemente ficheros utilizados en algunas de tus entradas.'); +@define('FORCE_DELETE', 'Borrar TODOS los ficheros de este directorio, incluyendo aquellos desconocidos para Serendipity'); +@define('CREATE_DIRECTORY', 'Crear directorio'); +@define('CREATE_NEW_DIRECTORY', 'Crear nuevo directorio'); +@define('CREATE_DIRECTORY_DESC', 'Aquí puedes crear un nuevo directorio para almacenar ficheros de medios. Escoge el nombre del nuevo directorio y selecciona un directorio superior (opcional) donde ponerlo.'); +@define('BASE_DIRECTORY', 'Directorio base'); +@define('USERLEVEL_EDITOR_DESC', 'Editor estándar'); +@define('USERLEVEL_CHIEF_DESC', 'Editor jefe'); +@define('USERLEVEL_ADMIN_DESC', 'Administrador'); +@define('USERCONF_USERLEVEL', 'Nivel de acceso'); +@define('USERCONF_USERLEVEL_DESC', 'Este nivel se usa para determinar que clase de acceso al blog tiene el usuario'); +@define('USER_SELF_INFO', 'Conectado como %s (%s)'); +@define('ADMIN_ENTRIES', 'Entradas'); +@define('RECHECK_INSTALLATION', 'Volver a comprobar la instalación'); +@define('IMAGICK_EXEC_ERROR', 'Incapaz de ejecutar: "%s", error: %s, variable devuelta: %d'); +@define('INSTALL_OFFSET_DESC', 'Introduce la diferencia de horas entre la fecha de tu servidor web (actual: %clock%) y la zona horaria deseada'); +@define('UNMET_REQUIREMENTS', 'Requisitos no alcanzados: %s'); +@define('CHARSET', 'Juego de caracteres'); +@define('AUTOLANG', 'Usar el lenguaje del navegador del visitante como predeterminado'); +@define('AUTOLANG_DESC', 'Si está activado, se usará la configuración de lenguaje del navegador del visitante para determinar el lenguaje predeterminado de tu entrada así como de la interfaz.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetectar HTTP-Host usado'); +@define('INSTALL_AUTODETECT_URL_DESC', 'Si se configura como "Sí", Serendipity asegurará que el nombre de Host HTTP que usó por tu visitante para acceder al blog se usa como la URL base. Activando esto te permitirá usar varios nombres de dominio para tu blog, y usar ese dominio para todos los enlaces que siga el usuario.'); +@define('CONVERT_HTMLENTITIES', '¿Intentar autoconvertir las entidades HTML?'); +@define('EMPTY_SETTING', '¡No especificaste un valor válido para "%s"!'); +@define('USERCONF_REALNAME', 'Nombre real'); +@define('USERCONF_REALNAME_DESC', 'El nombre completo del autor. Este es el nombre que verán los lectores.'); +@define('HOTLINK_DONE', 'Fichero como recurso externo enlazado.
Hecho.'); +@define('ENTER_MEDIA_URL_METHOD', 'Método de obtención:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Nota: Enlazar recursos externos te permite usar imágenes externas sin almacernalas localmente. Si escoges esto, asegúrate de que tienes permiso para hacerlo en el servidor externo o bien el servidor es tuyo.'); +@define('MEDIA_HOTLINKED', 'enlazado externamente'); +@define('FETCH_METHOD_IMAGE', 'Descargar imagen a tu servidor'); +@define('FETCH_METHOD_HOTLINK', 'Enlazar externamente al servidor'); +@define('DELETE_HOTLINK_FILE', 'Borrado el recurso enlazado externamente con el nombre %s'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_fa.inc.php b/lang/serendipity_lang_fa.inc.php new file mode 100644 index 0000000..26790bc --- /dev/null +++ b/lang/serendipity_lang_fa.inc.php @@ -0,0 +1,670 @@ + +# Please report me any bug with + +@define('LANG_CHARSET', 'UTF-8'); +@define('DATE_LOCALES', 'fa_IR, persian, fa'); +@define('DATE_FORMAT_ENTRY', '%A, %B %e. %Y'); +@define('DATE_FORMAT_SHORT', '%Y-%m-%d %H:%M'); +@define('WYSIWYG_LANG', 'fa'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', '.'); +@define('NUMBER_FORMAT_THOUSANDS', ','); +@define('LANG_DIRECTION', 'rtl'); + +@define('SERENDIPITY_ADMIN_SUITE', 'بخش مدیریت Serendipity'); +@define('HAVE_TO_BE_LOGGED_ON', 'برای مشاهده این صفحه باید وارد سیستم شوید'); +@define('WRONG_USERNAME_OR_PASSWORD', 'نام کاربری یا رمز عبور شما اشتباه می باشد'); +@define('APPEARANCE', 'ظاهر'); +@define('MANAGE_STYLES', 'مدیریت پوسته ها'); +@define('CONFIGURE_PLUGINS', 'مدیریت افزونه ها'); +@define('CONFIGURATION', 'تنظیمات'); +@define('BACK_TO_BLOG', 'بازگشت به وبلاگ'); +@define('LOGIN', 'ورود'); +@define('LOGOUT', 'خروج'); +@define('LOGGEDOUT', 'خارج شدید.'); +@define('CREATE', 'ایجاد'); +@define('SAVE', 'ذخیره'); +@define('NAME', 'نام'); +@define('CREATE_NEW_CAT', 'ایجاد یک موضوع جدید'); +@define('I_WANT_THUMB', 'استفاده از کوچک شده عکس در ارسال.'); +@define('I_WANT_BIG_IMAGE', 'استفاده از عکس اصلی در ارسال.'); +@define('I_WANT_NO_LINK', ' تمایل دارم به صورت عکس نمایش داده شود'); +@define('I_WANT_IT_TO_LINK', 'تمایل دارم به صورت لینکی به آدرس زیر نمایش داده شود:'); +@define('BACK', 'قبل'); +@define('FORWARD', 'بعد'); +@define('ANONYMOUS', 'ناشناس'); +@define('NEW_TRACKBACK_TO', 'یک ردپا جدید برای'); +@define('NEW_COMMENT_TO', 'یک نظر جدید برای'); +@define('RECENT', 'جدید...'); +@define('OLDER', 'قدیمی...'); +@define('DONE', 'انجام شد'); +@define('WELCOME_BACK', 'خوش آمدید،'); +@define('TITLE', 'تیتر'); +@define('DESCRIPTION', 'توضیحات'); +@define('PLACEMENT', 'گماشتن'); +@define('DELETE', 'حذف'); +@define('SAVE', 'ذخیره'); +@define('UP', 'بالا'); +@define('DOWN', 'پایین'); +@define('ENTRIES', 'ارسال ها'); +@define('NEW_ENTRY', 'ارسال جدید'); +@define('EDIT_ENTRIES', 'تغییر ارسال ها'); +@define('CATEGORIES', 'موضوعات'); +@define('WARNING_THIS_BLAHBLAH', "توجه:\\nدر صورتی که تعداد عکس هایی که نمونه عکس نداشته باشند زیاد باشد، ای عمل طول خواهد کشید."); +@define('CREATE_THUMBS', 'دوباره سازی عکس های کوچک'); +@define('MANAGE_IMAGES', 'مدیریت عکس ها'); +@define('NAME', 'نام'); +@define('EMAIL', 'پست الکترونیکی'); +@define('HOMEPAGE', 'سایت'); +@define('COMMENT', 'نظر'); +@define('REMEMBER_INFO', 'آیا اطلاعات را به یاد داشته باشم؟ '); +@define('SUBMIT_COMMENT', 'ارسال نظر'); +@define('NO_ENTRIES_TO_PRINT', 'هیچ ارسالی وجود ندارد'); +@define('COMMENTS', 'نظر ها'); +@define('ADD_COMMENT', 'ارسال نظر'); +@define('NO_COMMENTS', 'نظری وجود ندارد'); +@define('POSTED_BY', 'ارسال شده توسط'); +@define('ON', 'در'); +@define('A_NEW_COMMENT_BLAHBLAH', 'یک نظر جدید برای وبلاگ "%s"، در مورد "%s" ارسال شده است.'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'یک ردپا جدید در مورد "%s" ساخته شد.'); +@define('NO_CATEGORY', 'بدون موضوع'); +@define('ENTRY_BODY', 'بدنه ارسال'); +@define('EXTENDED_BODY', 'مطالب بیشتر'); +@define('CATEGORY', 'موضوع'); +@define('EDIT', 'ویرایش'); +@define('NO_ENTRIES_BLAHBLAH', 'هیچ مقداری برای گزارش %s پیدا نشد' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'جستجو برای عبارت %s، %s نتیجه برگردانید:'); +@define('SEARCH_TOO_SHORT', 'جستجوی شما باید بیشتر از 3 حرف باشد'); +@define('IMAGE', 'عکس'); +@define('ERROR_FILE_NOT_EXISTS', 'خطا: فایل های قدیمی وجود ندارند!'); +@define('ERROR_FILE_EXISTS', 'خطا: فایلی با این نام وجود دارد، نام دیگری انتخاب کنید!'); +@define('ERROR_SOMETHING', 'خطا: مشکلی وجود دارد.'); +@define('ADDING_IMAGE', 'افزودن عکس...'); +@define('THUMB_CREATED_DONE', 'عکس های کوچک ساخته شدند.
انجام شد.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'خطا: این فایل قبلا در سیستم وجود داشته است!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'خطای ناشناخته، فایلی بالاگذاری نشد. ممکن است که حجم فایل شما بیشتر از ماکزیمم حجم اجازه داده شده باشد. لطفا ISP یا فایل php.ini خود را چک کنید.'); +@define('GO', 'برو!'); +@define('NEWSIZE', 'سایز جدید: '); +@define('RESIZE_BLAHBLAH', 'تغییر سایز %s

'); +@define('ORIGINAL_SIZE', 'ابعاد اصلی: %sx%s پیکسل'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

در این مکان، شما می توانید ابعاد عکس را درست کنید. اگر تصمیم دارید ابعاد عکس را متناسب تغییر دهید، فقط یکی از اعداد را وارد کرده و سپس کلید TAB را فشار دهید -- من ضلع دیگر را به صورت متناسب تغییر خواهم داد

'); +@define('QUICKJUMP_CALENDAR', 'تقویم برای پرش سریع'); +@define('QUICKSEARCH', 'جستجوی سریع'); +@define('SEARCH_FOR_ENTRY', 'جستجو'); +@define('ARCHIVES', 'بایگانی'); +@define('BROWSE_ARCHIVES', 'پیمایش ماهیانه بایگانی'); +@define('TOP_REFERRER', 'بیشترین مراجعه کننده ها'); +@define('SHOWS_TOP_SITES', 'نمایش برترین هایی که به وبلاگ شما لینک داده اند'); +@define('TOP_EXITS', 'بیشترین خروج ها'); +@define('SHOWS_TOP_EXIT', 'نمایش بیشترین خروج ها از طریق لینک'); +@define('SYNDICATION', 'اتصال دهنده'); +@define('SHOWS_RSS_BLAHBLAH', 'نمایش لینک های RSS'); +@define('ADVERTISES_BLAHBLAH', 'تبلیغات سیستم این وبلاگ'); +@define('HTML_NUGGET', 'تکه کد HTML'); +@define('HOLDS_A_BLAHBLAH', 'تکه کدی از HTML را در نوار کناری داشته باشید'); +@define('TITLE_FOR_NUGGET', 'تیتر تکه کد HTML'); +@define('THE_NUGGET', 'تکه کد HTML!'); +@define('SYNDICATE_THIS_BLOG', 'متحد شدن با این وبلاگ'); +@define('YOU_CHOSE', 'شما %s را انتخاب کردید'); +@define('IMAGE_ROTATE_LEFT', 'عکس را 90 درجه بر خلاف حرکت عقربه های ساعت بچرخوان'); +@define('IMAGE_ROTATE_RIGHT', 'عکس را 90 درجه در جهت حرکت عقربه های ساعت بچرخوان'); +@define('IMAGE_SIZE', 'ابعاد عکس'); +@define('IMAGE_AS_A_LINK', 'وارد کردن عکس'); +@define('POWERED_BY', 'قدرتمند شده توسط'); +@define('TRACKBACKS', 'ردپا ها'); +@define('TRACKBACK', 'ردپا'); +@define('NO_TRACKBACKS', 'هیچ ردپای وجود ندارد'); +@define('TOPICS_OF', 'تاپیکی از'); +@define('VIEW_FULL', 'نمایش کامل'); +@define('VIEW_TOPICS', 'نمایش تاپیک ها'); +@define('AT', 'در'); +@define('SET_AS_TEMPLATE', 'به عنوان پوسته پیش فرض انتخاب کن'); +@define('IN', 'در'); +@define('EXCERPT', 'برگزیدن'); +@define('TRACKED', 'پیگیری شد'); +@define('LINK_TO_ENTRY', 'لینک به ارسال'); +@define('LINK_TO_REMOTE_ENTRY', 'لینک به ارسال خارجی'); +@define('IP_ADDRESS', 'آدرس IP'); +@define('USER', 'کاربر'); +@define('THUMBNAIL_USING_OWN', 'استفاده از %s به عنوان عکس کوچک (به دلیل ابعاد کوچک عکس).'); +@define('THUMBNAIL_FAILED_COPY', 'استفاده از %s به عنوان عکس کوچک به دلیل ایجاد اشکال در کپی مقدور نمی باشد!'); +@define('AUTHOR', 'نویسنده'); +@define('LAST_UPDATED', 'آخرین به روز رسانی'); +@define('TRACKBACK_SPECIFIC', 'یک آدرس ردپا برای ارسال'); +@define('DIRECT_LINK', 'لینک مستقیم به ارسال'); +@define('COMMENT_ADDED', 'توضیحات شما با موفقیت وارد شد. '); +@define('COMMENT_ADDED_CLICK', 'برای بازگشت به نظر ها %sاینجا کلیک کنید%s و برای بستن این پنجره %sاینجا کلیک کنید%s.'); +@define('COMMENT_NOT_ADDED', 'ارسال نظر برای این مطلب ممکن نیست. '); +@define('COMMENT_NOT_ADDED_CLICK', 'برای بازگشت به نظر ها %sاینجا%s، و برای بستن پنجره %sاینجا%s کلیک کنید.'); +@define('COMMENTS_DISABLE', 'اجازه ارسال نظر داده نشود'); +@define('COMMENTS_ENABLE', 'اجازه ارسال نظر داده شود'); +@define('COMMENTS_CLOSED', 'نویسنده اجازه ارسال نظر نداده است'); +@define('EMPTY_COMMENT', 'نظر شما خالی است، لطف %sبرگردید%s و دوباره سعی نمایید'); +@define('ENTRIES_FOR', 'ارسال ها از %s'); +@define('DOCUMENT_NOT_FOUND', 'مطلب %s یافت نشد.'); +@define('USERNAME', 'نام کاربری'); +@define('PASSWORD', 'رمز عبور'); +@define('AUTOMATIC_LOGIN', 'ذخیره اطلاعات'); +@define('SERENDIPITY_INSTALLATION', 'نصب Serendipity'); +@define('LEFT', 'چپ'); +@define('RIGHT', 'راست'); +@define('HIDDEN', 'مخفی'); +@define('REMOVE_TICKED_PLUGINS', 'حذف افزونه های تیک خورده'); +@define('SAVE_CHANGES_TO_LAYOUT', 'ثبت تغییرات در پوسته'); +@define('COMMENTS_FROM', 'نظر های '); +@define('ERROR', 'خطا'); +@define('ENTRY_SAVED', 'ارسال شما ذخیره شد'); +@define('DELETE_SURE', 'آیا از حذف دائمی #%s اطمینان دارید؟'); +@define('NOT_REALLY', 'خیر'); +@define('DUMP_IT', 'بله'); +@define('RIP_ENTRY', 'مطلب #%s حذف شد.'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'موضوع #%s حذف شد. ارسال های قدیمی به موضوع #%s اضافه شد'); +@define('CATEGORY_DELETED', 'موضوع #%s حذف شد.'); +@define('INVALID_CATEGORY', 'موضوعی برای حذف انتخاب نشده است'); +@define('CATEGORY_SAVED', 'موضوع ذخیره شد'); +@define('SELECT_TEMPLATE', 'پوسته مورد علاقه خود را انتخاب کنید'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'اضافه کردن ارسال ها با مشکل مواجه شد!'); +@define('MT_DATA_FILE', 'فایل دادهء Movable Type'); +@define('FORCE', 'اجبار'); +@define('CREATE_AUTHOR', 'ایجاد نویسنده \'%s\'.'); +@define('CREATE_CATEGORY', 'ایجاد موضوع \'%s\'.'); +@define('MYSQL_REQUIRED', 'برای انجام این عمل، باید توسعه MySQL را نصب داشته باشید.'); +@define('COULDNT_CONNECT', 'اشکال در اتصال به بانک MySQL: %s.'); +@define('COULDNT_SELECT_DB', 'اشکال در انتخاب بانک: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'اشکال در انتخاب نام کاربری: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'اشکال در انتخاب موضوع: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'اشکال در کسب اطلاعات ارسال ها: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'اشکال در کسب ازلاعات نظر ها: %s.'); +@define('YES', 'بله'); +@define('NO', 'خیر'); +@define('USE_DEFAULT', 'پیش فرض'); +@define('CHECK_N_SAVE', 'چک و ثبت کن'); +@define('DIRECTORY_WRITE_ERROR', 'توانایی نوشتن در شاخه %s وجود ندارم. دسترسی ها را چک کنید.'); +@define('DIRECTORY_CREATE_ERROR', 'شاخه %s وجود ندارد یا قابلیت ایجاد کردن آن نیست. لطفا خودتان به صورت دستی، آن را بسازید'); +@define('DIRECTORY_RUN_CMD', ' -> %s %s را اجرا کن'); +@define('CANT_EXECUTE_BINARY', 'توانایی اجرای %s نیست'); +@define('FILE_WRITE_ERROR', 'توانایی نوشتن در فایل %s نیست.'); +@define('FILE_CREATE_YOURSELF', 'لطفا یا خودتان فایل را ایجاد کنید، یا دسترسی ها را چک کنید'); +@define('COPY_CODE_BELOW', '
* کد زیر را کپی کرده و در %s در %s شاخه زیر بریزید:
%s
' . "\n"); +@define('WWW_USER', 'www را به کاربری که از آپاچی استفاده می کند تغییر دهید (مثلا nobody(.'); +@define('BROWSER_RELOAD', 'پس از تکمیل، صفحه مرورگر را refresh کنید.'); +@define('DIAGNOSTIC_ERROR', 'تعدادی خطا در اطلاعات ورودی شما یافت شد:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity هنوز نصب نشده است. لطفا هم اکنون آن را نصب کنید.'); +@define('INCLUDE_ERROR', 'خطای serendipity: توانایی وارد کردن فایل %s وجود ندارد - برنامه متوقف شد.'); +@define('DATABASE_ERROR', 'خطای serendipity: امکان اتصال به بانک نمی باشد - برنامه متوقف شد.'); +@define('CREATE_DATABASE', 'در حال نصب پیش فرضیات پایگاه داده...'); +@define('ATTEMPT_WRITE_FILE', 'تلاش برای نوشتن در فایل %s...'); +@define('WRITTEN_N_SAVED', 'تنظیمات نوشته و ذخیره شد'); +@define('IMAGE_ALIGNMENT', 'هم ترازی تصویر'); +@define('ENTER_NEW_NAME', 'نام جدیدی برای مقدار روبرو وارد کنید: '); +@define('RESIZING', 'تغییر سایز'); +@define('RESIZE_DONE', 'انجام شد (تعداد %s تصویر تغییر کرد).'); +@define('SYNCING', 'هماهنگی پایگاه داده با شاخه تصاویر'); +@define('SYNC_DONE', 'انجام شد (تعداد %s تصویر هماهنگ شد).'); +@define('FILE_NOT_FOUND', 'توانایی تشخیص محل تصویر %s نیست، احتمالا قبلا حذف شده است؟'); +@define('ABORT_NOW', 'بازگشت'); +@define('REMOTE_FILE_NOT_FOUND', 'فایل بر روی سرور دور موجود نمی باشد، آیا از صحت آدرس: %s مطمئنید؟'); +@define('FILE_FETCHED', '%s با نام %s دریافت شد'); +@define('FILE_UPLOADED', 'فایل %s با موفقیت با نام %s بالاگذاری شد'); +@define('WORD_OR', 'یا'); +@define('SCALING_IMAGE', 'تغییر اندازه تصویر %s به %s x %s px'); +@define('KEEP_PROPORTIONS', 'حفظ تناسب'); +@define('REALLY_SCALE_IMAGE', 'آیا از تغییر اندازه تصاویر مطمئنید؟ این عمل قابل بازگشت نیست!'); +@define('TOGGLE_ALL', 'باز کردن همه'); +@define('TOGGLE_OPTION', 'انتخاب وضعیت گزینه ها'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'وقتی نظری ارسال شد، مرا خبر کن'); +@define('UNSUBSCRIBE_OK', "%s حذف شد"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'توضیح جدیدی برای مطلب "%s" ارسال شد'); +@define('SUBSCRIPTION_MAIL', "سلام %s,\n\nA نظر جدیدی برای مطلب \"%s\"، با تیتر \"%s\" ارسال شده است\nنام ارسال کننده: %s\n\nمی توانید مطلب را در لینک روبرو مشاهده کنید: %s\n\nمی توانید با کلیک روی لینک روبرو این نظر را قبول نکنید: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "سلام %s,\n\nA ردپای جدیدی برای مطلب \"%s\", با تیتر \"%s\" ارسال شده است\nنام ارسال کننده: %s\n\nمی توانید مطلب را در لینک روبرو مشاهده کنید: %s\n\nمی توانید با کلیک روی لینک روبرو این ردپا را قبول نکنید: %s\n"); +@define('SIGNATURE', "\n-- \n%s بر پایه Serendipity بنا شده است.\nبهترین سیستم وبلاگ موجود, شما هم می توانید از این سیستم استفاده کنید.\nسایت را بری روش نصب و استفاده مرور کنید."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 نظرات'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'فیلد "نویسنده"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'فیلد "مدیر"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'تصویر برای RSS'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'عرض تصویر'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'ارتفاع تصویر'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'ایمیل مدیر سایت, البته در صورت موجود بودن. (خالی= مخفی) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'در صورت وجود، آدرس ایمیل نویسنده (خالی= مخفی) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'در صورت وجود، آدرس عکسی با توسعه GIF یا JPEG یا PNG. (خالی= لوگوی Serendipity)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'پیکسل، ماکزیمم. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'پیکسل، ماکزیزمم. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'فیلد "ttl" (زمان زندگی)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'زمانی بر حسب دقیقه که سایت شما برای سایت ها و برنامه های خارجی cache خواهد شد (خالی= مخفی) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'فیلد زمان انتشار'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'آیا زمان انتشار ارسال ها در گزینه های RSS درج شود؟'); +@define('CONTENT', 'محتویات'); +@define('TYPE', 'نوع'); +@define('DRAFT', 'پیش نویس'); +@define('PUBLISH', 'انتشار'); +@define('PREVIEW', 'پیش نمایش'); +@define('DATE', 'تاریخ'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); +@define('DATE_INVALID', 'خطر: تاریخ وارد شده اشتباه می باشد. ساختار تاریخ باید شبیه YYYY-MM-DD HH:MM باشد.'); +@define('CATEGORY_PLUGIN_DESC', 'لیست موضوعات را نمایش می دهد.'); +@define('ALL_AUTHORS', 'تمامی نویسندگان'); +@define('CATEGORIES_TO_FETCH', 'موضوعات دریافتی'); +@define('CATEGORIES_TO_FETCH_DESC', 'موضوعات کدام نویسنده دریافت شود؟'); +@define('PAGE_BROWSE_ENTRIES', 'صفحه %s از %s، %s ارسال'); +@define('PREVIOUS_PAGE', 'صفحه قبل'); +@define('NEXT_PAGE', 'صفحه بعد'); +@define('ALL_CATEGORIES', 'تمامی موضوعات'); +@define('DO_MARKUP', 'ایجاد تغییرات Markup'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'تغییر تاریخ'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'طرز نمایش تاریخ در ارسال ها، از قوانین نگارش تابع strftime() در PHP پیروی کنید. (پیش فرض: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'توانایی باز کردن فایل پوسته وجود ندارد، لطفا serendipity را به روز کنید!'); +@define('ADVANCED_OPTIONS', 'گزینه های پیشرفته'); +@define('EDIT_ENTRY', 'تغییر ارسال'); +@define('HTACCESS_ERROR', 'برای چک کردن نصب وب سرور، serendipity احتیاج دارد که در فایل ".htaccess" مقادیری را بنویسد. این امر به دلیل محدودیت های دسترسی ممکن نمی باشد. لطفا سطح دسترسی را مشابه:
  %s
تغییر داده و این صفحه را دوباره صدا بزنید.'); +@define('SIDEBAR_PLUGINS', 'افزونه های نوار کناری'); +@define('EVENT_PLUGINS', 'افزونه های رویداد'); +@define('SORT_ORDER', 'ترتیب مرتب سازی'); +@define('SORT_ORDER_NAME', 'نام فایل'); +@define('SORT_ORDER_EXTENSION', 'توسعه فایل'); +@define('SORT_ORDER_SIZE', 'سایز فایل'); +@define('SORT_ORDER_WIDTH', 'عرض عکس'); +@define('SORT_ORDER_HEIGHT', 'ارتفاع عکس'); +@define('SORT_ORDER_DATE', 'تاریخ بالاگذاری'); +@define('SORT_ORDER_ASC', 'صعودی'); +@define('SORT_ORDER_DESC', 'نزولی'); +@define('THUMBNAIL_SHORT', 'عکس کوچک'); +@define('ORIGINAL_SHORT', 'اصلی'); +@define('APPLY_MARKUP_TO', 'اعمال کردن markup به %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'ابتدای هفته'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity فهمید که نسخه فایل تنظیمات شما %s می باشد، در حالی که خود برنامه Serendipity نسخه %s است، شما احتیاج به به روز رسانی دارید! اینجا کلیک کنید'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'سلام، به بخش به روز رسانی Serendipity خوش آمدید.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'من اینجا هستم تا به شما در به روز رسانی Serendipity %s کمک کنم.'); +@define('SERENDIPITY_UPGRADER_WHY', 'به خاطر نصب Serendipity %s این پیام را مشاهده می کنید، اما پایگاه داده خود را هنوز به روز نکرده اید'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'پایگاه داده (%s) به روز شد'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'من فایلی با توسعه .sql پیدا کردم که قبل از ادامه کار باید اجرا شود'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'کارهای مخصوص این نسخه'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'هیچ کاری یافت نشد'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'آیا تمایل دارید که من کارهای فوق را انجام دهم؟'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'خیر، من خودم انجام می دهم'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'بله، ممنون میشم'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'در ظاهر احتیاجی به به روز رسانی نمی باشد'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'رسیدگی کردن به به روز رسانی Serendipity'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'شما توانایی به روز رسانی Serendipity را ندارید، لطفا از درست ایجاد شدن پایگاه داده اطمینان پیدا کنید'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Serendipity به نسخه %s به روز رسانی شد'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', '%shere%s کلیک کنید تا به صفحه آغازین وبلاگتون برگردید'); +@define('MANAGE_USERS', 'مدیریت کاربران'); +@define('CREATE_NEW_USER', 'ایجاد یک کاربر جدید'); +@define('CREATE_NOT_AUTHORIZED', 'شما نمی توانید کاربری با سطح دسترسی مشابه خود را تغییر دهید'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'شما نمی توانید کاربری با سطح دسترسی بیشتر از خود ایجاد کنید'); +@define('CREATED_USER', 'کاربر %s ساخته شد'); +@define('MODIFIED_USER', 'مشخصات کاربر %s تغییر کرد'); +@define('USER_LEVEL', 'سطح دسترسی'); +@define('DELETE_USER', 'شما می خواهید کاربر #%d %s را حذف کنید. آیا مطمئن هستید؟ این عمل باعث می شود که تمامی پست های نوشته شده توسط ایشان در صفحه اصلی نمایش داده نشود.'); +@define('DELETED_USER', 'کاربر #%d %s حذف شد.'); +@define('LIMIT_TO_NUMBER', 'چه تعداد گزینه نمایش داده شود؟'); +@define('ENTRIES_PER_PAGE', 'ارسال ها در هر صفحه'); +@define('XML_IMAGE_TO_DISPLAY', 'دکمه XML'); +@define('XML_IMAGE_TO_DISPLAY_DESC', 'لینک XML ها با عکس طیر نمایش داده خواهد شد. مقدار خالی به عنوان مقدار پیش فرض در نظر گرفته می شود, عبارت \'none\' را برای غیر فعال کردن وارد کنید.'); + +@define('DIRECTORIES_AVAILABLE', 'در لیست زیرشاخه های موجود می توانید روی نام شاخه کلیک کنید تا زیرشاخه ای جدید در آن شاخه درست کنید.'); +@define('ALL_DIRECTORIES', 'تمامی شاخه ها'); +@define('MANAGE_DIRECTORIES', 'مدیریت شاخه ها'); +@define('DIRECTORY_CREATED', 'شاخه %s ساخته شد.'); +@define('PARENT_DIRECTORY', 'شاخه پدر'); +@define('CONFIRM_DELETE_DIRECTORY', 'آیا مایلید تمام محتویات شاخه %s را حذف کنید؟'); +@define('ERROR_NO_DIRECTORY', 'خطا: شاخه %s وجود ندارد'); +@define('CHECKING_DIRECTORY', 'بررسی فایل های داخل شاخه %s'); +@define('DELETING_FILE', 'حذف فایل %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'توانایی حذف شاخه هایی که خالی نیستند وجود ندارد.اگر می خواهید فایل ها هم حذف شوند، گزینه "force deletion" را تیک بزنید، سپس فرم را دوباره ارسال کنید. فایل های موجود عبارتند از:'); +@define('DIRECTORY_DELETE_FAILED', 'حذف شاخه %s با مشکل مواجه شد. دسترسی ها یا پیام فوق را بررسی کنید.'); +@define('DIRECTORY_DELETE_SUCCESS', 'شاخه %s با موفقیت حذف شد.'); +@define('SKIPPING_FILE_EXTENSION', 'پرش از روی فایل: توسعه ناشناخته در %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'پرش از روی فایل: %s قابل خواندن نمی باشد.'); +@define('FOUND_FILE', 'یافتن فایل جدید یا تغییر داده شده: %s.'); +@define('ALREADY_SUBCATEGORY', '%s قبلا زیر موضوعی از %s بوده.'); +@define('PARENT_CATEGORY', 'موضوع پدر'); +@define('IN_REPLY_TO', 'در پاسخ به'); +@define('TOP_LEVEL', 'بالاترین سطح'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s'); +@define('PERMISSIONS', 'دسترسی ها'); +@define('SETTINGS_SAVED_AT', 'تنظیمات جدید در %s ثبت شد'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'تنظیمات پایگاه داده'); +@define('INSTALL_CAT_DB_DESC', 'شما می توانید اطلاعات کامل پایگاه داده را در اینجا وارد کنید. Serendipity برای فعالیت به این اطلاعات نیاز دارد'); +@define('INSTALL_DBTYPE', 'نوع پایگاه داده'); +@define('INSTALL_DBTYPE_DESC', 'نوع پایگاه داده'); +@define('INSTALL_DBHOST', 'آدرس پایگاه داده'); +@define('INSTALL_DBHOST_DESC', 'آدرس هاستی که پایگاه داده روی آن قرار دارد'); +@define('INSTALL_DBUSER', 'کاربر پایگاه داده'); +@define('INSTALL_DBUSER_DESC', 'نام کاربری که توسط آن به پایگاه داده متصل می شوید'); +@define('INSTALL_DBPASS', 'رمز عبور پایگاه داده'); +@define('INSTALL_DBPASS_DESC', 'رمز عبور مربوط به نام کاربری که در فوق وارد کردید'); +@define('INSTALL_DBNAME', 'نام پایگاه داده'); +@define('INSTALL_DBNAME_DESC', 'نام پایگاه داده شما'); +@define('INSTALL_DBPREFIX', 'پیشوند جداول پایگاه داده'); +@define('INSTALL_DBPREFIX_DESC', 'پیشوند جدول های مربوط به Serendipity، به طور مثال. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'مسیر ها'); +@define('INSTALL_CAT_PATHS_DESC', 'مسیر های متفاوت برای شاخه های مهم. فراموش نکنید که برای شاخه ها در آخر یک اسلش بگذارید!'); +@define('INSTALL_FULLPATH', 'مسیر کامل'); +@define('INSTALL_FULLPATH_DESC', 'آدرس مستقیم و کامل به مکان نصب Serendipity'); +@define('INSTALL_UPLOADPATH', 'مسیر بالاگذاری'); +@define('INSTALL_UPLOADPATH_DESC', 'تمامای بالاگذاری ها در این مسیر قرار خواهند گرفت، نسبت به مقدار \'مسیر کامل\' - مثل \'uploads/\''); +@define('INSTALL_RELPATH', 'مسیر دریافت'); +@define('INSTALL_RELPATH_DESC', 'مسیر Serendipity برای مرورگر شما، مثل \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'مسیر پوسته ها'); +@define('INSTALL_RELTEMPLPATH_DESC', 'مسیر شاخه ای که فایل های پوسته در آن قرار دارد - نسبت به مقدار \'مسیر دریافت\''); +@define('INSTALL_RELUPLOADPATH', 'مسیر نسبی بالاگذاری'); +@define('INSTALL_RELUPLOADPATH_DESC', 'مسیر فایل های بالاگذاری شده برای مرورگر شما - نسبت به مقدار \'مسیر دریافت\''); +@define('INSTALL_URL', 'آدرس وبلاگ'); +@define('INSTALL_URL_DESC', 'آدرس اصلی نصب Serendipity'); +@define('INSTALL_INDEXFILE', 'فایل ایندکس'); +@define('INSTALL_INDEXFILE_DESC', 'نام فایل ایندکس شما'); + +/* GENERAL SETTINGS */ +@define('INSTALL_CAT_SETTINGS', 'تنظیمات عمومی'); +@define('INSTALL_CAT_SETTINGS_DESC', 'تنظیم کردن نوع رفتار Serendipity'); +@define('INSTALL_USERNAME', 'نام کاربری مدیر'); +@define('INSTALL_USERNAME_DESC', 'نام کاربری مدیر برای ورود'); +@define('INSTALL_PASSWORD', 'رمز عبور مدیر'); +@define('INSTALL_PASSWORD_DESC', 'رمز عبور مدیر برای ورود'); +@define('INSTALL_EMAIL', 'ایمیل مدیر'); +@define('INSTALL_EMAIL_DESC', 'ایمیل مدیر وبلاگ'); +@define('INSTALL_SENDMAIL', 'آیا ایمیل به مدیر؟ ارسال شود'); +@define('INSTALL_SENDMAIL_DESC', 'آیا علاقه دارید در هنگام ارسال نظر ایمیلی دریافت کنید؟'); +@define('INSTALL_SUBSCRIBE', 'اجازه ثبت نام کاربران داده شود؟'); +@define('INSTALL_SUBSCRIBE_DESC', 'اجازه ثبت نام کاربران داده شود تا در زمان ارسال نظری جدید، ایمیلی دریافت کنند'); +@define('INSTALL_BLOGNAME', 'نام وبلاگ'); +@define('INSTALL_BLOGNAME_DESC', 'تیتر وبلاگ شما'); +@define('INSTALL_BLOGDESC', 'توضیحات وبلاگ'); +@define('INSTALL_BLOGDESC_DESC', 'توضیحات وبلاگ شما'); +@define('INSTALL_LANG', 'زبان'); +@define('INSTALL_LANG_DESC', 'زبان وبلاگتان را انتخاب کنید'); + +/* APPEARANCE AND OPTIONS */ +@define('INSTALL_CAT_DISPLAY', 'ظاهر و تنظیمات'); +@define('INSTALL_CAT_DISPLAY_DESC', 'تنظیم چگونگی نمایش Serendipity'); +@define('INSTALL_WYSIWYG', 'استفاده از ویرایشگر WYSIWYG'); +@define('INSTALL_WYSIWYG_DESC', 'آیا می خواهید از ویراشگر WYSIWYG استفاده کنید؟ (در IE5+، و مقداری در Mozilla 1.3+ قابل مشاهده می باشد)'); +@define('INSTALL_XHTML11', 'قبول کردن اجباری XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', 'آیا تمایل دارید XHTML 1.1 به صورت اجباری امال کنید (احتمال وجود اشکل در برخی از مرورگر های قدیمی وجود دارد)'); +@define('INSTALL_POPUP', 'توانایی استفاده از پنجره های popup'); +@define('INSTALL_POPUP_DESC', 'آیا تمایل دارید که برای نظرات و ردپا ها از پنجره های popup استفاده شود؟'); +@define('INSTALL_EMBED', 'آیا Serendipity جاسازی شده است؟'); +@define('INSTALL_EMBED_DESC', 'اگر می خواهید Serendipity را در صفحه ای دیگر جاسازی کنید، مقدار این گزینه را "بله" وارد کنید تا فقط محتویات صفحه چاپ شوند.!'); +@define('INSTALL_TOP_AS_LINKS', 'نمایش بیشترین بینندگان و بیشترین خروج ها به صورت لینک؟'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"خیر": خروج ها و بازدید ها به صورت متن عادی نمایش داده خواهند شد. "بله": حروج ها و بازدید ها به صورت لینک نمایش داده خواهند شد. "پیش فرض": استفاده از تنظیمات جهانی (این گزینه توصیه می شود).'); +@define('INSTALL_BLOCKREF', 'بازدید کنندگان بلاک شده'); +@define('INSTALL_BLOCKREF_DESC', 'آیا آدرس خاصی وجود دارد که نمی خواهید در لیست بازدید کنندگان نمایش داده شود؟ آدرس ها را با یک علامت \';\' از هم جدا کنید و توجه کنید که آدرس ها توسط روش زیر رشته (substring) حذف خواهند شد!'); +@define('INSTALL_REWRITE', 'دوباره نویسی آدرس ها'); +@define('INSTALL_REWRITE_DESC', 'روش پردازش آدرس ها را مشخص کنید. دادن امکان دوباره نویسی آدرس ها توانایی موتور های جستجو را در ایندکس کردن وبلاگ شما بالا می برد. وب سرور شما باید اجازه دسترسی به mod_rewrite یا "AllowOverride All" را برای شاخه Serendipity داده باشد. مقدار پیش فرض "شناسایی خودکار" می باشد'); + +/* IMAGECONVERSION SETTINGS */ +@define('INSTALL_CAT_IMAGECONV', 'تنظیمات تغییر عکس'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'اطلاعات کلی برای Serendipity برای چگونگی پردازش تصاویر'); +@define('INSTALL_IMAGEMAGICK', 'استفاده از Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'آیا شما image magick را نصب کرده اید و آیا می خواهید از آن به عنوان پردازنده تصاویر استفاده کنید؟'); +@define('INSTALL_IMAGEMAGICKPATH', 'مسیر تغییر فایل های باینری'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'آدرس کامل و نام فایل image magick برای تغییر فایل های باینری'); +@define('INSTALL_THUMBSUFFIX', 'پیشوند عکس های کوچک'); +@define('INSTALL_THUMBSUFFIX_DESC', 'عکس های کوچک با روش روبرو نامگذاری خواهند شد: نام اصلی.[پیشوند].توسعه'); +@define('INSTALL_THUMBWIDTH', 'ابعاد تصاویر کوچک'); +@define('INSTALL_THUMBWIDTH_DESC', 'بیشترین عرض عکس های کوچک ساخته شده'); + +/* PERSONAL DETAILS */ +@define('USERCONF_CAT_PERSONAL', 'اطلاعات شخصی'); +@define('USERCONF_CAT_PERSONAL_DESC', 'ویرایش اطلاعات شخصی'); +@define('USERCONF_USERNAME', 'نام کاربری'); +@define('USERCONF_USERNAME_DESC', 'نام کاربری برای ورود شما به سیستم'); +@define('USERCONF_PASSWORD', 'رمز عبور'); +@define('USERCONF_PASSWORD_DESC', 'رمز عبور برای ورود شما به سیستم'); +@define('USERCONF_EMAIL', 'آدرس ایمیل'); +@define('USERCONF_EMAIL_DESC', 'آدرس ایمیل شخصی شما'); +@define('USERCONF_SENDCOMMENTS', 'آیا خبر ارسال نظر ارسال گردد؟'); +@define('USERCONF_SENDCOMMENTS_DESC', 'آیا می خواهید در زمان ارسال نظر ایمیلی برای با خبر شدن از آن دریافت کنید؟'); +@define('USERCONF_SENDTRACKBACKS', 'آیا خبر ردپا ارسال گردد؟'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'آیا می خواهید در زمانی که ردپای ارسال می شود ایمیلی برای با خبر شدن از آن دریافت کنید؟'); +@define('USERCONF_ALLOWPUBLISH', 'قوانین: انتشار مطالب؟'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'آیا این کاربر توانایی ارسال مطلب دارد؟'); +@define('SUCCESS', 'موفقیت'); +@define('POWERED_BY_SHOW_TEXT', 'نمایش متنی "Serendipity"'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'عبارت "Serendipity Weblog" را به صورت متنی نمایش می دهد'); +@define('POWERED_BY_SHOW_IMAGE', 'نمایش "Serendipity" همراه با یک لوگو'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'لوگوی Serendipity را نمایش می دهد'); +@define('PLUGIN_ITEM_DISPLAY', 'این گزینه کجا نمایش داده شود؟'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'فقط ارسال های توسعه داده شده'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'فقط در صفحه خلاصه'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'همیشه'); +@define('RSS_IMPORT_CATEGORY', 'از این موضوع برای ارسال های وارد شده که موضوع خاصی ندارند استفاده کن'); + +@define('COMMENTS_WILL_BE_MODERATED', 'نظرات ارسال شده قبل از نمایش داده شدن، باید مدیریت شوند.'); +@define('YOU_HAVE_THESE_OPTIONS', 'گزینه های زیر وجود دارند:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'توجه: نظر شما قبل از نمایش داده شدن، باید تایید شود'); +@define('DELETE_COMMENT', 'حذف نظر'); +@define('APPROVE_COMMENT', 'قبول نظر'); +@define('REQUIRES_REVIEW', 'مرور موارد مورد نیاز'); +@define('COMMENT_APPROVED', 'نظر #%s با موفقیت قبول شد'); +@define('COMMENT_DELETED', 'نظر #%s با موفقیت حذف شد'); +@define('COMMENTS_MODERATE', 'نظر ها و ردپا های این ارسال احتیاج به مدیریت دارند'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'توجه: این ردپا قبل از انتشار احتیاج به اعتبار سنجی دارد'); +@define('DELETE_TRACKBACK', 'حذف ردپا'); +@define('APPROVE_TRACKBACK', 'قبول ردپا'); +@define('TRACKBACK_APPROVED', 'ردپا #%s با موفقیت افزوده شد'); +@define('TRACKBACK_DELETED', 'ردپا #%s با موفقیت حذف شد'); +@define('VIEW', 'دیدگاه'); +@define('COMMENT_ALREADY_APPROVED', 'نظر #%s ظاهرا قبلا تایید شده است'); +@define('COMMENT_EDITED', 'نظر مشخص شده، ویرایش شد'); +@define('HIDE', 'مخفی'); +@define('VIEW_EXTENDED_ENTRY', 'ادامه مطلب "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'این لینک برای کلیک کردن نیست و فقط آدرس این مطلب را نگهداری می کند. شما باید از این لینک برای آدرس دادن یا ایجاد ردپا استفاده کنید. برای کپی کردن این لینک، روی لینک راست-کلیک کنید و مقدار "Copy Shortcut" در Internet Explorer یا "Copy Link Location" در Mozilla انتخاب کنید.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'برای ورود از https استفاده کنید'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'اجازه بدید که لینک ورود به آدرسی با مقدار https اشاره کند. احتیاج است سایت شما SSL را پشتیبانی کند!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'لینک های خارجی را قابل کلیک شدن بکن؟'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"خیر": لینک های خارجی (مثل آخرین خروج ها و ...) برای جلوگیری از اسپم های گوگلی، به صورت متن ساده نمایش داده شوند (توصیه شده). "بله": لینک های خارجی به صورت پیوست نمایش داده شود.. توسط تنظیمات افزونه قابلیت تغییر وجود دارد!'); +@define('PAGE_BROWSE_COMMENTS', 'صفحه %s از %s، در کل %s نظر'); +@define('FILTERS', 'فیلترها'); +@define('FIND_ENTRIES', 'جستجوی ارسال ها'); +@define('FIND_COMMENTS', 'جستجوی نظر ها'); +@define('FIND_MEDIA', 'جستجوی رسانه ها'); +@define('FILTER_DIRECTORY', 'شاخه'); +@define('SORT_BY', 'مرتب بر حسب'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'هیچ ردپایی ارسال نشد: توانایی ایجاد اتصال به %s روی پورت %d نمی باشد'); +@define('MEDIA', 'رسانه'); +@define('MEDIA_LIBRARY', 'کتابخانه رسانه'); +@define('ADD_MEDIA', 'افزودن رسانه'); +@define('ENTER_MEDIA_URL', 'URL فایلی را برای دریافت وارد کنید:'); +@define('ENTER_MEDIA_UPLOAD', 'فایلی را برای بالاگذاری مشخص کنید:'); +@define('SAVE_FILE_AS', 'ذخیره فایل با نام:'); +@define('STORE_IN_DIRECTORY', 'ذخیره در شاخه: '); +@define('ADD_MEDIA_BLAHBLAH', 'افزودن یک فایل به انبار:

در اینجا شما می توانید فایل های خود را بالاگذاری کنید، یا آدرس آنها را برای دریافت از اینترنت وارد کنید! اگر عکسی برای بالاگذاری ندارید جستجویی در اینجا برای یافتن عکس مورد علاقه خود داشته باشید، نتیجه معمولا مفید و جالب خواهد بود :)

انتخاب روش:
'); +@define('MEDIA_RENAME', 'تغییر نام فایل'); +@define('IMAGE_RESIZE', 'تغییر اندازه تصویر'); +@define('MEDIA_DELETE', 'حذف فایل'); +@define('FILES_PER_PAGE', 'فایل در صفحه'); +@define('CLICK_FILE_TO_INSERT', 'برای الحاق کردن، روی تصویر کلیک کنید:'); +@define('SELECT_FILE', 'فایل را برای الحاق کردن مشخص کنید'); +@define('MEDIA_FULLSIZE', 'تمام سایز'); +@define('CALENDAR_BOW_DESC', 'روزی که به عنوان اولین روز هفته در نظر گرفته می شود. Monday مقدار پیش فرض می باشد'); +@define('SUPERUSER', 'مدیریت وبلاگ'); +@define('ALLOWS_YOU_BLAHBLAH', 'ایجاد لینکی در نوار کناری برای ورود به بخش مدیریت'); +@define('CALENDAR', 'تقویم'); +@define('SUPERUSER_OPEN_ADMIN', 'بخش مدیریت'); +@define('SUPERUSER_OPEN_LOGIN', 'باز کردن صفحه ورود'); +@define('INVERT_SELECTIONS', 'معکوس کردن انتخابات'); +@define('COMMENTS_DELETE_CONFIRM', 'آیا مطمئن هستید که نظرات انتخاب شده حذف شود؟'); +@define('COMMENT_DELETE_CONFIRM', 'آیا مطمئن هستید که نظر #%d، نوشته شده توسط %s حذف شود؟'); +@define('DELETE_SELECTED_COMMENTS', 'حذف نظرات انتخاب شده'); +@define('VIEW_COMMENT', 'نمایش نظر'); +@define('VIEW_ENTRY', 'نمایش ارسال'); +@define('DELETE_FILE_FAIL' , 'توانایی حذف فایل %s وجود ندارد'); +@define('DELETE_THUMBNAIL', 'عکس کوچک با نام %s حذف شد'); +@define('DELETE_FILE', 'فایل با تیتر %s حذف شد'); +@define('ABOUT_TO_DELETE_FILE', 'شما می خواهید %s را حذف کنید
اگر شما از این فایل در ارسال هاتون استفاده کردید، دیگر قابل مشاهده شدن یا لینک دادن نیست
آیا از انجام این عمل اطمینان دارید؟

'); +@define('TRACKBACK_SENDING', 'ارسال ردپا به آدرس %s...'); +@define('TRACKBACK_SENT', 'موفقیت در ردپا'); +@define('TRACKBACK_FAILED', 'خطا در ردپا: %s'); +@define('TRACKBACK_NOT_FOUND', 'هیچ آدرسی برای ردپا یافت نشد.'); +@define('TRACKBACK_URI_MISMATCH', 'آدرس ردپا با آدرس موجود تناقض دارد.'); +@define('TRACKBACK_CHECKING', 'بررسی %s برای وجود ردپا...'); +@define('TRACKBACK_NO_DATA', 'هدف هیچ داده ای ندارد'); +@define('TRACKBACK_SIZE', 'آدرس هدف از محدودیت بیشترین حجم فایل به مقدار %s بایت تجاوز کرد.'); +@define('COMMENTS_VIEWMODE_THREADED', 'بند کشی شده'); +@define('COMMENTS_VIEWMODE_LINEAR', 'خطی'); +@define('DISPLAY_COMMENTS_AS', 'نمایش نظرات به صورت'); +@define('COMMENTS_FILTER_SHOW', 'نمایش'); +@define('COMMENTS_FILTER_ALL', 'تمام'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'فقط تایید شده ها'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'در انتظار تایید'); +@define('RSS_IMPORT_BODYONLY', 'تمام مقادیر وارد شده را در بخش "بدنه ارسال" قرار بده و در بخش "مطالب بیشتر" قرار نده.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'تمام ارسال ها با تمام متن بدنه را در RSS قرار بده'); +@define('WEEK', 'هفته'); +@define('WEEKS', 'هفته ها'); +@define('MONTHS', 'ماه ها'); +@define('DAYS', 'روزها'); +@define('ARCHIVE_FREQUENCY', 'تناوب گزینه های تقویم'); +@define('ARCHIVE_FREQUENCY_DESC', 'فاصله بین تاریخ ارسال های موجود در لیست'); +@define('ARCHIVE_COUNT', 'تعداد گزنه های موجود در لیست'); +@define('ARCHIVE_COUNT_DESC', 'تعداد ماه ها، هفته ها و روز هایی که نمایش داده شود'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'لیستی از افزونه های نصب شده'); +@define('SIDEBAR_PLUGIN', 'افزونه نوار کناری'); +@define('EVENT_PLUGIN', 'افزونه رویداد'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'برای نصب یک %s جدید اینجا کلیک کنید'); +@define('VERSION', 'نگارش'); +@define('INSTALL', 'نصب'); +@define('ALREADY_INSTALLED', 'قبلا نصب شده'); +@define('SELECT_A_PLUGIN_TO_ADD', 'افزونه ای که می خواهید نصب کنید را انتخاب کنید'); +@define('INSTALL_OFFSET', 'مبدا زمان سرور'); +@define('STICKY_POSTINGS', 'پست های چسبناک'); +@define('INSTALL_FETCHLIMIT', 'ارسال هایی که در ابتدای صفحه نمایش داده شوند'); +@define('INSTALL_FETCHLIMIT_DESC', 'چه تعداد ارسال در صفحه اصلی نمایش داده شوند'); +@define('IMPORT_ENTRIES', 'وارد کردن داده ها'); +@define('EXPORT_ENTRIES', 'صادر کردن ارسال ها'); +@define('IMPORT_WELCOME', 'به ابزار واردات Serendipity خوش آمدید'); +@define('IMPORT_WHAT_CAN', 'در این مکان شما می توانید ارسال های سیستم های وبلاگ دیگر را وارد کنید'); +@define('IMPORT_SELECT', 'لطفا نام برنامه ای که می خواهید ارسال هایش را وارد کنید، انتخاب کنید'); +@define('IMPORT_PLEASE_ENTER', 'لطفا داده های خواسته شده را وارد کنید'); +@define('IMPORT_NOW', 'اکنون وارد کن!'); +@define('IMPORT_STARTING', 'شروع پروسه وارد کردن...'); +@define('IMPORT_FAILED', 'واردات با مشکل مواجه شد'); +@define('IMPORT_DONE', 'واردات با موفقیت انجام شد'); +@define('IMPORT_WEBLOG_APP', 'برنامه وبلاگ'); +@define('IMPORT_NOTES', 'توجه:'); +@define('EXPORT_FEED', 'صادر کردن RSS کامل'); +@define('STATUS', 'وضعیت بعد از واردات'); +@define('IMPORT_GENERIC_RSS', 'وارد کردن RSS های عمومی'); +@define('ACTIVATE_AUTODISCOVERY', 'ارسال ردپا به لینک های یافت شده در مطلب'); +@define('WELCOME_TO_ADMIN', 'به بخش مدیریت Serendipity خوش آمدید.'); +@define('PLEASE_ENTER_CREDENTIALS', 'لطفا نام کاربری و رمز عبورتان را در فیلد های زیر وارد کنید.'); +@define('ADMIN_FOOTER_POWERED_BY', 'ساخته شده توسط Serendipity %s و PHP %s'); +@define('INSTALL_USEGZIP', 'استفاده از صفحات فشرده gzip'); +@define('INSTALL_USEGZIP_DESC', 'برای افزایش سرعت باز شدن صفحات، ما می توانیم صفحات ارسالی به کاربران را فشرده کنیم، البته بستگی به پشتیبانی کردن مرورگر بیننده نیز دارد. این گزینه توصیه می شود'); +@define('INSTALL_SHOWFUTURE', 'نمایش پست های آینده'); +@define('INSTALL_SHOWFUTURE_DESC', 'در صورت فعال بودن، تمامی مقادیر آینده نیز در وبلاگ نمایش داده می شوند. پیش فرض نمایش داده نشدن مقادیر آینده می باشد و مقادیری که تاریخ انتشارشان رسیده باشد نمایش داده خواهند شد.'); +@define('INSTALL_DBPERSISTENT', 'استفاده از اتصال های پایدار'); +@define('INSTALL_DBPERSISTENT_DESC', 'برای استفاده از اتصال پایدار این گزینه را فعال کنید، برای اطلاعات بیشتر اینجا را مطالعه کنید. این گزینه در حالت عادی توصیه نمی شود'); +@define('NO_IMAGES_FOUND', 'هیچ تصویری یافت نشد'); +@define('PERSONAL_SETTINGS', 'تنظیمات شخصی'); +@define('REFERER', 'بازدید کننده'); +@define('NOT_FOUND', 'یافت نشد'); +@define('WRITABLE', 'نوشتنی'); +@define('NOT_WRITABLE', 'نوشتنی نیست'); +@define('PROBLEM_DIAGNOSTIC', 'به دلیل تشخیص یک مشکل، تا مشکلات فوق را برطرف نسازید نمی توانید به ادامه نصب بپردازید'); +@define('SELECT_INSTALLATION_TYPE', 'انتخاب کنید که چه نوع نصبی را می خواهید انجام دهید'); +@define('WELCOME_TO_INSTALLATION', 'به مراحل نصب Serendipity خوش آمدید'); +@define('FIRST_WE_TAKE_A_LOOK', 'در ابتدا ما گزینه های فعلی را بررسی می کنیم و سعی می کنیم نا همگونی ها را رفع کنیم'); +@define('ERRORS_ARE_DISPLAYED_IN', 'خطا ها در %s نمایش داده شدند، توصیه ها در %s و موفقیت ها در %s'); +@define('RED', 'قرمز'); +@define('YELLOW', 'زرد'); +@define('GREEN', 'سبز'); +@define('PRE_INSTALLATION_REPORT', 'گزارش قبل از نصب Serendipity نگارش %s'); +@define('RECOMMENDED', 'توصیه شده'); +@define('ACTUAL', 'واقعی'); +@define('PHPINI_CONFIGURATION', 'تنظیمات php.ini'); +@define('PHP_INSTALLATION', 'نصب PHP'); +@define('THEY_DO', 'انجام شده است'); +@define('THEY_DONT', 'انجام نشده است'); +@define('SIMPLE_INSTALLATION', 'نصب ساده'); +@define('EXPERT_INSTALLATION', 'نصب حرفه ای'); +@define('COMPLETE_INSTALLATION', 'نصب تکمیل شد'); +@define('WONT_INSTALL_DB_AGAIN', 'پایگاه داده دوباره نصب نخواهد شد'); +@define('CHECK_DATABASE_EXISTS', 'بررسی وجود پایگاه داده و جدول های آن'); +@define('CREATING_PRIMARY_AUTHOR', 'ایجاد نویسنده اصلی \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'تنظیم پوسته پیش فرض'); +@define('INSTALLING_DEFAULT_PLUGINS', 'نصب افزونه های پیش فرض'); +@define('SERENDIPITY_INSTALLED', 'Serendipity با موفقیت نصب شد'); +@define('VISIT_BLOG_HERE', 'وبلاگ جدید خود را از اینجا ببینید'); +@define('THANK_YOU_FOR_CHOOSING', 'به خاطر نصب Serendipity سپاسگذاریم'); +@define('ERROR_DETECTED_IN_INSTALL', 'خطایی در زمان نصب تشخیص داده شد'); +@define('OPERATING_SYSTEM', 'سیستم عامل'); +@define('WEBSERVER_SAPI', 'SAPI وب سرور'); +@define('TEMPLATE_SET', '\'%s\' به عنوان پوسته پیش فرض ثبت شد'); +@define('SEARCH_ERROR', 'بخش جستجو به درستی کار نمی کند. این مورد را به مدیر سایت گزارش دهید: ممکن است این مشکل به دلیل از دست رفتن اندیس های جدول ها پیش آمده باشد. در MySQL شما باید دسترسی اجرای کوئری روبرو را داشته باشید:

CREATE FULLTEXT INDEX entry_idx on %sentries (title،body،extended)
خطای برگشتی پایگاه داده:
%s
'); +@define('EDIT_THIS_CAT', 'در حال تغییر "%s"'); +@define('CATEGORY_REMAINING', 'حذف این موضوع و انتقال ارسال ها به این موضوع'); +@define('CATEGORY_INDEX', 'در زیر لیستی از موضوعات برای این ارسال وجود دارند'); +@define('NO_CATEGORIES', 'بدون موضوع'); +@define('RESET_DATE', 'تنظیم دوباره تاریخ'); +@define('RESET_DATE_DESC', 'برای تنظیم مجدد تاریخ به اکنون، اینجا کلیک کنید'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'دسترسی ها می توانند از طریق دسترسی shell تغییر یابند: `%s` روی شاخه مشکل دار، یا تنظیم آن توسط برنامه های FTP'); +@define('WARNING_TEMPLATE_DEPRECATED', 'خطر: پوسته شما از نگارش قدیمی پوسته ها استفاده می کند، توصیه می شود اگر امکان دارد به روز رسانی کنید'); +@define('ENTRY_PUBLISHED_FUTURE', 'این ارسال هنوز منتشر نشده است.'); +@define('ENTRIES_BY', 'ارسال توسط %s'); +@define('PREVIOUS', 'قبل'); +@define('NEXT', 'بعد'); +@define('APPROVE', 'موافقت'); +@define('DO_MARKUP_DESCRIPTION', 'آیا تغییرات روی متن اعمال شود (شکلک ها، میانبر کردن متن های *، /، _، ...). غیر فعال کردن این گزینه، تمامی کد های HTML را حفظ خواهد کرد و تغییری اعمال نخواهد شد.'); +@define('CATEGORY_ALREADY_EXIST', 'یک موضوع با نام مشابه "%s" قبلا وجود دارد'); +@define('ERROR_FILE_FORBIDDEN', 'شما اجازه بالاگذاری فایل ندارید'); +@define('ADMIN', 'مدیر'); +@define('ADMIN_FRONTPAGE', 'صفحه آغازین'); +@define('QUOTE', 'نقل قول'); +@define('IFRAME_SAVE', 'اکنون Serendipity در حال ساخت پیش نمایش صفحات شما می باشد...'); +@define('IFRAME_SAVE_DRAFT', 'اکنون Serendipity در حال ساخت پیش نمایش صفحات شما می باشد...'); +@define('IFRAME_PREVIEW', 'اکنون Serendipity ارسال شما را ذخیره می کند، ساختن ردپا ها و. این عملیات ممکن است کمی به طول بیانجامد، لطفا صبر کنید.'); +@define('IFRAME_WARNING', 'مرورگر شما از iframe پشتیبانی نمی کند. لطفا فایل serendipity_config.inc.php را باز کرده و مقدار $serendipity[\'use_iframe\'] را برابر FALSE قرار دهید.'); +@define('NONE', 'هیچ کدام'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'تنظیمات پیش فرض برای ارسال های جدید'); +@define('UPGRADE', 'به روز رسانی'); +@define('UPGRADE_TO_VERSION', 'به روز رسانی به نسخه %s'); +@define('DELETE_DIRECTORY', 'حذف این شاخه'); +@define('DELETE_DIRECTORY_DESC', 'شما می خواهید شاخه ای را حذف کنید که دارای فایل می باشد, ممکن است این فایل ها در ارسال های شما استفاده شده باشند.'); +@define('FORCE_DELETE', 'فایل هایی که در پایگاه داده فایل ها وجود ندارند را هم حذف کن'); +@define('CREATE_DIRECTORY', 'ایجاد شاخه'); +@define('CREATE_NEW_DIRECTORY', 'ساخت شاخه جدید'); +@define('CREATE_DIRECTORY_DESC', 'در اینجا شما می توانید شاخه جدیدی برای ریختن رسانه ها بسازید. نام مناسبی برای شاخه انتخاب کنید و در صورتی که تمایل دارید شاخه پدر را نیز انتخاب کنید.'); +@define('BASE_DIRECTORY', 'شاخه اصلی'); +@define('USERLEVEL_EDITOR_DESC', 'ویرایشگر استاندارد'); +@define('USERLEVEL_CHIEF_DESC', 'ویرایشگر مدیر'); +@define('USERLEVEL_ADMIN_DESC', 'مدیر'); +@define('USERCONF_USERLEVEL', 'نوع دسترسی'); +@define('USERCONF_USERLEVEL_DESC', 'دسترسی باید یکی از گزینه های روبرو باشد: [USERLEVEL_ADMIN] - مدیر، [USERLEVEL_CHIEF] - رییس نویسندگان، [USERLEVEL_EDITOR] - نویسنده عادی.'); +@define('USER_SELF_INFO', 'کاربر %s با سطح دسترسی %s وارد شد'); +@define('ADMIN_ENTRIES', 'مقادیر'); +@define('RECHECK_INSTALLATION', 'چک کردن دوباره نصب برنامه'); +@define('IMAGICK_EXEC_ERROR', 'توانایی اجرای "%s" نمی باشد, خطا: %s, مقدار بازگشتی: %d'); +@define('INSTALL_OFFSET_DESC', 'اختلاف زمانی بین زمان وب سرور و زمان دلخواه خود را وارد کنید'); +@define('UNMET_REQUIREMENTS', 'اشکال در موارد مورد نیاز: %s'); +@define('CHARSET', 'نوع حروف'); +@define('AUTOLANG', 'از زبان پیش فرض مرورگر بیننده استفاده شود'); +@define('AUTOLANG_DESC', 'اگر فعال باشد، از زبان مرورگر بیننده برای زبان پیش فرض ورودی ها و زبان پوسته وبلاگ استفاده می شود.'); +@define('INSTALL_AUTODETECT_URL', 'تشخیص خودکار استفاده از HTTP-Host'); +@define('INSTALL_AUTODETECT_URL_DESC', 'اگر روی "بله" تنظیم شود, Serendipity قرار داشتن آدرس BaseURL که در بخش تنظیمات وارد کردید را در درخواست ارسالی بررسی می کند. فعال کردن این گزینه، باعث می شود که شما بتوانید از چندین دامنه برای دیدن وبلاگ Serendipity و تمامی لینک های وابسته به آن استفاده کنید.'); +@define('CONVERT_HTMLENTITIES', 'سعی در تغییر مقادیر HTML داشته باشم؟'); +@define('EMPTY_SETTING', 'شما مقدار معتبری برای "%s" انتخاب نکردید!'); +@define('USERCONF_REALNAME', 'نام واقعی'); +@define('USERCONF_REALNAME_DESC', 'نام کامل نویسنده. این نام توسط خواننده دیده خواهد شد'); +@define('HOTLINK_DONE', 'به فایل مربوطه، لینک داده شد.'); +@define('ENTER_MEDIA_URL_METHOD', 'روش دریافت:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'توجه: اگر شما گزینه "لینک دادن به سرور" را انتخاب کرده اید، توجه داشته باشید که باید به سرور دسترسی داشته باشید. لینک دادن به سایت های دیگر، به شما اجازه می دهد از فایل ها، بدون ذخیره در سایت خودتان، استفاده کنید.'); +@define('MEDIA_HOTLINKED', 'لینک داده شد'); +@define('FETCH_METHOD_IMAGE', 'عکس را روی سرور پایین گذاری کن'); +@define('FETCH_METHOD_HOTLINK', 'لینک دادن به سرور'); +@define('DELETE_HOTLINK_FILE', 'لینک فایل %s حذف شد'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'آیا آدرس ایمیل ها دیده شود؟'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_fi.inc.php b/lang/serendipity_lang_fi.inc.php new file mode 100644 index 0000000..9725dd5 --- /dev/null +++ b/lang/serendipity_lang_fi.inc.php @@ -0,0 +1,668 @@ +Valmis.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Virhe: Tiedosto on jo olemassa!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Pieleen meni, tiedostoa ei tuotu. Kenties tiedoston koko oli liian suuri. Kysy palveluntarjoajaltasi apua tai muokkaa php.ini tiedostoasi salliaksesi isompien tiedostojen tuonnin..'); +@define('GO', 'Tee!'); +@define('NEWSIZE', 'Uusi koko: '); +@define('RESIZE_BLAHBLAH', 'Muokkaa kokoa %s

'); +@define('ORIGINAL_SIZE', 'Alkuperäinen koko: %sx%s pikseliä'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Kuvan koon muokkaus. Voit muokata kuvan kokoa säilyttäen suhteet, lisää toiseen laatikkoon arvo ja paina tab-näppäintä, niin lasken sinulle suhteen mukaisen toisen arvon automaattisesti.

'); +@define('QUICKJUMP_CALENDAR', 'Pikasiirtymä kalenteriin'); +@define('QUICKSEARCH', 'Pikahaku'); +@define('SEARCH_FOR_ENTRY', 'Etsi kirjausta'); +@define('ARCHIVES', 'Arkisto'); +@define('BROWSE_ARCHIVES', 'Selaa arkistoa kuukausittain'); +@define('TOP_REFERRER', 'Huippuviittaajat'); +@define('SHOWS_TOP_SITES', 'Näyttää listan eniten viitanneista sivustoista.'); +@define('TOP_EXITS', 'Huippupoistumiset'); +@define('SHOWS_TOP_EXIT', 'Näyttää eniten viittaamasi sivustot, joille on poistuttu'); +@define('SYNDICATION', 'Ajantasaistus'); +@define('SHOWS_RSS_BLAHBLAH', 'Näyttää RSS linkit'); +@define('ADVERTISES_BLAHBLAH', 'Mainostaa Serendipityä'); +@define('HTML_NUGGET', 'HTML raapale'); +@define('HOLDS_A_BLAHBLAH', 'Lisää HTML raapaleen sivupalstaan'); +@define('TITLE_FOR_NUGGET', 'Raapaleen otsikko'); +@define('THE_NUGGET', 'HTML raaplae!'); +@define('SYNDICATE_THIS_BLOG', 'Ajantasaista tähän blogiin!'); +@define('YOU_CHOSE', 'Valitsit %s'); +@define('IMAGE_ROTATE_LEFT', 'Käännä kuvaa 90 astetta vastapäivään'); +@define('IMAGE_ROTATE_RIGHT', 'Käännä kuvaa 90 astetta myötäpäivään'); +@define('IMAGE_SIZE', 'Kuvan koko'); +@define('IMAGE_AS_A_LINK', 'Kuvan lisäys'); +@define('POWERED_BY', 'Moottorina'); +@define('TRACKBACKS', 'Paluuviitteet'); +@define('TRACKBACK', 'Paluuviite'); +@define('NO_TRACKBACKS', 'Ei paluuviitteitä'); +@define('TOPICS_OF', 'Aiheet'); +@define('VIEW_FULL', 'Näytä kaikki'); +@define('VIEW_TOPICS', 'Näytä aiheet'); +@define('AT', ''); +@define('SET_AS_TEMPLATE', 'Aseta malliksi'); +@define('IN', ''); +@define('EXCERPT', 'Ote'); +@define('TRACKED', 'Jäljitetty'); +@define('LINK_TO_ENTRY', 'Linkitä kirjaukseen'); +@define('LINK_TO_REMOTE_ENTRY', 'Linkitä toisen kirjaukseen'); +@define('IP_ADDRESS', 'IP-osoite'); +@define('USER', 'Käyttäjä'); +@define('THUMBNAIL_USING_OWN', 'Käytetään kuvaa %s sen omana pienoiskuvana, koska se on jo niin pieni.'); +@define('THUMBNAIL_FAILED_COPY', 'Halusttiin käyttää %s omana pienoiskuvanaan, mutta kopiointi epäonnistui.'); +@define('AUTHOR', 'Kirjoittaja'); +@define('LAST_UPDATED', 'Viimeisin päivitys'); +@define('TRACKBACK_SPECIFIC', 'Kirjauksen URI paluuviitteille'); +@define('DIRECT_LINK', 'Suora linkki tähän kirjaukseen'); +@define('COMMENT_ADDED', 'Kommentti lisätty. '); +@define('COMMENT_ADDED_CLICK', 'Napasauta %spalataksesi%s kommentteihin, ja %s sulkeaksesi%s tämän ikkunan.'); +@define('COMMENT_NOT_ADDED', 'Tämän kirjauksen kommentointi ei ole sallittua. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Napsauta %spalataksesi%s kommentteihin, ja %ssulkeaksesi%s tämän ikkunan.'); +@define('COMMENTS_DISABLE', 'Kiellä kirjauksen kommentointi.'); +@define('COMMENTS_ENABLE', 'Salli kirjauksen kommentointi'); +@define('COMMENTS_CLOSED', 'Kirjoittaja ei salli tämän kirjauksen kommentointia'); +@define('EMPTY_COMMENT', 'Tyhjä kommentti, %spalaa%s ja yritä uudelleen'); +@define('ENTRIES_FOR', 'Kirjaukset alkaen %s'); +@define('DOCUMENT_NOT_FOUND', 'Kirjoitusta %s ei löytynyt.'); +@define('USERNAME', 'Käyttäjätunnus'); +@define('PASSWORD', 'Salasana'); +@define('AUTOMATIC_LOGIN', 'Talleta kirjautumistiedot'); +@define('SERENDIPITY_INSTALLATION', 'Serendipityn asennus'); +@define('LEFT', 'vasen'); +@define('RIGHT', 'oikea'); +@define('HIDDEN', 'piilotettu'); +@define('REMOVE_TICKED_PLUGINS', 'Poista valitut laajennokset'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Talleta taiton muutokset'); +@define('COMMENTS_FROM', 'Kommentit alkaen'); +@define('ERROR', 'Virhe'); +@define('ENTRY_SAVED', 'Kirjauksesi on talletettu'); +@define('DELETE_SURE', 'Oletko varma, että haluat poistaa #%s lopullisesti?'); +@define('NOT_REALLY', 'En todellakaan...'); +@define('DUMP_IT', 'Anna mennä!'); +@define('RIP_ENTRY', 'Lepää rauhassa #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Luokka #%s poistettu. Vanhat kirjoitukset siirretty luokkaan #%s'); +@define('CATEGORY_DELETED', 'Luokka #%s poistettu.'); +@define('INVALID_CATEGORY', 'Et valinnut luokkaa'); +@define('CATEGORY_SAVED', 'Luokka talletettu'); +@define('SELECT_TEMPLATE', 'Valitse pohja, jota haluat käyttää'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Kirjausten lisäys meni pieleen!'); +@define('MT_DATA_FILE', 'Movable Type tiedosto'); +@define('FORCE', 'Pakota'); +@define('CREATE_AUTHOR', 'Luo kirjoittaja \'%s\'.'); +@define('CREATE_CATEGORY', 'Luo luokkka \'%s\'.'); +@define('MYSQL_REQUIRED', 'Tarvitset MySQL laajennoksen tehdäksesi tämän.'); +@define('COULDNT_CONNECT', 'Yhteyttä MySQL tietokantaan: %s ei saatu.'); +@define('COULDNT_SELECT_DB', 'Tietokantaa: %s ei voitu valita.'); +@define('COULDNT_SELECT_USER_INFO', 'Käyttäjätiedon: %s valinta epäonnistui.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Luokan: %s valinta epäonnistui.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Kirjauksen: %s valinta epäonnistui.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Kommentin: %s valinta epäonnistui.'); +@define('YES', 'Kyllä'); +@define('NO', 'Ei'); +@define('USE_DEFAULT', 'Oletus'); +@define('CHECK_N_SAVE', 'Tarkista ja talleta'); +@define('DIRECTORY_WRITE_ERROR', 'Ei oikeutta hakemistoon %s.'); +@define('DIRECTORY_CREATE_ERROR', 'Hakemistoa %s ei ole, eikä voi luoda. Ole kiltti ja tee se itse.'); +@define('DIRECTORY_RUN_CMD', ' -> komento %s %s'); +@define('CANT_EXECUTE_BINARY', 'Ohjelman %s suoritus ei onnistu'); +@define('FILE_WRITE_ERROR', 'Tiedostoon %s kirjoittaminen ei onnistu.'); +@define('FILE_CREATE_YOURSELF', 'Ole kiltti ja tee tiedosto itse tai höllennä oikeuksia'); +@define('COPY_CODE_BELOW', '
* Kopioi alla oleva ja laita se tiedostoon %s kansiossa %s :
%s
' . "\n"); +@define('WWW_USER', 'Vaihda www apachen käyttäjätunnukseen (esim. nobody).'); +@define('BROWSER_RELOAD', 'Kun olet tehnyt tämän, lataa tämä sivu uudestaan.'); +@define('DIAGNOSTIC_ERROR', 'Antamasi tiedot aiheuttivat virheitä tarkistettaessa niitä:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity ei asennettu. Ole kiltti ja asenna se nyt.'); +@define('INCLUDE_ERROR', 'serendipity virhe: tiedostoa %s ei kyetty lukemaan - poistutaan.'); +@define('DATABASE_ERROR', 'serendipity virhe: tietokantayhteys virhe - poistutaan.'); +@define('CREATE_DATABASE', 'Luodaan oletuskanta...'); +@define('ATTEMPT_WRITE_FILE', 'Yritetään kirjoittaa tiedosto %s...'); +@define('WRITTEN_N_SAVED', 'Asetukset luotuja ja talletettu.'); +@define('IMAGE_ALIGNMENT', 'Kuvan tasaus'); +@define('ENTER_NEW_NAME', 'Anna uusi nimi: '); +@define('RESIZING', 'Muokataan'); +@define('RESIZE_DONE', 'Valmis (muokattu %s kuvaa).'); +@define('SYNCING', 'Päivitetään tietokantaa vastaamaan kuvakansiota'); +@define('SYNC_DONE', 'Valmis (Päivitetty %s kuvaa).'); +@define('FILE_NOT_FOUND', 'Tiedostoa %s ei löydy, ehkäpä se on jo poistettu?'); +@define('ABORT_NOW', 'Luovuta nyt'); +@define('REMOTE_FILE_NOT_FOUND', 'Tiedostoa ei löytynyt kohdepalvelimelta, onhan URL: %s oikein?'); +@define('FILE_FETCHED', '%s haettu nimelle %s'); +@define('FILE_UPLOADED', 'Tiedosto %s tuotu nimelle %s'); +@define('WORD_OR', 'Tai'); +@define('SCALING_IMAGE', 'Skaalataan %s %s x %s px'); +@define('KEEP_PROPORTIONS', 'Säilytä suhteet'); +@define('REALLY_SCALE_IMAGE', 'Skaalataanko kuva? Tätä operaatiota ei voi peruuttaa!'); +@define('TOGGLE_ALL', 'Näytä kaikki'); +@define('TOGGLE_OPTION', 'Näytä'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Tilaa tämä kirjaus'); +@define('UNSUBSCRIBE_OK', "%s :n tilaus peruttu."); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Uusi kommentti tilattuun kirjaukseen "%s"'); +@define('SUBSCRIPTION_MAIL', "Moi %s,\n\nKiinnostuksesi kohteeseen \"%s\" on uusi kommentti, otsikolla \"%s\"\nKommentoija on: %s\n\nKirjoitus on täällä: %s\n\nVoit peruuttaa tilauksesi linkistä: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Moros %s,\n\nUusi paluuvittaus kiinnostuksesi kohteeseen \"%s\", otsikolla \"%s\"\nViittaaja on: %s\n\nLöydät kirjoituksen linkistä: %s\n\nVoit peruuttaa tilauksesi: %s\n"); +@define('SIGNATURE', "\n-- \n%s moottorina on Serendipity.\nParas blogisofta mailla halmeilla..\nTsekkaa saadaksesi lisätietoja."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 '); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 '); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 '); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 Kommentit'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 '); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Kenttä "päätoimittaja"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Kenttä "webMasterr"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'RSS linkin kuva'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Kuvan leveys'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Kuvan korkeus'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'Webmasterin sähköpostiosoite tai tyhjää. (tyhjä: piilotettu) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'Päätoimittajan sähköpostiosoite tai tyhjää (tyhjä: piilotettu) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'GIF/JPEG/PNG kuvan urli tai tyhjää. (tyhjä: serendipityn logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'pikseleissä, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'pikseleissä, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Field "ttl" (elinikä)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Aika minuuteissa, jonka ajantasaistajat saavat säilyttää kopiota tarkistamatta (tyhjä: piilotettu) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Kenttä "julkaisuPäivä"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Pitäisikö "julkaisuPäivä"-kenttä lisätä RSS-kanavalle näyttämään viimeisimmän kirjauksen päiväys?'); +@define('CONTENT', 'Sisältö'); +@define('TYPE', 'Tyyppi'); +@define('DRAFT', 'Luonnos'); +@define('PUBLISH', 'Julkaise'); +@define('PREVIEW', 'Esikatselu'); +@define('DATE', 'Päiväys'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Päiväyksen muoto on virheellinen. Oikea muoto on VVVV-KK-PP TT:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Näyttää luokkalistan.'); +@define('ALL_AUTHORS', 'Kaikki kirjoittajat'); +@define('CATEGORIES_TO_FETCH', 'Haettavat luokat'); +@define('CATEGORIES_TO_FETCH_DESC', 'Kenen luokat haetaan?'); +@define('PAGE_BROWSE_ENTRIES', 'Sivu %s(%s), kaiken kaikkiaan %s kirjoitusta'); +@define('PREVIOUS_PAGE', 'edellinen sivu'); +@define('NEXT_PAGE', 'seuraava sivu'); +@define('ALL_CATEGORIES', 'Kaikki luokat'); +@define('DO_MARKUP', 'Tee notaatio muunnokset'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Päiväyksen muotoilu'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Kirjauksen todellinen päiväys, PHPn strftime() muuttujilla. (Oletus: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Mallipohjan avaaminen epäonnistui, ole kiltti ja päivitä serendipity!'); +@define('ADVANCED_OPTIONS', 'Edistyneen käyttäjän valinnat'); +@define('EDIT_ENTRY', 'Muokkaa kirjausta'); +@define('HTACCESS_ERROR', 'Serendipity tarvitsee oikeudet ".htaccess" tiedostoon tarkistaakseen asennuksen. Tarkistus epäonnistui, koska oikeudt ovat väärin. Ole kiltti ja korjaa:
  %s
. Lataa tämä sivu uudestaan kun olet korjannut..'); +@define('SIDEBAR_PLUGINS', 'Sivupalstan laajennokset'); +@define('EVENT_PLUGINS', 'Tapahtumalaajennokset'); +@define('SORT_ORDER', 'Järjestyskenttä'); +@define('SORT_ORDER_NAME', 'Nimi'); +@define('SORT_ORDER_EXTENSION', 'Tiedostopääte'); +@define('SORT_ORDER_SIZE', 'Tiedostokoko'); +@define('SORT_ORDER_WIDTH', 'Kuvan leveys'); +@define('SORT_ORDER_HEIGHT', 'Kuvan korkeus'); +@define('SORT_ORDER_DATE', 'Tuontipäiväys'); +@define('SORT_ORDER_ASC', 'Nouseva'); +@define('SORT_ORDER_DESC', 'Laskeva'); +@define('THUMBNAIL_SHORT', 'Pienoiskuva'); +@define('ORIGINAL_SHORT', 'Alkup.'); +@define('APPLY_MARKUP_TO', 'Käytä notaatiota kohdassa %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Viikon alusta'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipityn mielestä asetuksiesi versio on %s, mutta serendipityn versio on %s, tarvitaan päivitys! Napsauta'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Moro, ja teretulemas Serendipityn päivitykseen.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Olen agenttisi ja autan sinua päivittämään Serendipity %s asennuksesi.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Olet juuri asentanut Serendipity version %s, mutta kanta on jäänyt päivittämättä.'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Tietokantapäivitykset (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Seuraavat .sql-tiedostot pitäisi suorittaa ennen Serendipityn käyttöä'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Versiokohtaiset tehtävät'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Ei versiokohtaisia tehtäviä'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Haluatko minun tekevän ne puolestasi?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Ei, teen ne itse.'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Juu, olehyvä vain'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Näyttäisi siltä, ettet tarvitse päivityksiä.'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity on päivitetty'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Jätit automaattipäivitykset väliin. Varmista, että kanta on oikein asennettu ja oikeat skriptat on ajettu.'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Serendipitysi on nyt versiota %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Takaisin blogiin %stästä%s'); +@define('MANAGE_USERS', 'Käyttäjien ylläpito'); +@define('CREATE_NEW_USER', 'Luo uusi käyttäjä'); +@define('CREATE_NOT_AUTHORIZED', 'Et voi muokata samantasoisia käyttäjiä kuin itse olet'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Et voi muokata ylempiarvoisiasi.'); +@define('CREATED_USER', 'Uusi käyttäjä %s on luotu'); +@define('MODIFIED_USER', 'Käyttäjä %s muokattu'); +@define('USER_LEVEL', 'Taso'); +@define('DELETE_USER', 'Olet aikeissa poistaa käyttäjän #%d %s. Oletko tosissasi? Käyttäjän kirjoitukset sensuroidaan.'); +@define('DELETED_USER', 'Käyttäjä #%d %s tuhottu.'); +@define('LIMIT_TO_NUMBER', 'Montako näytetään?'); +@define('ENTRIES_PER_PAGE', 'kirjoitusta sivulla'); +@define('XML_IMAGE_TO_DISPLAY', 'XML Nappula'); +@define('XML_IMAGE_TO_DISPLAY_DESC','XML kanavat esitetään tällä kuvanappulalla.Tyhjä valitsee oletuksen kirjoittamalla:\'none\' ei käytetä kuvanappulaa.'); + +@define('DIRECTORIES_AVAILABLE', 'Valitsemalla hakemistolistasta hakemiston valitset hakemiston johon uusi hakemisto luodaan.'); +@define('ALL_DIRECTORIES', 'kaikki hakemistot'); +@define('MANAGE_DIRECTORIES', 'Ylläpidä hakemistoja'); +@define('DIRECTORY_CREATED', 'Hakemisto %s on luotu.'); +@define('PARENT_DIRECTORY', 'Hakemistovanhempi'); +@define('CONFIRM_DELETE_DIRECTORY', 'Haluatko todella poistaa hakemiston %s sisältöineen?'); +@define('ERROR_NO_DIRECTORY', 'Virhe: Hakemistoa %s ei ole'); +@define('CHECKING_DIRECTORY', 'Tarkistetaan tiedostoja hakemistossa %s'); +@define('DELETING_FILE', 'Poistetaan tiedostoa %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Hakemisto ei ole tyhjä. Valitse "pakota poiston", jos haluat poistaa tiedostotkin. Hakemiston tiedostot:'); +@define('DIRECTORY_DELETE_FAILED', 'Hakemiston %s poisto epäonnistui Tarkista oikeudet tai mahdollinen ylläoleva.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Hakemisto %s poistettu.'); +@define('SKIPPING_FILE_EXTENSION', 'Ohitetaan tiedsto: Tiedostopääte %s puuttuu.'); +@define('SKIPPING_FILE_UNREADABLE', 'Ohitetaan tiedosto: %s, tiedostoa ei voi lukea.'); +@define('FOUND_FILE', 'Löytyi uusi/muokattu tiedosto: %s.'); +@define('ALREADY_SUBCATEGORY', '%s on jo %s alikategoria.'); +@define('PARENT_CATEGORY', 'Kategoriavanhempi'); +@define('IN_REPLY_TO', 'Vastauksena'); +@define('TOP_LEVEL', 'Ylin taso'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s'); +@define('PERMISSIONS', 'Oikeudet'); +@define('SETTINGS_SAVED_AT', 'Uudet asetukset on tallettetu %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Tietokanta-asetukset'); +@define('INSTALL_CAT_DB_DESC', 'Serendipityn tarvitsemat tietokanta-asetukset.'); +@define('INSTALL_DBTYPE', 'Tietokantatyyppi'); +@define('INSTALL_DBTYPE_DESC', 'Tietokannan tyyppi'); +@define('INSTALL_DBHOST', 'Kantakone'); +@define('INSTALL_DBHOST_DESC', 'Kantapalvelimen nimi'); +@define('INSTALL_DBUSER', 'Kantakäyttäjä'); +@define('INSTALL_DBUSER_DESC', 'Kantakäyttäjän käyttäjätunnus'); +@define('INSTALL_DBPASS', 'Kantakäyttäjän salasana'); +@define('INSTALL_DBPASS_DESC', 'Kantakäyttäjän salasana'); +@define('INSTALL_DBNAME', 'Kannan nimi'); +@define('INSTALL_DBNAME_DESC', 'Tietokannan nimi'); +@define('INSTALL_DBPREFIX', 'Tauluetuliite'); +@define('INSTALL_DBPREFIX_DESC', 'Etuliite kantataulujen nimille.Esim serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Polut'); +@define('INSTALL_CAT_PATHS_DESC', 'Tiedosto- ja hakemistopolut. Älä unohoda hakemistojen nimistä loppukauttaviivaa!'); +@define('INSTALL_FULLPATH', 'Asennuspolku'); +@define('INSTALL_FULLPATH_DESC', 'Serendipity-asennushakemiston täydellinen ja bsoluuttinen hakemistopolku'); +@define('INSTALL_UPLOADPATH', 'Tuontipolku'); +@define('INSTALL_UPLOADPATH_DESC', 'Kaikki tuodut tiedostot talletetaan tänne. Suhteessa aseunnuspolkkuun. - Yleensä \'uploads/\''); +@define('INSTALL_RELPATH', 'Suhteellinen osoite'); +@define('INSTALL_RELPATH_DESC', 'Blogisi osoite, tyypillisesti \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Malliosoite'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Polku, josta mallipohjat löytyvät, suhteessa suhteelliseen polkuun. \'relative path\''); +@define('INSTALL_RELUPLOADPATH', 'Tuontiosoite'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Tiedostotuontien osoite suhteessa suhteelliseen osoitteeseen'); +@define('INSTALL_URL', 'Blogin osoite'); +@define('INSTALL_URL_DESC', 'Serendipity asennuksen osoite'); +@define('INSTALL_INDEXFILE', 'Aloitustiedosto'); +@define('INSTALL_INDEXFILE_DESC', 'Serendipityn aloitustiedoston nimi'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Yleiset asetukset'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Serendipity toimintojen muokkaus'); +@define('INSTALL_USERNAME', 'Ylläpitäjän tunnus'); +@define('INSTALL_USERNAME_DESC', 'Ylläpitäjän käyttäjätunnus'); +@define('INSTALL_PASSWORD', 'Ylläpitäjän salasana'); +@define('INSTALL_PASSWORD_DESC', 'Ylläpitäjän salasana'); +@define('INSTALL_EMAIL', 'Ylläpitäjän sähköpostiosoite'); +@define('INSTALL_EMAIL_DESC', 'Ylläpitäjän sähköpostiosoite.'); +@define('INSTALL_SENDMAIL', 'Postit ylläpitäjälle?'); +@define('INSTALL_SENDMAIL_DESC', 'Haluatko sähköpostia kun blogisasi kommentoidaan?'); +@define('INSTALL_SUBSCRIBE', 'Saavatko käyttäjät tilata kirjoituksia?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Käyttäjät saavat sähköpostia kun tilattua kirjoitusta kommentoidaan.'); +@define('INSTALL_BLOGNAME', 'Blogin nimi'); +@define('INSTALL_BLOGNAME_DESC', 'Blogisi nimi'); +@define('INSTALL_BLOGDESC', 'Blogisi kuvaus'); +@define('INSTALL_BLOGDESC_DESC', 'Blogisi kuvaus'); +@define('INSTALL_LANG', 'Kieli'); +@define('INSTALL_LANG_DESC', 'Valitse blogisi käyttöliittymän kieli'); + +/* Ulkoasu and options */ +@define('INSTALL_CAT_DISPLAY', 'Ulkoasuvalinnat'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Ulkoasuun vaikuttavat valinnat'); +@define('INSTALL_WYSIWYG', 'Käytä WYSIWYG muokkainta'); +@define('INSTALL_WYSIWYG_DESC', 'Haluatko käyttää WYSIWYG muokkainta? (Väittä toimivansa IE5+, ja osittain Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Pakoita XHTML 1.1 yhteensopivaksi'); +@define('INSTALL_XHTML11_DESC', 'Serendipityn tuottama koodi on XHTML 1.1 yhteensopivaa (saattaa kyykyttää 4 sukupolvea vanhemmat palvelimet/selaimet)'); +@define('INSTALL_POPUP', 'Käytä ponnahdusikkunoita'); +@define('INSTALL_POPUP_DESC', 'Esitetäänkö paluuviitteet ja kommentit ponnahdusikkunoissa?'); +@define('INSTALL_EMBED', 'Käytätkö serendipityä osasena?'); +@define('INSTALL_EMBED_DESC', 'Serendipity osana olemassaolevaa sivua. Voit hyödyntää aloitussivu-valintaa sisällyttääksesi serendipity osaksi sivua. Katso README tiedostosta ohjeita!'); +@define('INSTALL_TOP_AS_LINKS', 'Näytä huippupoistumisosoitteet/viittausosoitteet linkkeinä?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"no": Ei, tekstinä google spämmin estämiseksi. "yes": Kyllä, linkkeinä.. "default": Oletus, käytä oletusasetusten valintaa (suositeltu vaihtoehto).'); +@define('INSTALL_BLOCKREF', 'Estä viittaukset'); +@define('INSTALL_BLOCKREF_DESC', 'Onko viittaajia, joiden osoitteita et halua nähdä? Erota palvelinosoitteet \';\':llä. Esto tehdään osamerkkijonoilla!'); +@define('INSTALL_REWRITE', 'URL uudelleenkirjoitus'); +@define('INSTALL_REWRITE_DESC', 'Valitse mitä sääntöjä käytetään blogisi sivuosoitteiden uudelleenkirjoitukseen. Siistityt osoitteet helpottava hakukoneiden indeksointia. Toimintaan tarvitaan webpalvelimella joko mod_rewrite tai "AllowOverride All" serendipity hakemistolle. Oletus on tutki automaattisesti'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Kuvamuunnosten asetukset'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Serendipityn kuvankäsittelyasetukset.'); +@define('INSTALL_IMAGEMAGICK', 'Käytä Imagemagick:ä'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Onko image magick asennettuna ja haluatko käyttää sitä kuvien käsittelyyn?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Convert-ohjelman sijainti'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Imagemagick convert-ohjelman nimi ja täydellinen tiedostopolku'); +@define('INSTALL_THUMBSUFFIX', 'Pienoiskuvakkeen suffiksi'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Pienoiskuvakkeet nimetään seuraavasti: originaali.[suffiksi].pääte'); +@define('INSTALL_THUMBWIDTH', 'Pienoiskuvakkeen mitat'); +@define('INSTALL_THUMBWIDTH_DESC', 'Pienoiskuvakkeen maksimileveys'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Henkilötietosi'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Henkilötietojen asettaminen'); +@define('USERCONF_USERNAME', 'Käyttäjänimesi'); +@define('USERCONF_USERNAME_DESC', 'Millä nimimerkillä kirjoitat tähän blogiin'); +@define('USERCONF_PASSWORD', 'Salasanasi'); +@define('USERCONF_PASSWORD_DESC', 'Nimimerkkisi salasana'); +@define('USERCONF_EMAIL', 'Sähköpostiosoitteesi'); +@define('USERCONF_EMAIL_DESC', 'Henkilökohtainen sähköpostiosoitteesi'); +@define('USERCONF_SENDCOMMENTS', 'Lähetänkö komentointi-ilmoitukset?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Haluatko postia kun joku kommentoi kirjoitustasi?'); +@define('USERCONF_SENDTRACKBACKS', 'Lähetä paluuviitteet?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Haluatko paluupostia, kun joku tekee paluuviitteen kirjoitukseesi?'); +@define('USERCONF_ALLOWPUBLISH', 'Oikeudet: Sallitaanko kirjoitusten julkaisu?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Saako tämä kirjoittaja julkistaa?'); +@define('SUCCESS', 'Onnistui'); +@define('POWERED_BY_SHOW_TEXT', 'Näytä "Serendipity" tekstinä'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Tulostaa "Serendipity Weblog" tekstinä'); +@define('POWERED_BY_SHOW_IMAGE', 'Näytä "Serendipity" logolla'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Näyttää serendipityn logon'); +@define('PLUGIN_ITEM_DISPLAY', 'Missä kohde näytetään?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Vain jatko-osiosssa'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Vain yleisnäkymässä'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Kaikkialla'); +@define('RSS_IMPORT_CATEGORY', 'Käytä tätä luokkaa luokattomiin tuotuihin kirjauksiin'); + +@define('COMMENTS_WILL_BE_MODERATED', 'Kommentit tarkistetaan ennen julkistusta.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Voit:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Varoitus: Kommentti hyväksytetään ennen julkistusta'); +@define('DELETE_COMMENT', 'Poista kommentti'); +@define('APPROVE_COMMENT', 'Hyväksy kommentti'); +@define('REQUIRES_REVIEW', 'Vaatii tarkistusta'); +@define('COMMENT_APPROVED', 'Kommentti #%s hyvksytty'); +@define('COMMENT_DELETED', 'Kommentti #%s poistettu'); +@define('COMMENTS_MODERATE', 'Kommentit & paluuviitteet on hyväksytettävä'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Varoitus: Tätä paluuviitettä ei julkisteta ennen hyväksyntää'); +@define('DELETE_TRACKBACK', 'Poista paluuviite'); +@define('APPROVE_TRACKBACK', 'Hyväksy paluuviite'); +@define('TRACKBACK_APPROVED', 'Paluuviite #%s hyväksytty'); +@define('TRACKBACK_DELETED', 'Paluuviite #%s poistettu'); +@define('VIEW', 'Näytä'); +@define('COMMENT_ALREADY_APPROVED', 'Kommentti #%s on jo hyväksytty'); +@define('COMMENT_EDITED', 'Valittua kommenttia on muokattu'); +@define('HIDE', 'Piilota'); +@define('VIEW_EXTENDED_ENTRY', 'Jatka "%s":n lukemista'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Tätä linkkiä ei ole tarkoitus napsauttaa. Voit käyttää tätä osoitetta paluuviitteisiin ja pingauksiin omasta blogistasi.Kopioi linkki ja käytä sitä omassa blogissasi.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Käytä https kirjautuaksesi'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Login https:llä, web-palvelimesi tulee tukea tätä ominaisuutta!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Tehdäänkö ulosviittauksista linkkejä?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": Ei kommentit, huippuviittaajat ja huippupoistumislinkkejä ei näytetä linkkeinä (suositellaan). "yes": Kyllä, näytetään linkkeinä!'); +@define('PAGE_BROWSE_COMMENTS', 'Sivu (%s/%s), yhteensä %s kommenttia'); +@define('FILTERS', 'Suotimet'); +@define('FIND_ENTRIES', 'Etsi kirjauksia'); +@define('FIND_COMMENTS', 'Etsi kommentteja'); +@define('FIND_MEDIA', 'Etsi media'); +@define('FILTER_DIRECTORY', 'Hakemisto'); +@define('SORT_BY', 'Järjestä'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Ei paluuviitettä: Yhteyttä %s:n porttiin %d ei saatu'); +@define('MEDIA', 'Media'); +@define('MEDIA_LIBRARY', 'Mediakirjasto'); +@define('ADD_MEDIA', 'Lisää media'); +@define('ENTER_MEDIA_URL', 'Lisättävän tiedoston URL:'); +@define('ENTER_MEDIA_UPLOAD', 'Valitse tiedosto, jonka haluat tuoda:'); +@define('SAVE_FILE_AS', 'Talleta nimellä:'); +@define('STORE_IN_DIRECTORY', 'Talleta hakemistoon: '); +@define('ADD_MEDIA_BLAHBLAH', 'Lisää tiedoston media kirjastoosi:

Voit tuoda tiedostoja tai käskeä minua hakemaan ne webistä. Jos et keksi sopivaa kuvaa, kokeile, googlea mielikuvillasi, tulokset ovat yleensä käyttökelpoisia ja hauskoja :)

Valitse tapa:
'); +@define('MEDIA_RENAME', 'Uudelleennimeä tiedosto'); +@define('IMAGE_RESIZE', 'Muokkaa kuvan kokoa'); +@define('MEDIA_DELETE', 'Poista tiedosto'); +@define('FILES_PER_PAGE', 'Tiedostoja sivulla'); +@define('CLICK_FILE_TO_INSERT', 'Napsauta tiedostoa, jonka haluat lisätä:'); +@define('SELECT_FILE', 'Valitse lisättävä tiedosto'); +@define('MEDIA_FULLSIZE', 'Täysikokoinen'); +@define('CALENDAR_BOW_DESC', 'Viikon aloittava päivä. Oletus on maanantai'); +@define('SUPERUSER', 'Blogin ylläpito'); +@define('ALLOWS_YOU_BLAHBLAH', 'Linkki sivupalstaan, blogin ylläpitoon.'); +@define('CALENDAR', 'Kalenteri'); +@define('SUPERUSER_OPEN_ADMIN', 'Ylläpito'); +@define('SUPERUSER_OPEN_LOGIN', 'Sisäänkirjautuminen'); +@define('INVERT_SELECTIONS', 'Käännä valinnat'); +@define('COMMENTS_DELETE_CONFIRM', 'Haluatko todella poistaa valitut kommentit?'); +@define('COMMENT_DELETE_CONFIRM', 'Haluatko poistaa kommentin #%d, %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Poista valitut kommentit'); +@define('VIEW_COMMENT', 'Näytä kommentti'); +@define('VIEW_ENTRY', 'Näytä kirjaus'); +@define('DELETE_FILE_FAIL' , 'Tiedoston %s poisto epäonnistui'); +@define('DELETE_THUMBNAIL', 'Poistettu pienoiskuva: %s'); +@define('DELETE_FILE', 'Tuhottu tiedosto %s'); +@define('ABOUT_TO_DELETE_FILE', 'Olet aikeissa poistaa %s:n
Jos se on käytössä kirjauksissasi syntyy ongelmia
Oletko varma?

'); +@define('TRACKBACK_SENDING', 'Lähetetään paluuviite URI %s...'); +@define('TRACKBACK_SENT', 'Paluuviite lähetetty'); +@define('TRACKBACK_FAILED', 'Paluuviite epäonnistui: %s'); +@define('TRACKBACK_NOT_FOUND', 'Ei paluuviitteen URI:a.'); +@define('TRACKBACK_URI_MISMATCH', 'Automaatin löytämä URI ei vastaa kohde URI:a.'); +@define('TRACKBACK_CHECKING', 'Tarkistetaan %s paluuviitteiden varalle...'); +@define('TRACKBACK_NO_DATA', 'Kohde on tyhjä'); +@define('TRACKBACK_SIZE', 'Kohteen URI ylittää tiedostokokorajan %s tavua.'); +@define('COMMENTS_VIEWMODE_THREADED', 'Vastausketjuina'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Listana'); +@define('DISPLAY_COMMENTS_AS', 'Näytä kommentit'); +@define('COMMENTS_FILTER_SHOW', 'Näytä'); +@define('COMMENTS_FILTER_ALL', 'Kaikki'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Vain hyväksytyt'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Hyväksymättömät'); +@define('RSS_IMPORT_BODYONLY', 'Tuo kaikki teksti artikkelin runko-osaan ja jätä jatko-osio tyhjäksi..'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Näytä kirjaukset runko-osana RSS kanavilla'); +@define('WEEK', 'Viikko'); +@define('WEEKS', 'Viikkoja'); +@define('MONTHS', 'Kuukausia'); +@define('DAYS', 'Päiviä'); +@define('ARCHIVE_FREQUENCY', 'Kalenterimerkinnän frekvenssi'); +@define('ARCHIVE_FREQUENCY_DESC', 'Kalenterimerkintöjen välinen välimatka'); +@define('ARCHIVE_COUNT', 'Listakohtien lukumäärä'); +@define('ARCHIVE_COUNT_DESC', 'Näytettävien kuukausien ja viikkojen kokonaismäärä '); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Asennetut laajennkoset'); +@define('SIDEBAR_PLUGIN', 'sivupalstan laajennos'); +@define('EVENT_PLUGIN', 'tapahtumalaajennos'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Napsauta lisätäksesi uuden %s'); +@define('VERSION', 'versio'); +@define('INSTALL', 'Asenna'); +@define('ALREADY_INSTALLED', 'Asennettu jo'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Valitse laajennos, jonka haluat asentaa'); +@define('INSTALL_OFFSET', 'Palvelimen aikasiirtymä'); +@define('STICKY_POSTINGS', 'Tahmeat kirjaukset'); +@define('INSTALL_FETCHLIMIT', 'Etusivulla esitettävät kirjaukset'); +@define('INSTALL_FETCHLIMIT_DESC', 'Selaimessa esitettävien kirjausten lukumäärä'); +@define('IMPORT_ENTRIES', 'Tuo kirjauksia'); +@define('EXPORT_ENTRIES', 'Vie kirjauksia'); +@define('IMPORT_WELCOME', 'Tervetula Serendipityn tuontiagentuuriin'); +@define('IMPORT_WHAT_CAN', 'Täällä voit tuoda kirjauksia muista blogi-softista.'); +@define('IMPORT_SELECT', 'Valitse ohjelma, josta haluat tuoda'); +@define('IMPORT_PLEASE_ENTER', 'Ole kiltti ja täytä allaoleva tieto.'); +@define('IMPORT_NOW', 'Tuo nyt!'); +@define('IMPORT_STARTING', 'Aloitan tuonnin...'); +@define('IMPORT_FAILED', 'Tuonti meni pieleen'); +@define('IMPORT_DONE', 'Tuonti onnistui'); +@define('IMPORT_WEBLOG_APP', 'Blogisofta'); +@define('EXPORT_FEED', 'Näytä koko RSS kanavan sisältö'); +@define('STATUS', 'Tuonnin jälkeinen tilanne'); +@define('IMPORT_GENERIC_RSS', 'Yleinen RSS tuonti'); +@define('ACTIVATE_AUTODISCOVERY', 'Lähetä paluuviitteet kirjauksen paluuviestiosoitteisiin.'); +@define('WELCOME_TO_ADMIN', 'Tervetuloa Serendipityn ylläpitoon.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Kirjoita tunnistustietosi allaoleviin laatikoihin.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Moottorina Serendipity %s and PHP %s'); +@define('INSTALL_USEGZIP', 'Käytä gzip pakattuja sivuja'); +@define('INSTALL_USEGZIP_DESC', 'Nopeuttaaksemme sivujen siirtoa selaimeen voimme pakata sivut, jos selain sitä tukee. Suositus: käytössä.'); +@define('INSTALL_SHOWFUTURE', 'Näytä tulevaisuus'); +@define('INSTALL_SHOWFUTURE_DESC', 'Näytä kirjaukset, joiden julkistuspäivä on tulevaisuudessa. Oletusarvoisesti näytetään vain nykyhetken kirjaukset.'); +@define('INSTALL_DBPERSISTENT', 'Käytä pysyviä kantayhteyksiä.'); +@define('INSTALL_DBPERSISTENT_DESC', 'Lue here. Ei suositella'); +@define('NO_IMAGES_FOUND', 'Ei kuvia'); +@define('PERSONAL_SETTINGS', 'Henkilökohtaiset astukset'); +@define('REFERER', 'Viittaaja'); +@define('NOT_FOUND', 'Ei löytynyt'); +@define('WRITABLE', 'Kirjoitettavissa'); +@define('NOT_WRITABLE', 'Ei kirjoitettavissa'); +@define('PROBLEM_DIAGNOSTIC', 'Diagnostiikkavirheiden takia et voi jatkaa asennusta, ennen kuin ylläolevat virheet on korjattu.'); +@define('SELECT_INSTALLATION_TYPE', 'Valitse asennustapa'); +@define('WELCOME_TO_INSTALLATION', 'Tervetuloa Serendipity asennukseen'); +@define('FIRST_WE_TAKE_A_LOOK', 'Ensiksi tarkistamme olemassaolevan asennuksen ja mahdolliset epäyhteensopimattomuudet.'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Virheet esitetään %s, suositukset %s ja onnistumiset %s'); +@define('RED', 'punaisella'); +@define('YELLOW', 'keltaisella'); +@define('GREEN', 'vihreällä'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s esiasennusraportti'); +@define('RECOMMENDED', 'Suositettu'); +@define('ACTUAL', 'Käytössä'); +@define('PHPINI_CONFIGURATION', 'php.ini muokkaus'); +@define('PHP_INSTALLATION', 'PHP asennus'); +@define('THEY_DO', 'tekevät'); +@define('THEY_DONT', 'eivät tee'); +@define('SIMPLE_INSTALLATION', 'Yksinkertainen asennus'); +@define('EXPERT_INSTALLATION', 'Mukautettu asennus'); +@define('COMPLETE_INSTALLATION', 'Täysi asennus'); +@define('WONT_INSTALL_DB_AGAIN', 'Tietokantaa ei uudelleenasenneta'); +@define('CHECK_DATABASE_EXISTS', 'Tarkistetaan onko kanta ja ovatko taulut jo olemassa'); +@define('CREATING_PRIMARY_AUTHOR', 'Luodaan päätoimittaja \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Asetetaan oletuspohja'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Asennetaan oletuslaajennokset'); +@define('SERENDIPITY_INSTALLED', 'Serendipity on asennettu'); +@define('VISIT_BLOG_HERE', 'Uuteen blogiisi'); +@define('THANK_YOU_FOR_CHOOSING', 'Kiitos kun valitsit Serendipityn'); +@define('ERROR_DETECTED_IN_INSTALL', 'Asennuksessa tapahtui virhe'); +@define('OPERATING_SYSTEM', 'Käyttöjärjestelmä'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('TEMPLATE_SET', '\'%s\' on oletuspohjasi'); +@define('SEARCH_ERROR', 'Haku ei toiminut oletetusti. Huomautus blogin ylläpitäjlle:tämä saattaa johtua puuttuvista kantaindekseistä. MySQL:ssä kantakäyttäjällä on oltava oikeus ajaa kysely :

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
Kantavirhe oli:
%s
'); +@define('EDIT_THIS_CAT', 'Muokataan "%s"'); +@define('CATEGORY_REMAINING', 'Poista tämä luokka ja siirrä sen kirjaukset tähän luokkaan'); +@define('CATEGORY_INDEX', 'Luokkalista'); +@define('NO_CATEGORIES', 'Ei luokkia'); +@define('RESET_DATE', 'Nollaa päiväys'); +@define('RESET_DATE_DESC', 'Napsauta asettaaksesi päiväys kuluvaksi'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Oikeuksia voi muuttaa komennolla: `%s` hakemistossa, tai FTP-ohjelmalla'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Varoitus: Käyttämäsi oletuspohja on sisältää vanhentuneita määreitä, päivitä pohja jos se on mahdollista!'); +@define('ENTRY_PUBLISHED_FUTURE', 'Kirjausta ei ole julkistettu.'); +@define('ENTRIES_BY', '%s:n kirjaukset'); +@define('PREVIOUS', 'Edellinen'); +@define('NEXT', 'Seuraava'); +@define('APPROVE', 'Hyväksy'); +@define('DO_MARKUP_DESCRIPTION', 'Tee tekstille notaatiomuutokset (hymiöt, lyhennelmät käyttäen *, /, _, ...). Kieltämällä tämä säilyy HTML-koodi tekstissä sellaisenaan.'); +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_fr.inc.php b/lang/serendipity_lang_fr.inc.php new file mode 100644 index 0000000..11d3611 --- /dev/null +++ b/lang/serendipity_lang_fr.inc.php @@ -0,0 +1,674 @@ + +# http://sebastian.mordziol.de + +@define('LANG_CHARSET', 'ISO-8859-1'); +@define('DATE_LOCALES', 'french, fr, fr_FR, en_US'); +@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y'); +@define('DATE_FORMAT_SHORT', '%d.%m.%Y %H:%M'); +@define('WYSIWYG_LANG', 'fr'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', '.'); +@define('NUMBER_FORMAT_THOUSANDS', ','); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Administration de Serendipity'); +@define('HAVE_TO_BE_LOGGED_ON', 'Vous devez être authentifié pour accéder à cette page'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Vous avez entré un nom d\'utilisateur ou un mot de passe erroné'); +@define('APPEARANCE', 'Apparence'); +@define('MANAGE_STYLES', 'Configurer les Styles'); +@define('CONFIGURE_PLUGINS', 'Configurer les Plugins'); +@define('CONFIGURATION', 'Configuration'); +@define('BACK_TO_BLOG', 'Revenir au Weblog'); +@define('LOGIN', 'Se connecter'); +@define('LOGOUT', 'Se déconnecter'); +@define('LOGGEDOUT', 'Déconnecté.'); +@define('CREATE', 'Créer'); +@define('SAVE', 'Enregistrer'); +@define('NAME', 'Nom'); +@define('CREATE_NEW_CAT', 'Créer une nouvelle catégorie'); +@define('I_WANT_THUMB', 'Je veux utiliser une miniature dans ma news.'); +@define('I_WANT_BIG_IMAGE', 'Je veux utiliser l\'image en taille rélle dans mon billet.'); +@define('I_WANT_NO_LINK', ' Je veux l\'afficher en tant qu\'image'); +@define('I_WANT_IT_TO_LINK', 'Je veux l\'afficher en tant que lien vers cette adresse:'); +@define('BACK', 'Précédent'); +@define('FORWARD', 'Suivant'); +@define('ANONYMOUS', 'Anonyme'); +@define('NEW_TRACKBACK_TO', 'Nouveau traçage fait sur'); +@define('NEW_COMMENT_TO', 'Nouveau commentaire posté sur'); +@define('RECENT', 'Récentes...'); +@define('OLDER', 'Plus anciennes...'); +@define('DONE', 'Effectué'); +@define('WELCOME_BACK', 'Bienvenue,'); +@define('TITLE', 'Titre'); +@define('DESCRIPTION', 'Description'); +@define('PLACEMENT', 'Emplacement'); +@define('DELETE', 'Supprimer'); +@define('SAVE', 'Enregistrer'); +@define('UP', '+HAUT'); +@define('DOWN', '+BAS'); +@define('ENTRIES', 'billets'); +@define('NEW_ENTRY', 'Poster un billet'); +@define('EDIT_ENTRIES', 'Éditer les billets'); +@define('CATEGORIES', 'Catégories'); +@define('WARNING_THIS_BLAHBLAH', "ATTENTION:\\nCeci peut prendre du temps si il y beaucoup d\'images sans miniatures."); +@define('CREATE_THUMBS', 'Recréer les miniatures'); +@define('MANAGE_IMAGES', 'Configurer les images'); +@define('NAME', 'Nom'); +@define('EMAIL', 'Email'); +@define('HOMEPAGE', 'Site'); +@define('COMMENT', 'Commentaire'); +@define('REMEMBER_INFO', 'Enregistrer ces informations?'); +@define('SUBMIT_COMMENT', 'Poster le commentaire'); +@define('NO_ENTRIES_TO_PRINT', 'Aucun billet à afficher'); +@define('COMMENTS', 'Commentaires'); +@define('ADD_COMMENT', 'Ajouter un commentaire'); +@define('NO_COMMENTS', 'Pas de commentaires'); +@define('POSTED_BY', 'Posté par'); +@define('ON', 'sur'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Un nouveau commentaire a été posté sur votre blog "%s", pour le billet intitulé "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Un nouveau suivi a été fait sur votre blog au billet intitulée "%s".'); +@define('NO_CATEGORY', 'Pas de Catégorie'); +@define('ENTRY_BODY', 'Introduction'); +@define('EXTENDED_BODY', 'Corps du billet'); +@define('CATEGORY', 'Catégorie'); +@define('EDIT', 'Éditer'); +@define('NO_ENTRIES_BLAHBLAH', 'Aucun billet trouvé pour la requête %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Votre recherche pour %s a donné %s résultats:'); +@define('SEARCH_TOO_SHORT', 'Vos critères de recherche doivent avoir un minimum de %s caractères'); +@define('IMAGE', 'Image'); +@define('ERROR_FILE_NOT_EXISTS', 'Erreur: Ce fichier n\'existe pas.'); +@define('ERROR_FILE_EXISTS', 'Erreur: Il existe déjà un fichier portant ce nom. Choisissez un nouveau nom.'); +@define('ERROR_SOMETHING', 'Erreur: Quelque chose ne va pas.'); +@define('ADDING_IMAGE', 'Ajout d\'une image...'); +@define('THUMB_CREATED_DONE', 'Miniature créee.
Terminé.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Erreur: Le fichier existe déjà sur votre machine.'); +@define('GO', 'Go!'); +@define('NEWSIZE', 'Nouvelle taille: '); +@define('RESIZE_BLAHBLAH', 'Redimensionner %s

'); +@define('ORIGINAL_SIZE', 'Taille d\'origine: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Ici vous pouvez ajuster la taille de l\'image sélectionnée. Si vous voulez respecter les proportions de l\'image, entrez juste la hauteur ou la largeur, et pressez la touche TAB - la valeur correspondante sera insérée automatiquement:'); +@define('QUICKJUMP_CALENDAR', 'Saut rapide vers le Calendrier'); +@define('QUICKSEARCH', 'Recherche rapide'); +@define('SEARCH_FOR_ENTRY', 'Recherche d\'un billet'); +@define('ARCHIVES', 'Archives'); +@define('BROWSE_ARCHIVES', 'Afficher les archives par mois'); +@define('TOP_REFERRER', 'Top des liens entrants'); +@define('SHOWS_TOP_SITES', 'Montrer le top de sites qui affichent un lien vers votre blog'); +@define('TOP_EXITS', 'Top des liens sortants'); +@define('SHOWS_TOP_EXIT', 'Montrer le top des liens de sites qui sortent de votre blog'); +@define('SYNDICATION', 'Syndication'); +@define('SHOWS_RSS_BLAHBLAH', 'Montrer les liens de syndication RSS'); +@define('ADVERTISES_BLAHBLAH', 'Publicité sur l\'origine de votre blog'); +@define('HTML_NUGGET', 'Bloc HTML'); +@define('HOLDS_A_BLAHBLAH', 'Permet d\'afficher des contenus personnalisés au format HTML dans la barre latérale'); +@define('TITLE_FOR_NUGGET', 'Titre du bloc HTML'); +@define('THE_NUGGET', 'Contenu du bloc HTML'); +@define('SYNDICATE_THIS_BLOG', 'Syndiquer ce Blog'); +@define('YOU_CHOSE', 'Vous avez choisi %s'); +@define('IMAGE_SIZE', 'Taille de l\'image'); +@define('IMAGE_AS_A_LINK', 'Insérer l\'image'); +@define('POWERED_BY', 'propulsé par'); +@define('TRACKBACKS', 'Suivis'); +@define('TRACKBACK', 'Suivi'); +@define('NO_TRACKBACKS', 'Pas de suivis'); +@define('TOPICS_OF', 'Sujets de'); +@define('VIEW_FULL', 'Voir la totalité'); +@define('VIEW_TOPICS', 'Voir les sujets'); +@define('AT', 'à'); +@define('SET_AS_TEMPLATE', 'Choisir ce thème'); +@define('IN', 'dans'); +@define('EXCERPT', 'Excepté'); +@define('TRACKED', 'Suivi'); +@define('LINK_TO_ENTRY', 'Liens vers le billet'); +@define('LINK_TO_REMOTE_ENTRY', 'Lien vers le billet externe'); +@define('IP_ADDRESS', 'Adresse IP'); +@define('USER', 'Utilisateur'); +@define('THUMBNAIL_USING_OWN', 'L\'image %s est si petite qu\'elle va être utilisée comme sa propre miniature.'); +@define('THUMBNAIL_FAILED_COPY', 'La minitaure pour %s n\'a pas pu être copiée.'); +@define('AUTHOR', 'Auteur'); +@define('LAST_UPDATED', 'Dernière mise à jour'); +@define('TRACKBACK_SPECIFIC', 'Adresse de suivi spécifique pour ce billet'); +@define('DIRECT_LINK', 'Lien direct à ce billet'); +@define('COMMENT_ADDED', 'Votre commentaire a été ajouté.'); +@define('COMMENT_ADDED_CLICK', 'Cliquez %sici pour retourner%s aux commentaires, et %sici pour fermer%s cette fenêtre.'); +@define('COMMENT_NOT_ADDED', 'Votre commentaire n\'a pas pû être ajouté, car les commentaires pour ce billet ont été désactivés. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Cliquez %sici pour retourner%s aux commentaires, et %sici pour fermer%s cette fenêtre.'); +@define('COMMENTS_DISABLE', 'Ne pas autoriser de commentaires pour ce billet'); +@define('COMMENTS_ENABLE', 'Autoriser les commentaires pour ce billet'); +@define('COMMENTS_CLOSED', 'L\'auteur n\'a pas autorisé l\'ajout de commentaires pour ce billet.'); +@define('EMPTY_COMMENT', 'Votre commentaire est vide, %sretournez en arrière%s et réessayez'); +@define('ENTRIES_FOR', 'Billets pour %s'); +@define('DOCUMENT_NOT_FOUND', 'Le document %s n\'a pas été trouvé.'); +@define('USERNAME', 'Nom d\'utilisateur'); +@define('PASSWORD', 'Mot de passe'); +@define('AUTOMATIC_LOGIN', 'Garder en mémoire'); +@define('SERENDIPITY_INSTALLATION', 'Installation de Serendipity'); +@define('LEFT', 'gauche'); +@define('RIGHT', 'droite'); +@define('HIDDEN', 'caché'); +@define('REMOVE_TICKED_PLUGINS', 'Supprimer les plugins cochés'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Enregistrer les changements'); +@define('COMMENTS_FROM', 'Commentaires de'); +@define('ERROR', 'Erreur'); +@define('DELETE_SURE', 'Etes vous sûr de vouloir supprimer #%s définitivement?'); +@define('NOT_REALLY', 'Pas vraiment...'); +@define('DUMP_IT', 'À la poubelle!'); +@define('RIP_ENTRY', 'Le billet #%s a rejoint l\'éternel.'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Catégorie #%s supprimée. Les billets ont été déplacés dans la catégorie #%s'); +@define('CATEGORY_DELETED', 'Catégorie #%s supprimée.'); +@define('INVALID_CATEGORY', 'Aucune catégorie sélectionnée pour la suppression'); +@define('CATEGORY_SAVED', 'Catégorie sauvegardée'); +@define('SELECT_TEMPLATE', 'Sélectionnez le thème que vous voulez utiliser pour votre blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Les billets n\'ont pas pu être importés.'); +@define('YES', 'Oui'); +@define('NO', 'Non'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Vérifier & sauvegarder'); +@define('DIRECTORY_WRITE_ERROR', 'Je ne peux pas écrire dans le répertoire %s. Il faudrait que vous me donniez les droits d\'accès nécessaires manuellement.'); +@define('DIRECTORY_CREATE_ERROR', 'Le répertoire %s n\'existe pas et ne peut pas être crée automatiquement. Veuillez le créer manuellement, ou me donner les droits d\'accès nécessaires.'); +@define('DIRECTORY_RUN_CMD', ' -> exécute %s %s'); +@define('CANT_EXECUTE_BINARY', 'Je ne peux pas exécuter le programme %s'); +@define('FILE_WRITE_ERROR', 'Je ne peux pas ouvrir le fichier %s pour écriture.'); +@define('FILE_CREATE_YOURSELF', 'Merci de créer le fichier vous-même ou de me donner les droits d\'accès nécessaires.'); +@define('COPY_CODE_BELOW', '
* Copiez le code ci-dessous et placez le %s dans votre %s répertoire:

%s
' . "\n"); +@define('WWW_USER', 'Changez www dans le nom d\'utilisateur sous lequel fonctionne le serveur apache (nobody, par ex).'); +@define('BROWSER_RELOAD', 'Une fois ceci effectué, rechargez la page avec la touche "F5".'); +@define('DIAGNOSTIC_ERROR', 'J\'ai touvé quelques erreurs en vérifiant vos données:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity n\'est pas encore installé. Vous pouvez l\'installer maintenant.'); +@define('INCLUDE_ERROR', 'Erreur Serendipity: impossible d\'inclure le fichier %s.'); +@define('DATABASE_ERROR', 'Erreur Serendipity: impossible d\'ouvrir une connexion avec la base de données.'); +@define('CREATE_DATABASE', 'Création de la structure de la base de données...'); +@define('ATTEMPT_WRITE_FILE', 'Essai d\'écriture sur le fichier %s...'); +@define('WRITTEN_N_SAVED', 'Configuration écrite & sauvegardée'); +@define('IMAGE_ALIGNMENT', 'Position de l\'image'); +@define('ENTER_NEW_NAME', 'Entrez le nouveau nom pour: '); +@define('RESIZING', 'Redimensionnement'); +@define('RESIZE_DONE', 'Terminé (%s images redimensionnées).'); +@define('SYNCING', 'Synchronisation de la base de données avec votre collection d\'images'); +@define('SYNC_DONE', 'Terminé (%s images synchronisées).'); +@define('DELETE_IMAGE_FAIL' , 'Impossible de supprimer l\'image intitulée %s'); +@define('DELETE_THUMBNAIL', 'Suppression de la miniature de l\'image intitulée %s'); +@define('FILE_NOT_FOUND', 'Impossible de trouver le fichier intitulé %s, peut-être qu\'il a déjà été supprimé?'); +@define('ABORT_NOW', 'Annuler maintenant'); +@define('REMOTE_FILE_NOT_FOUND', 'Le fichier n\'a pas été trouvé sur le serveur distant, êtes vous sûr que l\'URL: %s est correcte?'); +@define('FILE_FETCHED', '%s téléchargé et savegardé sous %s'); +@define('FILE_UPLOADED', 'Le fichier %s a été uploadé avec succès sous %s'); +@define('WORD_OR', 'Ou'); +@define('SCALING_IMAGE', 'Redimensionnement %s en %s x %s px'); +@define('KEEP_PROPORTIONS', 'Conserver les proportions'); +@define('REALLY_SCALE_IMAGE', 'Réellement redimensionner l\'image? Attention: cette opération est irréversible!'); +@define('TOGGLE_ALL', 'Afficher/Ne pas afficher les détails'); +@define('TOGGLE_OPTION', 'Afficher les détails'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Souscrire à ce billet'); +@define('UNSUBSCRIBE_OK', "%s est maintenant désinscrit de cette news"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Nouveau commentaire posté à votre souscription du billet "%s"'); +@define('SUBSCRIPTION_MAIL', "Bonjour %s,\n\nUn nouveau commentaire a été posté au billet que vous surveillez \"%s\", intitulé \"%s\"\nLe pseudo de l\'auteur est: %s\n\nVous pouvez trouver le billet ici: %s\n\nVous pouvez vous désinscrire en cliquant sur ce lien: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Bonjour %s,\n\nUn nouveau suivi a été ajouté au billet que vous surveillez \"%s\", intitulé \"%s\"\nLe pseudo de l\'auteur est: %s\n\nVous pouvez trouver le billet ici: %s\n\nVous pouvez vous désinscrire en cliquant sur ce lien: %s\n"); +@define('SIGNATURE', "\n-- \n%s est propulsé par Serendipity.\nLe blog des blogs que vous aussi pouvez utiliser!.\nAllez sur , le site officiel."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0'); +@define('SYNDICATION_PLUGIN_20c', 'Commentaires RSS 2.0'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Champs "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Champs "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Image pour le fil RSS'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Largeur d\'image'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Hauteur d\'image'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'Adresse E-Mail du webmaster, si disponible. (aucun: invisible) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'Adresse E-Mail de l\'éditeur principal, si disponible. (aucun: invisible) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'Adresse d\'une image au format GIF/JPEG/PNG, si disponible. (aucune: logo serendipity)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'en pixels, maximum 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'en pixels, maximum 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Champs "ttl" (time-to-live = temps à vivre)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Laps de temps en minutes après lequel votre blog ne doit plus être pris du cache par des sites/programmes externes (aucun: invisible) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Champs "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Inclure le champs "pubDate" dans le fil RSS pour afficher la date de l\'entrée la plus récente?'); +@define('CONTENT', 'Contenu'); +@define('TYPE', 'Type'); +@define('DRAFT', 'Brouillon'); +@define('PUBLISH', 'Publication'); +@define('PREVIEW', 'Prévisualisation'); +@define('DATE', 'Date'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Attention: La date entrée est invalide. Elle doit être au format YYYY-MM-DD HH:MM .'); +@define('CATEGORY_PLUGIN_DESC', 'Affiche la liste des catégories.'); +@define('ALL_AUTHORS', 'Tous les auteurs'); +@define('CATEGORIES_TO_FETCH', 'Catégories à afficher'); +@define('CATEGORIES_TO_FETCH_DESC', 'Afficher les catégories par auteur(s) spécifique(s)'); +@define('PREVIOUS_PAGE', 'Page précédente'); +@define('NEXT_PAGE', 'Page suivante'); +@define('ALL_CATEGORIES', 'Toutes les catégories'); +@define('DO_MARKUP', 'Transformation de balises dans le texte'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Format de la date'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Le format dans lequel la date des billets doit être affichée. Toute syntaxe permise par la fonction PHP strftime() est possible. (Défaut: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Impossible d\'ouvrir le fichier du thème, merci de mettre à jour Serendipity!'); +@define('ADVANCED_OPTIONS', 'Options avancées'); +@define('EDIT_ENTRY', 'Éditer le billet'); +@define('HTACCESS_ERROR', 'Pour vérifier l\'installation de Serendipity sur votre serveur, Serendipity doit pouvoir créer le fichier ".htaccess". Ceci n\'a pas été possible car Serendipity n\'a pas les droits d\'accès suffisants dans ce répertoire. Vous pouvez ajuster les droits d\'accès avec la commande suivante:
  %s
. Après, rechargez cette page avec la touche "F5".'); +@define('SIDEBAR_PLUGINS', 'Plugins pour la barre latérale'); +@define('EVENT_PLUGINS', 'Plugins d\'évènement'); +@define('SORT_ORDER', 'Trier par ordre'); +@define('SORT_ORDER_NAME', 'Nom du fichier'); +@define('SORT_ORDER_EXTENSION', 'Extension du fichier'); +@define('SORT_ORDER_SIZE', 'Taille du fichier'); +@define('SORT_ORDER_WIDTH', 'Largeur de l\'image'); +@define('SORT_ORDER_HEIGHT', 'Hauteur de l\'image'); +@define('SORT_ORDER_DATE', 'Date de l\'upload'); +@define('SORT_ORDER_ASC', 'Croissant'); +@define('SORT_ORDER_DESC', 'Décroissant' ); +@define('THUMBNAIL_SHORT', 'Miniature'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Appliquer la transformation des balises à %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Début de la semaine'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity a détecté que votre configuration (version %s) ne correspond pas à la version de votre installation de Serendipity (version %s). Pour continuer à utiliser Serendipity, l\'assistant de mise à jour va vous guider pour mettre à jour votre installation.'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Bonjour, et bienvenue dans l\'assistant de mise à jour de Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Je vais vous guider pour la mise à jour de votre installation %s de Serendipity.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Vous voyez ce message car vous avez installé Serendipity %s, mais la base de données doit être reconfigurée pour fonctionner correctement avec cette version.'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Mises à jour de la base de données (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Pour mettre à jour votre base de données, j\'ai trouvé les fichiers .sql suivants qui doivent être importés:'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Tâches spécifiques à la version'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Aucune tâche spécifique à la nouvelle version n\'a été trouvée'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Voulez-vous que j\'effectue les tâches suivantes?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Non, je vais le faire manuellement'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Oui, faites-le s\'il vous plait'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Une mise à jour n\'est pas nécessaire pour votre installation de Serendipity, il n\'y a pas de tâches à effectuer.'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Considérez Serendipity comme mis à jour.'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Vous avez ignoré la mise à jour de Serendipity, assurez-vous que la base de données est installée correctement, et que les tâches nécessaires sont effectuées.'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Votre installation de Serendipity a été mise à jour à la version %s.'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Vous pouvez retourner à votre blog en %scliquant ici%s'); +@define('MANAGE_USERS', 'Administrer les utilisateurs'); +@define('CREATE_NEW_USER', 'Créer un nouvel utilisateur'); +@define('CREATE_NOT_AUTHORIZED', 'Vous ne pouvez pas éditer des utilisateurs qui ont le même niveau d\'autorisation que le vôtre.'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Vous ne pouvez pas créer d\'utilisateur avec un niveau d\'autorisation plus élevé que le vôtre.'); +@define('CREATED_USER', 'Un nouvel utilisateur %s a été crée'); +@define('MODIFIED_USER', 'Les propriétés de l\'utilisateur %s ont été changées'); +@define('USER_LEVEL', 'Niveau d\'autorisation'); +@define('DELETE_USER', 'Vous êtes sur le point de supprimer l\'utilisateur #%d %s. Êtes-vous sûr de vouloir continuer? Les billets de cet utilisateur ne seront plus visibles dans votre blog.'); +@define('DELETED_USER', 'Utilisateur #%d %s supprimé.'); +@define('LIMIT_TO_NUMBER', 'Limiter le nombre de billets à?'); +@define('ENTRIES_PER_PAGE', 'billets par page'); +@define('XML_IMAGE_TO_DISPLAY', 'Bouton "XML"'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Les liens vers les fils XML seront affichés avec cette image. Laisser vide pour l\'image par défaut, ou tapez \'none\' pour la désactiver.'); + +@define('DIRECTORIES_AVAILABLE', 'Dans la liste des sous-dossiers disponibles, vous pouvez cliquer sur un nom de dossier pour en créer un nouveau à cet endroit.'); +@define('ALL_DIRECTORIES', 'tous les dossiers'); +@define('MANAGE_DIRECTORIES', 'Administrer les dossiers'); +@define('DIRECTORY_CREATED', 'Le dossier %s a été crée.'); +@define('PARENT_DIRECTORY', 'Dossier parent'); +@define('CONFIRM_DELETE_DIRECTORY', 'Êtes-vous sûr de vouloir supprimer tous les contenus du dossier %s?'); +@define('ERROR_NO_DIRECTORY', 'Erreur: Le dossier %s n\'existe pas'); +@define('CHECKING_DIRECTORY', 'Vérification des fichiers dans le dossier %s'); +@define('DELETING_FILE', 'Suppression du fichier %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Impossible de supprimer un dossier non vide. Cochez la case "Forcer la suppression" si vous voulez supprimer les fichiers gênants, et puis effectuez l\'opération à nouveau. Les fichiers présents dans le dossier sont les suivants:'); +@define('DIRECTORY_DELETE_FAILED', 'La suppression du dossier %s a échoué. Vérifiez les droits d\'accès au répertoire et les messages ci-dessus.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Suppression du dossier %s effectuée.'); +@define('SKIPPING_FILE_EXTENSION', 'Fichier ignoré: Pas d\'extension de fichier dans %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Fichier ignoré: impossible de lire à partir du fichier %s .'); +@define('FOUND_FILE', 'Fichier nouveau/modifié trouvé: %s.'); +@define('ALREADY_SUBCATEGORY', '%s est déjà une sous-catégorie de %s.'); +@define('PARENT_CATEGORY', 'Catégorie parent'); +@define('IN_REPLY_TO', 'En réponse à'); +@define('TOP_LEVEL', 'Racine'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Configuration de la base de données'); +@define('INSTALL_CAT_DB_DESC', 'Vous permet d\'entrer toutes les données nécessaires pour la base données dont Serendipity a besoin pour fonctionner.'); +@define('INSTALL_DBTYPE', 'Type de base de données'); +@define('INSTALL_DBTYPE_DESC', 'Choisissez le type de votre base de données'); +@define('INSTALL_DBHOST', 'Serveur hôte'); +@define('INSTALL_DBHOST_DESC', 'Le nom du serveur hôte sur lequel réside la base de données (exemple: localhost)'); +@define('INSTALL_DBUSER', 'Nom d\'utilisateur'); +@define('INSTALL_DBUSER_DESC', 'Le nom d\'utilisateur à utiliser pour se connecter à la base de données'); +@define('INSTALL_DBPASS', 'Mot de passe'); +@define('INSTALL_DBPASS_DESC', 'Le mot de passe correspondant au nom d\'utilisateur'); +@define('INSTALL_DBNAME', 'Nom de la base de données'); +@define('INSTALL_DBNAME_DESC', 'Le nom de la base de données à laquelle Serendipity doit se connecter'); +@define('INSTALL_DBPREFIX', 'Préfixe des tables'); +@define('INSTALL_DBPREFIX_DESC', 'Le préfixe à utiliser pour les tables de Serendipity (exemple: serendipity_)'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Chemins'); +@define('INSTALL_CAT_PATHS_DESC', 'Configuration des chemins aux dossiers et fichiers indispensables. N\'oubliez pas d\'ajouter les slashes ("/") finaux!'); +@define('INSTALL_FULLPATH', 'Chemin absolu'); +@define('INSTALL_FULLPATH_DESC', 'Le chemin complet et absolu du dossier d\'installation de Serendipity'); +@define('INSTALL_UPLOADPATH', 'Chemin pour les uploads'); +@define('INSTALL_UPLOADPATH_DESC', 'C\'est ici que Serendipity enregistre tous les fichiers uploadés. Chemin relatif au \'chemin absolu\' - normalement \'uploads/\''); +@define('INSTALL_RELPATH', 'Chemin relatif'); +@define('INSTALL_RELPATH_DESC', 'Le chemin d\'accès à Serendipity pour votre navigateur, normalement \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Chemin relatif des thèmes'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Le chemin au dossier contenant vos thèmes - relatif au \'Chemin relatif\''); +@define('INSTALL_RELUPLOADPATH', 'Chemin relatif des uploads'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Le chemin d\'accès aux fichiers uploadés pour votre navigateur - relatif au \'Chemin relatif\''); +@define('INSTALL_URL', 'Lien au blog'); +@define('INSTALL_URL_DESC', 'Le lien (URL) pour accéder à votre installation de Serendipity'); +@define('INSTALL_INDEXFILE', 'Script principal'); +@define('INSTALL_INDEXFILE_DESC', 'Le nom du script principal que vous voulez utiliser pour Serendipity (exemple: index.php)'); + +/* General settings */ +@define('INSTALL_CAT_SETTINGS', 'Configuration générale'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Personnalisation et configuration générale de Serendipity'); +@define('INSTALL_USERNAME', 'Nom de l\'administrateur'); +@define('INSTALL_USERNAME_DESC', 'Le nom d\'utilisateur pour l\'accès de l\'administrateur'); +@define('INSTALL_PASSWORD', 'Mot de passe l\'administrateur'); +@define('INSTALL_PASSWORD_DESC', 'Le mot de passe pour l\'accès de l\'administrateur'); +@define('INSTALL_EMAIL', 'Email de l\'administrateur'); +@define('INSTALL_EMAIL_DESC', 'Adresse Email à utiliser pour l\'administrateur du blog'); +@define('INSTALL_SENDMAIL', 'Envoi d\'emails à l\'administrateur?'); +@define('INSTALL_SENDMAIL_DESC', 'Voulez-vous que l\'administrateur reçoive un email quand des commentaires sont postés dans les billets?'); +@define('INSTALL_SUBSCRIBE', 'Autoriser les utilisateurs de suivre des billets?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Donner aux utilisateurs la possibilité de souscrire à un billet, et ainsi recevoir des emails quand des commentaires sont postés dans celui-ci?'); +@define('INSTALL_BLOGNAME', 'Titre du blog'); +@define('INSTALL_BLOGNAME_DESC', 'Le titre de votre blog'); +@define('INSTALL_BLOGDESC', 'Description de votre blog'); +@define('INSTALL_BLOGDESC_DESC', 'La description de votre blog'); +@define('INSTALL_LANG', 'Langue'); +@define('INSTALL_LANG_DESC', 'Choisissez la langue à utiliser pour votre blog. Celle-ci sera utilisée dans le blog et l\'interface d\'administration.'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Apparence et options'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Personnalisation du \'look & feel\' de l\'interface du blog.'); +@define('INSTALL_WYSIWYG', 'Utiliser l\'éditeur WYSIWYG'); +@define('INSTALL_WYSIWYG_DESC', 'Voulez-vous utiliser l\'éditeur WYSIWYG pour composer vos billets? (Fonctionne avec IE5+, et partiellement avec Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Forcer la conformité XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', 'Voulez-vous forcer la conformité au standard XHTML 1.1 (peut causer des problèmes au niveau de l\'administration et du blog dans les navigateurs plus anciens de la 4ème génération)'); +@define('INSTALL_POPUP', 'Activer les fenêtres pop-pup'); +@define('INSTALL_POPUP_DESC', 'Voulez-vous que le blog utilise des fenêtres pop-up pour les commentaires, traçages et autres?'); +@define('INSTALL_EMBED', 'Intégration dans une application externe'); +@define('INSTALL_EMBED_DESC', 'Si vous voulez intégrer Serendipity dans une page normale ou dans une application externe, choisissez \'Oui\'. Serendipity n\'affichera alors que les contenus du blog, vous permettant de les intégrer facilement dans n\'importe-quelle page. Vous pouvez aussi utiliser l\'option \'Script principal\' pour créer un encapsulateur (wrapper) qui vous permettra d\'ajouter vos propres contenus et visuel. Pour plus d\'informations sur l\'intégration de Serendipity, consultez le fichier README fourni dans l\'installation.'); +@define('INSTALL_BLOCKREF', 'Exclure des pages référantes'); +@define('INSTALL_BLOCKREF_DESC', 'Vous pouvez exclure des noms de domaine spécifiques de la liste des pages référantes: séparez chaque nom de domaine avec \';\', et notez que l\'exclusion du nom de domaine se fait par la fonction substring().'); +@define('INSTALL_REWRITE', 'Réecritures URL'); +@define('INSTALL_REWRITE_DESC', 'Choisissez la méthode à utiliser pour la gestion des URL de votre blog. Si vous activez les réecritures URL, l\'accès à votre blog se fera par des URL simples, plus facilement indexables par les moteurs de recherche. Pour les activer, le module mod_rewrite doit être activé dans votre serveur, ou il doit autoriser l\'utilisation de la directive "AllowOverride All" pour le dossier d\'installation de Serendipity. Par défaut Serendipity choisit automatiquement l\'option à utiliser.'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Options de gestion des images'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Définissez comment Serendipity doit gérer les transformations/conversions d\'images dans votre médiathèque.'); +@define('INSTALL_IMAGEMAGICK', 'Utiliser Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Est-ce que imageMagick est installé sur votre serveur, et voulez-vous l\'utiliser pour le redimensionnement de vos images?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Chemin d\'accès au programme de conversion'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Chemin absolu et nom de votre programme de conversion de imageMagick (normalement \'convert\')'); +@define('INSTALL_THUMBSUFFIX', 'Suffixe pour les miniatures'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Les miniatures d\'images seront enregistrées de la manière suivante:: original.[suffixe].ext'); +@define('INSTALL_THUMBWIDTH', 'Dimensions des miniatures'); +@define('INSTALL_THUMBWIDTH_DESC', 'Largeur maximum (statique) des miniatures crées automatiquement'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Détails personnels'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Détails sur votre compte personnel'); +@define('USERCONF_USERNAME', 'Votre nom d\'utilisateur'); +@define('USERCONF_USERNAME_DESC', 'Votre nom d\'utilisateur'); +@define('USERCONF_PASSWORD', 'Votre mot de passe'); +@define('USERCONF_PASSWORD_DESC', 'Votre mot de passe'); +@define('USERCONF_EMAIL', 'Votre E-Mail'); +@define('USERCONF_EMAIL_DESC', 'Votre E-Mail'); +@define('USERCONF_SENDCOMMENTS', 'Notification de commentaire?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Voulez-vous recevoir un email lorsque quelqu\'un poste un commentaire dans votre billet?'); +@define('USERCONF_SENDTRACKBACKS', 'Notification de suivis?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Voulez-vous recevoir un email lorsque quelqu\'un souscrit à l\'un de vos billets?'); + +// TRANSLATE +@define('PERMISSIONS', 'Permissions'); +@define('USERCONF_ALLOWPUBLISH', 'Publication de billets?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Cet utilisateur est-il autorisé à poster des billets?'); +@define('ENTRY_SAVED', 'Votre billet a été enregistré'); +@define('SUCCESS', 'Succès'); +@define('POWERED_BY_SHOW_TEXT', 'Afficher \'Serendipity\' en tant que texte'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Affiche le slogan \'Serendipity Weblog\' en tant que texte'); +@define('POWERED_BY_SHOW_IMAGE', 'Afficher \'Serendipity\' avec un logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Affiche le logo Serendipity'); +@define('INSTALL_TOP_AS_LINKS', 'Afficher le top pages sortantes / référantes en tant que liens?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '\'Non\': affichage en tant que texte seulement pour prévenir le spam par Google. \'Oui\': affichage en tant que liens. Par défaut, l\'option de la configuration générale est utilisée.'); + +/* TRANSLATE */ +@define('SETTINGS_SAVED_AT', 'La nouvelle configuration a été enregistrée à %s'); +@define('PLUGIN_ITEM_DISPLAY', 'Où le billet doit-il être affiché?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Dans la vue détaillée seulement'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Page d\'accueil seulement'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Sur la page d\'accueil et la vue détaillée'); +@define('RSS_IMPORT_CATEGORY', 'Utiliser cette catégorie pour les billets à catégorie inconnue'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Erreur: impossible d\'uploader le fichier. Peut-être que la taille du fichier est plus grande que ce que votre serveur autorise. Vérifiez avec votre administrateur système ou éditez votre fichier php.ini pour autoriser le téléchargement de fichiers plus volumineux.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Les commentaires postés doivent être approuvés avant d\'être affichés dans le blog.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Vous avez les possibilités suivantes:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Attention: ce commentaire doit être approuvé avant d\'être publié.'); +@define('DELETE_COMMENT', 'Supprimer le commentaire'); +@define('APPROVE_COMMENT', 'Approuver le commentaire'); +@define('REQUIRES_REVIEW', 'Doit être revu'); +@define('COMMENT_APPROVED', 'Le commentaire #%s a été approuvé'); +@define('COMMENT_DELETED', 'Le commentaire #%s a été supprimé'); +@define('VIEW', 'Afficher'); +@define('COMMENT_ALREADY_APPROVED', 'Le commentaire #%s semble déjà avoir été approuvé'); +@define('COMMENT_EDITED', 'Le commentaire sélectionné a été modifié'); +@define('HIDE', 'Cacher'); +@define('VIEW_EXTENDED_ENTRY', 'Continuer à lire "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Ce lien n\\\'est pas fait pour être cliqué. Il contient le lien de traçage pour ce billet. Vous pouvez utiliser ce lien pour envoyer un ping ou faire un traçage sur ce billet à partir de votre blog. Pour copier le lien, faites un clic droit sur le lien, et sélectionnez \\\'Copier le lien\\\' dans Internet Explorer ou \\\'Copier le lien\\\' dans Mozilla.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Attention: Ce traçage doit être approuvé avant qu\'il puisse être affiché.'); +@define('DELETE_TRACKBACK', 'Supprimer le traçage'); +@define('APPROVE_TRACKBACK', 'Approuver le traçage'); +@define('TRACKBACK_APPROVED', 'Le taçage #%s a été approuvé'); +@define('TRACKBACK_DELETED', 'Le traçage #%s a été supprimé'); +@define('COMMENTS_MODERATE', 'Les commentaires ou traçages de ce billet doivent être approuvés.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Utiliser un accès sécurisé pour l\'authentification'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Fait que le lien de l\'interface d\'administration montre vers un lien sécurisé (https). Attention: Votre serveur doit être configuré pour accepter ce genre de liens.'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Rendre les liens sortants cliquables?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '\'Non\': Les liens sortants non vérifiés (Top liens sortants, Top pages référantes, Commentaires) ne sont pas affichés/affichés en tant que texte seulement quand possible pour prévenir le spam par Google (recommandé). \'Oui\': les liens non vérifiés sont affichés en tant que liens. Notez que vous pouvez remplacer cette option localement dans les plugins pour la barre latérale.'); +@define('PAGE_BROWSE_COMMENTS', 'Page %s de %s, %s commentaires au total'); +@define('FILTERS', 'Filtres'); +@define('FIND_ENTRIES', 'Trouver des billets'); +@define('FIND_COMMENTS', 'Trouver des commentaires'); +@define('FIND_MEDIA', 'Trouver des images'); +@define('FILTER_DIRECTORY', 'Dossier'); +@define('SORT_BY', 'Trier par'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Pas de traçage envoyé: la connexion n\'a pas pu être établie à %s sur le port %d'); +@define('MEDIA', 'Document'); +@define('MEDIA_LIBRARY', 'Médiathèque'); +@define('ADD_MEDIA', 'Ajouter un document'); +@define('ENTER_MEDIA_URL', 'Entrez un lien d\'un fichier à télécharger:'); +@define('ENTER_MEDIA_UPLOAD', 'Sélectionnez un fichier à uploader:'); +@define('SAVE_FILE_AS', 'Enregistrer le fichier sous:'); +@define('STORE_IN_DIRECTORY', 'Enregistrer dans le dossier suivant: '); +@define('MEDIA_RENAME', 'Renommer ce fichier'); +@define('IMAGE_RESIZE', 'Redimensionner cette image'); +@define('MEDIA_DELETE', 'Supprimer ce fichier'); +@define('FILES_PER_PAGE', 'Fichiers par page'); +@define('CLICK_FILE_TO_INSERT', 'Cliquez sur le fichier que vous voulez insérer:'); +@define('SELECT_FILE', 'Choisissez un fichier à insérer'); +@define('MEDIA_FULLSIZE', 'Taille réelle'); +@define('CALENDAR_BOW_DESC', 'Le jour qui doit être considéré comme début de la semaine. Lundi par défaut.'); +@define('SUPERUSER', 'Administration du blog'); +@define('ALLOWS_YOU_BLAHBLAH', 'Ajoute un lien à l\'administration de votre blog dans la barre latérale.'); +@define('CALENDAR', 'Calendrier'); +@define('SUPERUSER_OPEN_ADMIN', 'Aller à l\'administration'); +@define('SUPERUSER_OPEN_LOGIN', 'Aller à l\'écran d\'authentification'); +@define('INVERT_SELECTIONS', 'Inverser les sélections'); +@define('COMMENTS_DELETE_CONFIRM', 'Êtes-vous sûr de vouloir supprimer les commentaires sélectionnés?'); +@define('COMMENT_DELETE_CONFIRM', 'Êtes-vous sûr de vouloir supprimer le commentaire #%d, posté par %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Supprimer les commentaires sélectionnés'); +@define('VIEW_COMMENT', 'Afficher le commentaire'); +@define('VIEW_ENTRY', 'Afficher le billet'); +@define('DELETE_FILE', 'Suppression du fichier intitulé %s'); +@define('ABOUT_TO_DELETE_FILE', 'Vous êtes sur le point d\'effacer %s.
Si vous avez utilisé ce fichier dans un de vos billets, les liens vers celui-ci seront invalides
Êtes-vous sûr de vouloir continuer?

'); +@define('TRACKBACK_SENDING', 'Envoie le traçage à l\'adresse %s...'); +@define('TRACKBACK_SENT', 'Traçage effectué'); +@define('TRACKBACK_FAILED', 'Traçage échoué: %s'); +@define('TRACKBACK_NOT_FOUND', 'Pas d\'adresse de traçage trouvée.'); +@define('TRACKBACK_URI_MISMATCH', 'L\'adresse de traçage déterminée automatiquement ne correspond pas l\'adresse cible.'); +@define('TRACKBACK_CHECKING', 'Vérifie %s pour des traçages éventuels...'); +@define('TRACKBACK_NO_DATA', 'L\'adresse cible ne contenait pas de données'); +@define('TRACKBACK_SIZE', 'L\'adresse cible dépasse la taille Target URI exceeded maximum filesize of %s bytes.'); +@define('VIEWMODE_THREADED', 'Passer en mode vue groupée'); +@define('COMMENTS_VIEWMODE_THREADED', 'Vue groupée'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Vue non groupée'); +@define('DISPLAY_COMMENTS_AS', 'Afficher les commentaires en'); +@define('PAGE_BROWSE_ENTRIES', 'Page %s de %s sur %s billets au total'); +@define('ADD_MEDIA_BLAHBLAH', 'Ajouter un fichier à votre médiathèque:

Vous permet d\'uploader des fichiers, ou de me dire une adresse internet de laquelle je peux les télécharger. Si vous n\'avez pas d\'image appropriée, vous pouvez faire une recherche d\'images avec Google, les résultats sont souvent intéressants et toujours très comiques :)

Choisissez une méthode:
'); +@define('COMMENTS_FILTER_SHOW', 'Afficher'); +@define('COMMENTS_FILTER_ALL', 'Tous'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Approuvés'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'En attente d\'être approuvés'); +@define('RSS_IMPORT_BODYONLY', 'Mettre tout le texte importé dans l\'introduction du billet au lieu de le répartir sur l\'introduction et le corps du billet.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Afficher les billets complets dans le fil RSS (include le corps du billet)'); +@define('MT_DATA_FILE', 'Fichier de données Movable Type'); +@define('FORCE', 'Forcer'); +@define('CREATE_AUTHOR', 'Créer l\'auteur \'%s\'.'); +@define('CREATE_CATEGORY', 'Créer la catégorie \'%s\'.'); +@define('MYSQL_REQUIRED', 'L\'extension MySQL doit être activée dans votre installation PHP pour pouvoir continuer.'); +@define('COULDNT_CONNECT', 'Impossible de se connecter à la base de données MySQL: %s.'); +@define('COULDNT_SELECT_DB', 'Impossible de sélectionner une base de données: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Impossible d\'accéder aux informations d\'utilisateurs: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Impossible d\'accéder aux informations de catégories: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Impossible d\'accéder aux informations de billets: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Impossible d\'accéder aux informations de commentaires: %s.'); +@define('WEEK', 'Semaine'); +@define('WEEKS', 'Semaines'); +@define('MONTHS', 'Mois'); +@define('DAYS', 'Jours'); +@define('ARCHIVE_FREQUENCY', 'Fréquence d\archivage des éléments dans le calendrier'); +@define('ARCHIVE_FREQUENCY_DESC', 'Intervalle dans le calendrier entre chaque élément de la liste'); +@define('ARCHIVE_COUNT', 'Nombre d\'éléments dans la liste'); +@define('ARCHIVE_COUNT_DESC', 'Le nombre total de mois, semaines ou jours à aficher'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Ci-dessous: une liste des plugins installés'); +@define('SIDEBAR_PLUGIN', 'plugin de barre latérale'); +@define('EVENT_PLUGIN', 'plugin d\'évènement'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Cliquez ici pour installer un nouveau %s'); +@define('VERSION', 'version'); +@define('INSTALL', 'Installer'); +@define('ALREADY_INSTALLED', 'Déjà installé'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Sélectionnez le plugin que vous voulez installer'); +@define('INSTALL_OFFSET', 'Décalage de l\'heure serveur'); +@define('STICKY_POSTINGS', 'Billets indélébiles'); +@define('INSTALL_FETCHLIMIT', 'Billets à afficher sur la page d\'accueil'); +@define('INSTALL_FETCHLIMIT_DESC', 'Nombre de billets à afficher par page dans l\'interface principale du blog'); +@define('IMPORT_ENTRIES', 'Importer des billets'); +@define('EXPORT_ENTRIES', 'Exporter des billets'); +@define('IMPORT_WELCOME', 'Bienvenue dans l\'assistant d\'importation de Serendipity'); +@define('IMPORT_WHAT_CAN', 'Ici vous pouvez importer des billets d\'autres logiciels de Blog'); +@define('IMPORT_SELECT', 'Sélectionnez le logiciel dont vous voulez importer les billets'); +@define('IMPORT_PLEASE_ENTER', 'Complétez les informations requises ci-dessous'); +@define('IMPORT_NOW', 'Importer maintenant!'); +@define('IMPORT_STARTING', 'Importe les billets...'); +@define('IMPORT_FAILED', 'Importation échouée'); +@define('IMPORT_DONE', 'Importation terminée avec succès'); +@define('IMPORT_WEBLOG_APP', 'Logiciel de Blog'); +@define('EXPORT_FEED', 'Exporter le fil RSS complet'); +@define('STATUS', 'Statut après importation'); +@define('IMPORT_GENERIC_RSS', 'Importation générique de fils RSS'); +@define('ACTIVATE_AUTODISCOVERY', 'Envoyer des traçages aux liens trouvés dans le billet'); +@define('WELCOME_TO_ADMIN', 'Bienvenue dans l\'interface d\'administration de Serendipity'); +@define('PLEASE_ENTER_CREDENTIALS', 'Entrez vos données d\'authentification ci-dessous.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Propulsé par Serendipity %s et PHP %s'); +@define('INSTALL_USEGZIP', 'Utiliser la compression gzip des pages'); +@define('INSTALL_USEGZIP_DESC', 'Pour augmenter la vitesse de transfert des pages, Serendipity peut comprimer les pages envoyées au navigateur du visiteur (si le navigateur peut interpréter cette compression). Recommandé.'); +@define('INSTALL_SHOWFUTURE', 'Afficher les billets futurs'); +@define('INSTALL_SHOWFUTURE_DESC', 'Si cette option est activée, les billets à paraître seront affichés dans votre blog. Par défaut, ces billets ne seront affichés qu\'à la date de publication définie.'); +@define('INSTALL_DBPERSISTENT', 'Utiliser les connexions permanentes'); +@define('INSTALL_DBPERSISTENT_DESC', 'Active l\'utilisation de connexions permanentes à la base de données. Pour plus d\'informations, consultez le manuel de PHP. Non recommandé en règle générale.'); +@define('NO_IMAGES_FOUND', 'Pas d\'images trouvées'); +@define('PERSONAL_SETTINGS', 'Réglages personnels'); +@define('REFERER', 'Page référante'); +@define('NOT_FOUND', 'Non trouvé'); +@define('NOT_WRITABLE', 'Protégé en écriture'); +@define('WRITABLE', 'Accessible en écriture'); +@define('PROBLEM_DIAGNOSTIC', 'À cause d\'erreurs survenues lors de l\'analyse préventive, vous ne pourrez continuer l\'installation qu\'après avoir corrigé les erreurs mentionnées ci-dessus.'); +@define('SELECT_INSTALLATION_TYPE', 'Choisissez le type d\'installation que vous voulez utiliser'); +@define('WELCOME_TO_INSTALLATION', 'Bienvenue dans l\'assistant d\'installation de Serendipity'); +@define('FIRST_WE_TAKE_A_LOOK', 'Tout d\'abord, nous allons faire une analyse préventive de votre installation et essayer de diagnostiquer d\'éventuels problèmes de compatibilité.'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Les erreurs sont affichées en %s, les recommandations en %s et les succès en %s'); +@define('RED', 'rouge'); +@define('YELLOW', 'jaune'); +@define('GREEN', 'vert'); +@define('PRE_INSTALLATION_REPORT', 'Rapport pré-installation de Serendipity v%s'); +@define('RECOMMENDED', 'Recommandé'); +@define('ACTUAL', 'Actuel'); +@define('PHPINI_CONFIGURATION', 'configuration php.ini'); +@define('PHP_INSTALLATION', 'Installation PHP'); +@define('THEY_DO', 'ils font'); +@define('THEY_DONT', 'ils ne font pas'); +@define('SIMPLE_INSTALLATION', 'Installation rapide'); +@define('EXPERT_INSTALLATION', 'Installation expert'); +@define('COMPLETE_INSTALLATION', 'Installation complète'); +@define('WONT_INSTALL_DB_AGAIN', 'la base de données ne sera pas réinstallée'); +@define('CHECK_DATABASE_EXISTS', 'Vérifie si la base de données et les tableaux nécessaires sont déjà présents'); +@define('CREATING_PRIMARY_AUTHOR', 'Création de l\'auteur principal \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Définition du style par défaut'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Installation des plugins par défaut'); +@define('SERENDIPITY_INSTALLED', 'Serendipity a été installé avec succès'); +@define('VISIT_BLOG_HERE', 'Accéder à votre nouveau blog'); +@define('THANK_YOU_FOR_CHOOSING', 'Merci d\'avoir choisi Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'Une erreur a été détectée pendant l\'installation'); +@define('OPERATING_SYSTEM', 'Système d\'exploitation'); +@define('WEBSERVER_SAPI', 'SAPI Serveur'); +@define('IMAGE_ROTATE_LEFT', 'Basculer l\'image de 90 degrés vers la droite'); +@define('IMAGE_ROTATE_RIGHT', 'Basculer l\'image de 90 degrés vers la gauche'); +@define('TEMPLATE_SET', '\'%s\' a été défini comme style actif'); +@define('SEARCH_ERROR', 'La fonction de recherche n\'a pas fonctionné comme prévu. Note à l\'administrateur de ce blog: cette erreur peut survenir si des clés d\'index manquent dans la base de données. Avec des systèmes MySQL, l\'utilisateur avec lequel Serendipity se connecte à la base de données doit avoir les privilèges nécessaires pour exécuter la commande suivante:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
. Voici le message d\'erreur complet de la base de données:
%s
'); +@define('EDIT_THIS_CAT', 'Éditer "%s"'); +@define('CATEGORY_REMAINING', 'Effacer cette catégorie et déplacer tous les billets dans cette catégorie'); +@define('CATEGORY_INDEX', 'Voici une liste des catégories disponibles pour vos billets'); +@define('NO_CATEGORIES', 'Pas de catégories'); +@define('RESET_DATE', 'Réinitialiser la date'); +@define('RESET_DATE_DESC', 'Cliquez ici pour remettre la date à l\'heure actuelle'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Les droits d\'accès peuvent être changés sur la ligne de commande par la commande: `%s` sur le répertoire qui fait défaut, ou en le faisant à l\'aide d\'un programme FTP.'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Attention: les templates du style que vous avez choisi utilisent des fonctions périmées. Vous devriez les mettre à jour si possible.'); +@define('ENTRY_PUBLISHED_FUTURE', 'Cette entrée n\'est pas encore publiée.'); +@define('ENTRIES_BY', 'Entrées par %s'); +@define('PREVIOUS', 'Précédent'); +@define('NEXT', 'Suivant'); +@define('APPROVE', 'Valider'); +@define('DO_MARKUP_DESCRIPTION', 'Transforme les balises dans le texte (smileys, raccourcis via *, /, _, ...). La désactiver préserva tout le code HTML dans le texte.'); +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_is.inc.php b/lang/serendipity_lang_is.inc.php new file mode 100644 index 0000000..46ba192 --- /dev/null +++ b/lang/serendipity_lang_is.inc.php @@ -0,0 +1,668 @@ +Búin.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Villa: Skráin er þegar til á vélinni!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Óþekkt villa hefur komið upp, skrá ekki vistuð. Kannski var stærð skráarinnar meiri heldur en hámarksstærðin sem netjónninn skilgreinir. Hafðu samband við þjónustuaðilann þinn eða breytti php.ini skránni til að leyfa stærri skráarflutninga.'); +@define('GO', 'Go!'); +@define('NEWSIZE', 'Ný stærð: '); +@define('RESIZE_BLAHBLAH', 'Breyta stærð %s

'); +@define('ORIGINAL_SIZE', 'Upprunaleg stærð: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Hér getur þú breytt stærð myndarinnar. Ef þú vilt breyta stærð hennar í réttum hlutföllum, sláðu þá inn eitthvað gildi í annan tveggja reitanna og ýttu á TAB takkann. -- Stærð þeirra verður reiknuð sjálfvirkt svo hlutföllin haldist rétt.

'); +@define('QUICKJUMP_CALENDAR', 'QuickJump dagatal'); +@define('QUICKSEARCH', 'Leita'); +@define('SEARCH_FOR_ENTRY', 'Leita að færslu'); +@define('ARCHIVES', 'Tímavélin'); +@define('BROWSE_ARCHIVES', 'Vafra gamlar færslur eftir mánuðum'); +@define('TOP_REFERRER', 'Topp ávísarar'); +@define('SHOWS_TOP_SITES', 'Sýna toppsíður sem vísuðu á bloggin þín'); +@define('TOP_EXITS', 'Topp útgönguleiðir'); +@define('SHOWS_TOP_EXIT', 'Sýnir helstu útgönguleiðir frá bloggunum þínum'); +@define('SYNDICATION', 'Sjálfvirkni'); +@define('SHOWS_RSS_BLAHBLAH', 'Sýnir RSS tengla'); +@define('ADVERTISES_BLAHBLAH', 'Auglýsir uppruna bloggsins'); +@define('HTML_NUGGET', 'HTML stubbur'); +@define('HOLDS_A_BLAHBLAH', 'Stubbur fyrir HTML í hliðarrammann þinn'); +@define('TITLE_FOR_NUGGET', 'Titill fyrir stubbinn'); +@define('THE_NUGGET', 'Stubbur HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Skráðu RSS fyrir þetta blogg'); +@define('YOU_CHOSE', 'Þú valdir %s'); +@define('IMAGE_ROTATE_LEFT', 'Snúa mynd 90 gráður rangsælis'); +@define('IMAGE_ROTATE_RIGHT', 'Snúa mynd 90 gráður réttsælis'); +@define('IMAGE_SIZE', 'Stærð myndar'); +@define('IMAGE_AS_A_LINK', 'Innsetning myndar'); +@define('POWERED_BY', 'Knúið af'); +@define('TRACKBACKS', 'Tilvísanir'); +@define('TRACKBACK', 'Tilvísun'); +@define('NO_TRACKBACKS', 'Engar tilvísanir'); +@define('TOPICS_OF', 'Fyrirsagnir af'); +@define('VIEW_FULL', 'skoða allt'); +@define('VIEW_TOPICS', 'skoða fyrirsagnir'); +@define('AT', 'sendi klukkan'); +@define('SET_AS_TEMPLATE', 'Setja sem forsnið'); +@define('IN', 'í'); +@define('EXCERPT', 'Útdráttur'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Vísa á færslu'); +@define('LINK_TO_REMOTE_ENTRY', 'Vísa á færslu á öðru kerfi'); +@define('IP_ADDRESS', 'IP-tala'); +@define('USER', 'Notandi'); +@define('THUMBNAIL_USING_OWN', 'Nota %s sem eigið sýnishorn, þar sem hún er þegar svo lítil.'); +@define('THUMBNAIL_FAILED_COPY', 'Vildi nota %s sem eigið sýnishorn, en gat ekki afritað!'); +@define('AUTHOR', 'Höfundur'); +@define('LAST_UPDATED', 'Síðast uppfært'); +@define('TRACKBACK_SPECIFIC', 'URI slóð fyrir tilvísun á þessa færslu'); +@define('DIRECT_LINK', 'Bein slóð á þessa færslu'); +@define('COMMENT_ADDED', 'Athugasemd þinni hefur verið bætt við. '); +@define('COMMENT_ADDED_CLICK', 'Smelltu %shér til að fara%s á athugasemdir, og %shér til að loka%s þessum glugga.'); +@define('COMMENT_NOT_ADDED', 'Gat ekki bætt athugasemd þinni við, því athugasemdir hafa verið gerðar óvirkar fyrir þessa færslu. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Smelltu %shér til að fara%s á athugasemdir, og %shér til að loka%s þessum glugga.'); +@define('COMMENTS_DISABLE', 'Leyfa ekki athugasemdir á þessa færslu'); +@define('COMMENTS_ENABLE', 'Leyfa athugasemdir á þessu færslu'); +@define('COMMENTS_CLOSED', 'Höfundurinn leyfir ekki athugasemdir á þessa færslu'); +@define('EMPTY_COMMENT', 'Athugasemdin þín innihélt ekki neitt, svo vinsamlegast %sfarðu til baka%s og reyndu aftur'); +@define('ENTRIES_FOR', 'Færslur fyrir %s'); +@define('DOCUMENT_NOT_FOUND', 'Skjalið %s fannst ekki.'); +@define('USERNAME', 'Notandanafn'); +@define('PASSWORD', 'Lykilorð'); +@define('AUTOMATIC_LOGIN', 'Vista upplýsingar'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity uppsetning'); +@define('LEFT', 'vinstri'); +@define('RIGHT', 'hægri'); +@define('HIDDEN', 'falinn'); +@define('REMOVE_TICKED_PLUGINS', 'Fjarlægja hakaðar viðbætur'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Vista útlitsbreytingar'); +@define('COMMENTS_FROM', 'Athugasemdir frá'); +@define('ERROR', 'Villa'); +@define('ENTRY_SAVED', 'Færslan þín hefur verið vistuð'); +@define('DELETE_SURE', 'Ertu viss um að þú viljir eyða #%s endanlega?'); +@define('NOT_REALLY', 'Nei, eiginlega ekki...'); +@define('DUMP_IT', 'Fleygðu þessu!'); +@define('RIP_ENTRY', 'Hvíldu í friði, færsla #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Flokki #%s eytt. Færslur færðar í flokk #%s'); +@define('CATEGORY_DELETED', 'Flokki #%s eytt.'); +@define('INVALID_CATEGORY', 'Enginn flokkur var valinn til eyðingar'); +@define('CATEGORY_SAVED', 'Flokkur vistaður'); +@define('SELECT_TEMPLATE', 'Veldu forsniðið sem þú vilt nota fyrir bloggið þitt'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Viðbót færsla tókst ekki!'); +@define('MT_DATA_FILE', 'Movable Type gagnaskrá'); +@define('FORCE', 'Þvinga'); +@define('CREATE_AUTHOR', 'Búa til höfund \'%s\'.'); +@define('CREATE_CATEGORY', 'Búa til flokk \'%s\'.'); +@define('MYSQL_REQUIRED', 'Þú verður að hafa MySQL viðbótina til að gera þetta.'); +@define('COULDNT_CONNECT', 'Gat ekki tengst MySQL gagnagrunni: %s.'); +@define('COULDNT_SELECT_DB', 'Gat ekki valið gagnagrunn: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Gat ekki valið notandaupplýsingar: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Gat ekki valið flokksupplýsingar: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Gat ekki valið færsluupplýsingar: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Gat ekki valið athugasemdaupplýsingar: %s.'); +@define('YES', 'Já'); +@define('NO', 'Nei'); +@define('USE_DEFAULT', 'Sjálfgefið'); +@define('CHECK_N_SAVE', 'Prófa & vista'); +@define('DIRECTORY_WRITE_ERROR', 'Get ekki skrifað í möppu %s. Athugaðu eiginleika hennar.'); +@define('DIRECTORY_CREATE_ERROR', 'Mappan %s er ekki til og gat ekki búið hana til. Vinsamlegast búðu hana til handvirkt'); +@define('DIRECTORY_RUN_CMD', ' -> keyra %s %s'); +@define('CANT_EXECUTE_BINARY', 'Get ekki keyrt %s skrána'); +@define('FILE_WRITE_ERROR', 'Gat ekki skrifað í skrá %s.'); +@define('FILE_CREATE_YOURSELF', 'Vinsamlegast búðu skrána til sjálfur eða athugaðu eiginleika'); +@define('COPY_CODE_BELOW', '
* Vistaðu bara kóðann fyrir neðan og settu hann í %s í %s möppunni:
%s
' . "\n"); +@define('WWW_USER', 'Breyttu www í notandann sem að apache keyrir sem (t.d. nobody).'); +@define('BROWSER_RELOAD', 'Þegar þú ert búinn að því, uppfærðu þá síðunna með "reload/refresh" takkanum.'); +@define('DIAGNOSTIC_ERROR', 'Við urðum vör við einhverjar villur þegar við keyrðum greiningar á upplýsingunum sem þú gafst:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity er ekki uppsett. Vinsamlegast settu það upp núna.'); +@define('INCLUDE_ERROR', 'serendipity villa: gat ekki innlimað %s - hætti.'); +@define('DATABASE_ERROR', 'serendipity villa: gat ekki tengst gagnagrunni - hætti.'); +@define('CREATE_DATABASE', 'Geri sjálfgefnu uppsetninguna á gagnagrunninum...'); +@define('ATTEMPT_WRITE_FILE', 'Reyni að skrifa %s skrána...'); +@define('WRITTEN_N_SAVED', 'Stillingar skrifaðar & vistaðar'); +@define('IMAGE_ALIGNMENT', 'Staðsetning myndar'); +@define('ENTER_NEW_NAME', 'Sláðu inn nýtt nafn fyrir: '); +@define('RESIZING', 'Breyti stærð'); +@define('RESIZE_DONE', 'Búin (breytti stærð %s mynda).'); +@define('SYNCING', 'Samhæfi gagnagrunn við myndamöppu'); +@define('SYNC_DONE', 'Búin (Samhæfði %s myndir).'); +@define('FILE_NOT_FOUND', 'Fann ekki skrána %s, kannski er þegar búið að eyða henni?'); +@define('ABORT_NOW', 'Hætta við núna'); +@define('REMOTE_FILE_NOT_FOUND', 'Skráin fannst ekki á endaþjóninum. Ertu viss um að slóðin: %s sé rétt?'); +@define('FILE_FETCHED', '%s sótt sem %s'); +@define('FILE_UPLOADED', 'Skrá %s vistuð sem %s'); +@define('WORD_OR', 'Eða'); +@define('SCALING_IMAGE', 'Breyti stærð %s í %s x %s px'); +@define('KEEP_PROPORTIONS', 'Halda hlutföllum'); +@define('REALLY_SCALE_IMAGE', 'Ertu viss að þú viljir breyta stærð myndarinnar? Það er ekki hægt að breyta til baka!'); +@define('TOGGLE_ALL', 'Virkja stækka allt'); +@define('TOGGLE_OPTION', 'Virkja valmöguleika'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Gerast áskrifandi að þessari færslu'); +@define('UNSUBSCRIBE_OK', "%s hefur nú verið afskráður frá þessari færslu"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Ný athugasemd á færslu í áskrift "%s"'); +@define('SUBSCRIPTION_MAIL', "Halló %s,\n\nNý athugasemd hefur verið gerð á færslu sem þú ert að fylgjast með á \"%s\", kölluð \"%s\"\nNafn sendanda er: %s\n\nÞú getur fundið færsluna hér: %s\n\nÞú getur hætt við áskrift með því að smella á þennan hlekk: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Halló %s,\n\nNýrri tilvísun var bætt við færsluna sem þú ert að fylgjast með á \"%s\", kölluð \"%s\"\nNafn sendanda er: %s\n\nÞú getur fundið færsluna hér: %s\n\nÞú getur hætt við áskrift með því að smella á þennan hlekk: %s\n"); +@define('SIGNATURE', "\n-- \n%s er knúið af Serendipity.\nBesta bloggkerfi sem til er, og þú getur notað það líka.\nKíktu á til að komast að því hvernig."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 straumur'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 straumur'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 straumur'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 athugasemdir'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 straumur'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Svæði "manageEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Svæði "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Mynd fyrir RSS strauminn'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Breidd myndar'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Hæð myndar'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'Netfang vefstjóra, ef það er fyrir hendi. (tómt: falið) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'Netfang umsjónaraðila, ef það er fyrir hendi. (tómt: falið) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'Slóð (URL) myndar í GIF/JPEG/PNG sniði, ef fyrir hendi. (tómt: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'í pixelum, hámark 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'í pixelum, hámark 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Svæði "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Sá tími sem bloggið ætti ekki lengur að vera vistað af öðrum framandi síðum/forritum (tómt: falið) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Svæði "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Ætti "pubDate"-svæðið að vera innbyggt fyrir RSS-rás, til að sýna dagsetningu síðustu færslu?'); +@define('CONTENT', 'Innihald'); +@define('TYPE', 'Tegund'); +@define('DRAFT', 'Drög'); +@define('PUBLISH', 'Birta'); +@define('PREVIEW', 'Skoða'); +@define('DATE', 'Dagsetning'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Varúð: Dagsetningin sem þú skilgreindir var ólögleg. Hún verður að vera gefin í ÁÁÁÁ-MM-DD KK:MM sniði.'); +@define('CATEGORY_PLUGIN_DESC', 'Sýnir listann af flokkum.'); +@define('ALL_AUTHORS', 'Allir höfundar'); +@define('CATEGORIES_TO_FETCH', 'Flokkar til að sækja'); +@define('CATEGORIES_TO_FETCH_DESC', 'Sækja flokka frá hvaða höfundi?'); +@define('PAGE_BROWSE_ENTRIES', 'Blaðsíða %s af %s, með samtals %s færslur'); +@define('PREVIOUS_PAGE', 'fyrri síða'); +@define('NEXT_PAGE', 'næsta síða'); +@define('ALL_CATEGORIES', 'Allir flokkar'); +@define('DO_MARKUP', 'Gera breytingar á texta'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Dagsetningarsnið'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Snið alvöru dagsetningar færslunnar, sem notar strftime() breytu PHP. (Sjálfgefið: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Gat ekki opnað forsniðsskrá, vinsamlegast uppfærðu Serendipity!'); +@define('ADVANCED_OPTIONS', 'Þróaðir möguleikar'); +@define('EDIT_ENTRY', 'Breyta færslu'); +@define('HTACCESS_ERROR', 'Til að athuga uppsetninguna á staðbundna vefþjóninum þarf serendipity að geta skrifað í skrána ".htaccess". Þetta var ekki hægt vegna leyfisstillinga. Vinsamlegast breyttu leyfum skráarinnar svona:
  %s
og endurhladdu þessari síðu.'); +@define('SIDEBAR_PLUGINS', 'Viðbætur hliðarramma'); +@define('EVENT_PLUGINS', 'Viðbætur atburða'); +@define('SORT_ORDER', 'Röðunarregla'); +@define('SORT_ORDER_NAME', 'Skráarnafn'); +@define('SORT_ORDER_EXTENSION', 'Skráarending'); +@define('SORT_ORDER_SIZE', 'Skráarstærð'); +@define('SORT_ORDER_WIDTH', 'Breidd myndar'); +@define('SORT_ORDER_HEIGHT', 'Hæð myndar'); +@define('SORT_ORDER_DATE', 'Dagsetning vistunar'); +@define('SORT_ORDER_ASC', 'Upp á við'); +@define('SORT_ORDER_DESC', 'Niður á við'); +@define('THUMBNAIL_SHORT', 'Sýnishorni'); +@define('ORIGINAL_SHORT', 'Upphafl.'); +@define('APPLY_MARKUP_TO', 'Virkja textabreytingar á %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Upphaf vikunnar'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity hefur tekið eftir að stillingarnar þínar eru uppsettar fyrir útgáfu %s, en þetta serindipity er af útgáfu %s. Serendipity á þó að vera af útgáfu %s, svo þú þarft að uppfæra! Smelltu hér'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Góðan dag, og velkomin í uppfærsluforrit Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Ég er hér til að hjálpa þér að uppfæra Serendipity %s uppsetninguna þína.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Þú sérð þessi skilaboð vegna þess að þú hefur sett upp Serendipity %s, en þú hefur ekki uppfært gagnagrunnsuppsetninguna til að passa við þessa útgáfu'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Uppfærslur gagnagrunns (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Ég fann eftirfarandi .sql skrár sem þarf að keyra áður en þú getur haldið áfram með venjulega keyrslu á Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Aðgerðir bundar við þessa útgáfu'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Engar aðgerðir bundar við þessa útgáfu fundust'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Viltu að ég framkvæmi ofangreindar aðgerðir?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Nei, ég mun gera þær handvirkt'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Já takk, gerðu það'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Það virðist sem svo að þú þurfir ekki að keyra neinar uppfærslur'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Uppfærslu lokið'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Þú hefur hundsað uppfærslustig Serendipity. Vinsamlegast gakktu úr skugga um að gagnagrunnurinn sé rétt uppsettur, og fyrirætluð virkni sé í gangi'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Serendipity uppsetningin þín hefur nú verið uppfærð í útgáfu %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Þú getur farið aftur á bloggið þitt með því að smella %shér%s'); +@define('MANAGE_USERS', 'Sýsla með notendur'); +@define('CREATE_NEW_USER', 'Búa til nýjan notanda'); +@define('CREATE_NOT_AUTHORIZED', 'Þú getur ekki breytt notendum á með sama stjórnstig og þú'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Þú getur ekki búið til notendur með hærra stjórnstig en þú'); +@define('CREATED_USER', 'Nýr notandi %s hefur verið búinn til'); +@define('MODIFIED_USER', 'Eiginleikum notanda %s hefur verið breytt'); +@define('USER_LEVEL', 'Stjórnstig'); +@define('DELETE_USER', 'Þú ert að fara að eyða notanda #%d %s. Ertu viss? Þá verður ekki hægt að sýna færslur eftir hann á síðunni.'); +@define('DELETED_USER', 'Notanda #%d %s eytt.'); +@define('LIMIT_TO_NUMBER', 'Hversu margar færslur skal sýna?'); +@define('ENTRIES_PER_PAGE', 'færslur á síðu'); +@define('XML_IMAGE_TO_DISPLAY', 'XML takki'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Hlekkir á XML strauma verða sýnd með þessari mynd. Skildu eftir tómt fyrir sjálfgefið gildi, eða sláðu inn \'none\' til að óvirkja.'); + +@define('DIRECTORIES_AVAILABLE', 'Í listanum af mögulegum undirmöppum geturðu smellt á hvaða möppu sem er til að búa til nýja möppu innan hennar.'); +@define('ALL_DIRECTORIES', 'allar möppur'); +@define('MANAGE_DIRECTORIES', 'Sýsla með möppur'); +@define('DIRECTORY_CREATED', 'Mappan %s hefur verið búin til.'); +@define('PARENT_DIRECTORY', 'Yfirmappa'); +@define('CONFIRM_DELETE_DIRECTORY', 'Ertu viss um að þú viljir fjarlægja allt innihald möppunnar %s?'); +@define('ERROR_NO_DIRECTORY', 'Villa: Mappan %s er ekki til'); +@define('CHECKING_DIRECTORY', 'Athuga skrár í möppu %s'); +@define('DELETING_FILE', 'Eyði skrá %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Gat ekki fjarlægt möppuna sem var ekki tóm. Athugaðu "þvinga eyðslu" hakið ef þú vilt fjarlægja þessar skrár líka, og reyndi svo aftur. Skrár sem enn eru til:'); +@define('DIRECTORY_DELETE_FAILED', 'Eyðsla möppu %s gekk ekki. Athugaðu réttindi eða skilaboð að ofan.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Mappa Directory %s successfully deleted.'); +@define('SKIPPING_FILE_EXTENSION', 'Sleppi skrá: Vantar ending á %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Sleppi skrá: %s ekki læsileg.'); +@define('FOUND_FILE', 'Fann nýja/breytta skrá: %s.'); +@define('ALREADY_SUBCATEGORY', '%s er þegar undirmappa %s.'); +@define('PARENT_CATEGORY', 'Yfirflokkur'); +@define('IN_REPLY_TO', 'Sem svar við'); +@define('TOP_LEVEL', 'Toppstig'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s straumur'); +@define('PERMISSIONS', 'Réttindi'); +@define('SETTINGS_SAVED_AT', 'Nýju stillingarnar voru vistaðar klukkan %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Stillingar gagnagrunns'); +@define('INSTALL_CAT_DB_DESC', 'Hér getur þú slegið inn allar upplýsingar um gagnagrunninn. Serendipity þarf þetta til að geta virkað'); +@define('INSTALL_DBTYPE', 'Tegund gagnagrunns'); +@define('INSTALL_DBTYPE_DESC', 'Tegund gagnagrunns'); +@define('INSTALL_DBHOST', 'Vélarnafn (host) gagnagrunns'); +@define('INSTALL_DBHOST_DESC', 'Vélarnafnið á gagnagrunninum þínum'); +@define('INSTALL_DBUSER', 'Notandi gagnagrunns'); +@define('INSTALL_DBUSER_DESC', 'Notandanafnið sem notað verður til að tengjast gagnagrunninum'); +@define('INSTALL_DBPASS', 'Lykilorð gagnagrunns'); +@define('INSTALL_DBPASS_DESC', 'Lykilorðið sem nota á með notandanafninu að ofan'); +@define('INSTALL_DBNAME', 'Nafn gagnagrunns'); +@define('INSTALL_DBNAME_DESC', 'Nafnið á gagnagrunninum þínum'); +@define('INSTALL_DBPREFIX', 'Fasti á undan færslum í gagnagrunni'); +@define('INSTALL_DBPREFIX_DESC', 'Fasti fyrir nöfn í töflum, t.d. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Slóðir'); +@define('INSTALL_CAT_PATHS_DESC', 'Nokkrar slóðir á mikilvægar möppur og skrár. Ekki gleyma skástrikinu á eftir möppunöfnum (mappa/)!'); +@define('INSTALL_FULLPATH', 'Full slóð'); +@define('INSTALL_FULLPATH_DESC', 'Full og algjör slóð á serendipity uppsetninguna þína'); +@define('INSTALL_UPLOADPATH', 'Vistunarslóð'); +@define('INSTALL_UPLOADPATH_DESC', 'All sem er vistað mun fara hingað, m.t.t. fulla slóð - vanalega \'uploads\''); +@define('INSTALL_RELPATH', 'Hlutfallsleg slóð'); +@define('INSTALL_RELPATH_DESC', 'Slóðin á serendipity fyrir vafrann þinn, vanalega \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Hlutfallsleg slóð á forsnið'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Slóðin á möppuna sem inniheldur forsniðin þín - m.t.t. til \'hlutfallslega slóð\''); +@define('INSTALL_RELUPLOADPATH', 'Hlutfallsleg vistunarslóð'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Slóðin á vistaðar skrár fyrir vafra - m.t.t. \'hlutfallslegar slóðar\''); +@define('INSTALL_URL', 'Slóð (URL) á bloggið þitt'); +@define('INSTALL_URL_DESC', 'Grunnslóðin (Base URL) á serendipity uppsetninguna þína'); +@define('INSTALL_INDEXFILE', 'Index skrá'); +@define('INSTALL_INDEXFILE_DESC', 'Nafnið á serendipity index skránni þinni'); + +/* GENERAL SETTINGS */ +@define('INSTALL_CAT_SETTINGS', 'Almennar stillingar'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Veldu hvernig Serendipity hagar sér'); +@define('INSTALL_USERNAME', 'Notandanafn umsjónarmanns'); +@define('INSTALL_USERNAME_DESC', 'Notandanafn fyrir innskráningu umsjónarmanns'); +@define('INSTALL_PASSWORD', 'Lykilorð umsjónarmanns'); +@define('INSTALL_PASSWORD_DESC', 'Lykilorð fyrir innskráningu umsjónarmanns'); +@define('INSTALL_EMAIL', 'Netfang umsjónarmanns'); +@define('INSTALL_EMAIL_DESC', 'Netfang umsjónarmanns bloggsins'); +@define('INSTALL_SENDMAIL', 'Senda póst á umsjónarmann?'); +@define('INSTALL_SENDMAIL_DESC', 'Viltu fá sendan póst þegar athugasemdir eru sendar á færslurnar þínar?'); +@define('INSTALL_SUBSCRIBE', 'Leyfa notendum að gerast áskrifendur að færslum?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Leyfir notendum að gerast áskrifendur að færslu, og fá þar með póst þegar nýjar athugasemdir eru gerðar á þá færslu'); +@define('INSTALL_BLOGNAME', 'Nafn bloggs'); +@define('INSTALL_BLOGNAME_DESC', 'Fyrirsögnin á blogginu þínu'); +@define('INSTALL_BLOGDESC', 'Lýsing bloggs'); +@define('INSTALL_BLOGDESC_DESC', 'Lýsing á blogginu þínu'); +@define('INSTALL_LANG', 'Tungumál'); +@define('INSTALL_LANG_DESC', 'Veldu tungumálið sem vera skal á blogginu þínu'); + +/* APPEARANCE AND OPTIONS */ +@define('INSTALL_CAT_DISPLAY', 'Útlit og valmöguleikar'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Stilltu tilfinningu og útlit Serendipity út á við'); +@define('INSTALL_WYSIWYG', 'Nota WYSIWYG ritilinn'); +@define('INSTALL_WYSIWYG_DESC', 'Viltu nota WYSIWYG ritilinn? (Virkar á IE5+, og að hluta til í Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Neyða XHTML 1.1 fylgni'); +@define('INSTALL_XHTML11_DESC', 'Viltu neyða XHTML 1.1 fylgni (getur valdið vandræðum fyrir bak- eða framvinnslu fyrir eldri fjórðukynslóðar vafra)'); +@define('INSTALL_POPUP', 'Virkja notkun innskotsglugga'); +@define('INSTALL_POPUP_DESC', 'Viltu nota innskotsglugga (popup) fyrir athugasemdir, tilvísanir, o.fl.?'); +@define('INSTALL_EMBED', 'Er Serendipity innifalin?'); +@define('INSTALL_EMBED_DESC', 'Ef þú vilt innifela serendipity á annarri síðu, stilltu þá á "true" að henda öllum hausum, og prenta bara innihaldið. Þú getur nýtt indexFile valmöguleikann til að nota "wrapper class" þar sem þú setur venjulega vefsíðuhausa. Sjá README skrá fyrir meiri upplýsingar.'); +@define('INSTALL_TOP_AS_LINKS', 'Sýna topp útgönguleiðir/ávísara sem tengla?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"nei": Útgönguleiðir og ávísarar eru sýnd sem venjulegur texti til að verjast google rusli. "já": Útgönguleiðir og ávísarar eru sýndir sem tenglar. "sjálfgefið": Nota stillingu úr almennum stillingum (ráðlagt).'); +@define('INSTALL_BLOCKREF', 'Óleyfðir ávísarar'); +@define('INSTALL_BLOCKREF_DESC', 'Eru einhverjar sérstakar vélar sem þú vilt ekki láta sjást í ávísaralistanum? Aðskildu lista vélanafna með \';\' og hafðu í huga að vélarnafninu er sleppt með "substring matches"!'); +@define('INSTALL_REWRITE', 'Endurskrifun slóða (URL)'); +@define('INSTALL_REWRITE_DESC', 'Veldu hvaða reglur þú vilt nota til að endurskrifa slóðir (URL). Að hafa þetta virkt mun gera slóðir á bloggið þitt fallegar og einfaldar, og gera auðveldara fyrir vefköngulær (s.s. google) að gera efnisyfirlit á síðuna). Vefþjónninn þarf að styðja annaðhvort mod_rewrite eða "AllowOverride All" fyrir serendipity möppuna þína. Sjjálfgefna stillingin er að skynja það sjálfkrafa.'); + +/* IMAGECONVERSION SETTINGS */ +@define('INSTALL_CAT_IMAGECONV', 'Myndbreytingastillingar:'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Skráðu inn almennar upplýsingar um hvernig serendipity ætti að sjá um myndir'); +@define('INSTALL_IMAGEMAGICK', 'Nota Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Ertu með imagemagick uppsett og vilt nota það til að breyta stærð mynda?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Slóð á forritið'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Full slóð og nafnið á imagemagick myndvinnsuforritinu'); +@define('INSTALL_THUMBSUFFIX', 'Viðskeyti sýnishorna'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Sýnishorn verða nefnd eftir eftirfarandi forsniði: upprunalegt.[viðskeyti].end'); +@define('INSTALL_THUMBWIDTH', 'Stærð sýnishorna'); +@define('INSTALL_THUMBWIDTH_DESC', 'Staðlað hágildi breiddar framkallaðra sýnishorna'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Persónulegu upplýsingar þínar'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Breyta persónulegu upplýsingum þínum'); +@define('USERCONF_USERNAME', 'Notandanafn þitt'); +@define('USERCONF_USERNAME_DESC', 'Notandanafnið sem þú notar til að skrá þig inn á bloggið'); +@define('USERCONF_PASSWORD', 'Lykilorðið þitt'); +@define('USERCONF_PASSWORD_DESC', 'Lykilorðið sem þú notar til að skrá þigg inn á bloggið'); +@define('USERCONF_EMAIL', 'Netfangið þitt'); +@define('USERCONF_EMAIL_DESC', 'Persónulega netfangið þitt'); +@define('USERCONF_SENDCOMMENTS', 'Senda tilkynningar v/athugasemda?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Viltu fá sendan póst þegar athugasemdir eru sendar á færslurnar þínar?'); +@define('USERCONF_SENDTRACKBACKS', 'Senda tilkynningar v/tilvísana?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Viltu fá sendan póst þegar tilvísanir eru gerðar á færslurnar þínar?'); +@define('USERCONF_ALLOWPUBLISH', 'Réttindi: Birta færslur?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Má þessi notandi birta færslur?'); +@define('SUCCESS', 'Árangur'); +@define('POWERED_BY_SHOW_TEXT', 'Sýna "Serendipity" sem texa'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Mun birta "Serendipity Weblog" sem texta'); +@define('POWERED_BY_SHOW_IMAGE', 'Sýna "Serendipity" með merki'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Sýnir merki Serendipity'); +@define('PLUGIN_ITEM_DISPLAY', 'Hvar ætti merkið að vera sýnt?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Opna bara færslu'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Yfirsýn yfir bara blaðsíðu'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Öllum stundum'); +@define('RSS_IMPORT_CATEGORY', 'Nota þennan flokk fyrir færslur sem passa ekki í neinn flokk'); + +@define('COMMENTS_WILL_BE_MODERATED', 'Innsendar athugasemdir þurfa að fá samþykki áður en þær verða birtar.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Þú hefur eftirfarandi valmöguleika fyrir hendi:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Athuga: Þessi athugasemd þarf samþykki áður en hún verður birt'); +@define('DELETE_COMMENT', 'Eyða athugasemd'); +@define('APPROVE_COMMENT', 'Samþykkja athugasemd'); +@define('REQUIRES_REVIEW', 'Þarf yfirlesningu'); +@define('COMMENT_APPROVED', 'Athugasemd #%s hefur verið samþykkt'); +@define('COMMENT_DELETED', 'Athugasemd #%s hefur verið eytt'); +@define('COMMENTS_MODERATE', 'Athugasemdir & tilvísanir á þessa færslu þurfa samþykki'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Athuga: Þessi tilvísun þarf samþykki áður en hún verður birt'); +@define('DELETE_TRACKBACK', 'Eyða tilvísun'); +@define('APPROVE_TRACKBACK', 'Samþykkja tilvísun'); +@define('TRACKBACK_APPROVED', 'Tilvísun #%s hefur verið samþykkt'); +@define('TRACKBACK_DELETED', 'Tilvísun #%s hefur verið eytt'); +@define('VIEW', 'Skoða'); +@define('COMMENT_ALREADY_APPROVED', 'Athugasemd #%s virðist þegar hafa verið samþykkt'); +@define('COMMENT_EDITED', 'Athugasemdinni hefur verið breytt'); +@define('HIDE', 'Fela'); +@define('VIEW_EXTENDED_ENTRY', 'Halda áfram að lesa "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Það er ekki ætlast til þess að smellt sé á þennan hlekk. Hann inniheldur tilvísunar URIs lóðina fyrir þessa færslu. Þú getur notað þetta URI til að senda ping- & tilvísanir frá eigin bloggi á þessa færslu. Til að afrita þennan hlekk, hægrismelltu þá á hlekkinn og veldu "Copy Shortcut" í Internet Explorer, og "Copy Link Location" í Mozilla.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Nota https fyrir innskráningu'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Lætur innskráningarhlekkinn vísa á https slóð. Vefþjónninn þinn þarf að styðja þetta!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Láta vera hægt að smellta á utanaðkomandi hlekki?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"nei": Óskoðaðir hlekkir út á við (Topp útgönguleiðir, ávísarar, athugasemdir notenda) eru sýndar/ekki sýndar sem venjulegur texti þegar á við til að koma í veg fyrir google ruslsendingar (ráðlagt). "já": Óskoðaðir hlekkir út á við eru sýndir sem hlekkir. Getur verið breytt með æðra valdi innan hliðarramma stillingum!'); +@define('PAGE_BROWSE_COMMENTS', 'Blaðsíða %s af %s, með %s athugasemdir'); +@define('FILTERS', 'Síur'); +@define('FIND_ENTRIES', 'Finna færslur'); +@define('FIND_COMMENTS', 'Finna athugasemdir'); +@define('FIND_MEDIA', 'Finna gögn'); +@define('FILTER_DIRECTORY', 'Möppum'); +@define('SORT_BY', 'Raða eftir'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Engin tilvísun send: Náði ekki sambandi við %s á porti %d'); +@define('MEDIA', 'Gögn'); +@define('MEDIA_LIBRARY', 'Gagnasafni'); +@define('ADD_MEDIA', 'Bæta við gögnum'); +@define('ENTER_MEDIA_URL', 'Sláðu inn slóð skráarinnar til að sækja:'); +@define('ENTER_MEDIA_UPLOAD', 'Veldu skrána sem þú vilt vista:'); +@define('SAVE_FILE_AS', 'Vista skrá sem:'); +@define('STORE_IN_DIRECTORY', 'Vista innan eftirfarandi möppu: '); +@define('ADD_MEDIA_BLAHBLAH', 'Bæta við skrá í gagnageymsluna þína:

Hér geturðu vistað gagnaskrár, eða sagt mér að sækja þær einhversstaðar annarsstaðar frá af vefnum! Ef þú ert ekki með mynd við hæfi, leitaðu að myndum á google sem á við það sem þú ert að hugsa. Niðurstöðurnar eru oft nytsamlegar og fyndnar :)

Veldu leið:
'); +@define('MEDIA_RENAME', 'Endurnefna skrána'); +@define('IMAGE_RESIZE', 'Breyta stærð myndarinnar'); +@define('MEDIA_DELETE', 'Eyða þessari skrá'); +@define('FILES_PER_PAGE', 'Skrár á síðu'); +@define('CLICK_FILE_TO_INSERT', 'Smelltu á skrána sem þú vilt bæta við:'); +@define('SELECT_FILE', 'Veldu skrána til að bæta við'); +@define('MEDIA_FULLSIZE', 'Fylla skjáinn'); +@define('CALENDAR_BOW_DESC', 'Dagur vikunnar sem er tekinn sem byrjunardagur vikunnar. Sjálfgefið gildi er mánudagur'); +@define('SUPERUSER', 'Umsjón vefkerfis'); +@define('ALLOWS_YOU_BLAHBLAH', 'Gerir hlekk í hliðarramma bloggkerfisins sem vísar á umsjónarkerfið'); +@define('CALENDAR', 'Dagatal'); +@define('SUPERUSER_OPEN_ADMIN', 'Opna umsjónarkerfi'); +@define('SUPERUSER_OPEN_LOGIN', 'Opna innskráningarsíðu'); +@define('INVERT_SELECTIONS', 'Skipta út völdu fyrir óvalið'); +@define('COMMENTS_DELETE_CONFIRM', 'Ertu viss um að þú viljir eyða völdum athugasemdum?'); +@define('COMMENT_DELETE_CONFIRM', 'Ertu viss um að þú viljir eyða athugasemd #%d, skrifaðri af %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Eyða völdum athugasemdum'); +@define('VIEW_COMMENT', 'Skoða athugasemd'); +@define('VIEW_ENTRY', 'Skoða færslu'); +@define('DELETE_FILE_FAIL' , 'Gat ekki eytt skrá %s'); +@define('DELETE_THUMBNAIL', 'Eyddi sýnishorni myndar nefnt %s'); +@define('DELETE_FILE', 'Eyddi skrá nenfdri %s'); +@define('ABOUT_TO_DELETE_FILE', 'Þú ert að far aað eyða %s
Ef þú ert að nota þessa skrá í einhverri af færslunum þínum, mun það valda dauðum hlekkjum eða óvirkum myndum
Ertu viss um að þú viljir halda áfram?

'); +@define('TRACKBACK_SENDING', 'Sendi tilvísun á URI slóð %s...'); +@define('TRACKBACK_SENT', 'Tilvísun tókst'); +@define('TRACKBACK_FAILED', 'Tilvísun tókst ekki: %s'); +@define('TRACKBACK_NOT_FOUND', 'Engin URI-tilvísunarslóð fannst.'); +@define('TRACKBACK_URI_MISMATCH', 'URI slóðin sem ég fann út passar ekki við URI slóðina sem við ætluðum að nota.'); +@define('TRACKBACK_CHECKING', 'Athuga %s fyrir mögulegar tilvísanir...'); +@define('TRACKBACK_NO_DATA', 'Viðfang innihélt engin gögn'); +@define('TRACKBACK_SIZE', 'ViðfangsURI-slóð fór fram úr leyfðri stærð, %s bætum.'); +@define('COMMENTS_VIEWMODE_THREADED', 'Þræddan ham'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Flatan ham'); +@define('DISPLAY_COMMENTS_AS', 'Sýna athugasemdir sem'); +@define('COMMENTS_FILTER_SHOW', 'Sýna'); +@define('COMMENTS_FILTER_ALL', 'Allt'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Einungis samþykktar'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Bíða eftir samþykki'); +@define('RSS_IMPORT_BODYONLY', 'Setja allan innfluttan texta í "body" hlutann og ekki skipta í "aukainnihald" hlutann.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Show full articles with extended body inside RSS feed'); +@define('WEEK', 'Vika'); +@define('WEEKS', 'Vikur'); +@define('MONTHS', 'Mánuðir'); +@define('DAYS', 'Dagar'); +@define('ARCHIVE_FREQUENCY', 'Tíðni hlutar í dagatali'); +@define('ARCHIVE_FREQUENCY_DESC', 'Bilið á milli sem nota á í dagatali á milli tveggja hluta á listanum'); +@define('ARCHIVE_COUNT', 'Fjöldi hluta á listanum'); +@define('ARCHIVE_COUNT_DESC', 'Heildarfjöldi mánaða, vika eða daga til að birta'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Að neðan er listi uppsettra viðbóta'); +@define('SIDEBAR_PLUGIN', 'hliðarrammaviðbót'); +@define('EVENT_PLUGIN', 'atburðaviðbót'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Smelltu hér til að setja inn nýja %s %s'); +@define('VERSION', 'útgáfa'); +@define('INSTALL', 'Setja upp'); +@define('ALREADY_INSTALLED', 'Þegar uppsett'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Veldu viðbót til að setja inn'); +@define('INSTALL_OFFSET', 'Frávik frá þjónstíma'); +@define('STICKY_POSTINGS', 'Þrautseigar innsetningar'); +@define('INSTALL_FETCHLIMIT', 'Færslur sem sýna skal á forsíðu'); +@define('INSTALL_FETCHLIMIT_DESC', 'Fjöldi færsla sem sýna skal á hverri síðu'); +@define('IMPORT_ENTRIES', 'Flytja inn gögn'); +@define('EXPORT_ENTRIES', 'Flytja út gögn'); +@define('IMPORT_WELCOME', 'Velkomin(n) í innflutningstól Serendipity'); +@define('IMPORT_WHAT_CAN', 'Hér getur þú flutt inn færslur frá öðrum bloggkerfum'); +@define('IMPORT_SELECT', 'Veldu hugbúnaðinn sem þú vilt flytja inn frá'); +@define('IMPORT_PLEASE_ENTER', 'Vinsamlegast sláðu inn gögnin eins og er farið fram á að neðan'); +@define('IMPORT_NOW', 'Flytja inn núna!'); +@define('IMPORT_STARTING', 'Hef innflutningsferlið...'); +@define('IMPORT_FAILED', 'Innflutningur mistókst'); +@define('IMPORT_DONE', 'Innflutningi lokið'); +@define('IMPORT_WEBLOG_APP', 'Bloggkerfi'); +@define('IMPORT_NOTES', 'Athuga:'); +@define('EXPORT_FEED', 'Flytja út allan RSS straum'); +@define('STATUS', 'Staða eftir innflutning'); +@define('IMPORT_GENERIC_RSS', 'Almennur RSS innflutningur'); +@define('ACTIVATE_AUTODISCOVERY', 'Senda tilvísanir á hlekki sem fyrirfinnast í færslunni'); +@define('WELCOME_TO_ADMIN', 'Velkomin(n) í stjórnborð Serendipity.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Vinsamlegast auðkenndu þig.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Knúið af Serendipity %s og PHP %s'); +@define('INSTALL_USEGZIP', 'Nota gzip til að þjappa síðum'); +@define('INSTALL_USEGZIP_DESC', 'Til að flýta afhendingu síða getum við þjappað gögnunum og sent gestunum, ef vafrinn hans styður það. Við mælum með þessu'); +@define('INSTALL_SHOWFUTURE', 'Sýna framtíðarfærslur'); +@define('INSTALL_SHOWFUTURE_DESC', 'Ef virkt, mun þetta sýna allar færslur sem þú sendir inn í framtíðinni á bloggið. Sjálfgefið er að fela þær þar til að birtingardagsetningin er komin.'); +@define('INSTALL_DBPERSISTENT', 'Viðhalda tengingum?'); +@define('INSTALL_DBPERSISTENT_DESC', 'Virkja notkun langlífra tenginga í gagnagrunn, lesa meira hér. Að jafnaði mælum við ekki með þessu'); +@define('NO_IMAGES_FOUND', 'Engar myndir fundust'); +@define('PERSONAL_SETTINGS', 'Persónulegar stillingar'); +@define('REFERER', 'Ávísari'); +@define('NOT_FOUND', 'Fannst ekki'); +@define('WRITABLE', 'Skrifanlegt'); +@define('NOT_WRITABLE', 'Ekki skrifanlegt'); +@define('PROBLEM_DIAGNOSTIC', 'Vegna vandkvæða í greiningu geturðu ekki haldið áfram fyrr en ofangreindar villur eru lagfærðar'); +@define('SELECT_INSTALLATION_TYPE', 'Veldu hvaða tegund uppsetningar þú vilt nota'); +@define('WELCOME_TO_INSTALLATION', 'Velkomin(n) í uppsetningu Serendipity'); +@define('FIRST_WE_TAKE_A_LOOK', 'Fyrst munum við líta á núverandi uppsetningu og finna út úr hvort einhver samhæfingarvandamál séu til staðar'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Villur eru birtar í %s, meðmæli í %s og árangur í %s'); +@define('RED', 'rauðu'); +@define('YELLOW', 'gulu'); +@define('GREEN', 'grænu'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s for-uppsetningarskýrsla'); +@define('RECOMMENDED', 'Mælt með'); +@define('ACTUAL', 'Raungildi'); +@define('PHPINI_CONFIGURATION', 'php.ini stillingar'); +@define('PHP_INSTALLATION', 'PHP uppsetning'); +@define('THEY_DO', 'þeir/þau gera það'); +@define('THEY_DONT', 'þeir/þau gera það ekki'); +@define('SIMPLE_INSTALLATION', 'Einföld uppsetning'); +@define('EXPERT_INSTALLATION', 'Flókin uppsetning'); +@define('COMPLETE_INSTALLATION', 'Ljúka uppsetningu'); +@define('WONT_INSTALL_DB_AGAIN', 'mun ekki setja upp gagnagrunnin aftur'); +@define('CHECK_DATABASE_EXISTS', 'Er að athuga hvort gagnagrunnur sé þegar til. Ef þú sérð villu í uppflettingu á gagnagrunni, hundsaðu hana...'); +@define('CREATING_PRIMARY_AUTHOR', 'Bý til aðalhöfund \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Set upp sjálfgefið forsnið'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Set upp sjálfgefnar viðbætur'); +@define('SERENDIPITY_INSTALLED', '%sUppsetning Serendipity tókst á kerfinu þínu.%s Vinsamlegast mundu lykilorðið þitt: "%s", og notandanafnið er "%s".%sÞú getur fundið nýja PHP bloggið þitt hér'); +@define('VISIT_BLOG_HERE', 'Heimsæktu nýja bloggið þitt hér'); +@define('THANK_YOU_FOR_CHOOSING', 'Takk fyrir að velja Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'Villa fannst í uppsetningunni'); +@define('OPERATING_SYSTEM', 'Stýrikerfi'); +@define('WEBSERVER_SAPI', 'SAPI vefþjóns'); +@define('TEMPLATE_SET', '\'%s\' hefur verið sett sem virka forsniðið þitt'); +@define('SEARCH_ERROR', 'Leitarfítusinn virkaði ekki eins og við mátti búast. Tilkynning sem berast skal umsjónarmanni bloggsins Þetta getur gerst vegna index lykla í gagnagrunninum sem vantar. Á MySQL kerfum verður gagnagrunnsnotandinn að geta gert eftirfarandi eftirspurn:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
Nákvæm villa sem gagnagrunnurinn skilaði var:
%s
'); +@define('EDIT_THIS_CAT', 'Breyti "%s - %s"'); +@define('CATEGORY_REMAINING', 'Eyða þessum flokki og færa færslur hans í þennan flokk: %s'); +@define('CATEGORY_INDEX', 'Fyrir neðan er listi af flokkum sem þú getur notað í færslurnar þínar'); +@define('NO_CATEGORIES', 'Engir flokkar'); +@define('RESET_DATE', 'Endurstilla dagsetningu'); +@define('RESET_DATE_DESC', 'Smelltu hér til að endurstilla dagsetningu í núverandi tíma'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Réttindi er hægt að stilla með því að keyra skeljarskipunina `%s` á möppuna þar sem þetta mistókst, eða með því að breyta þessu í FTP forriti'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Varúð: Forsniðið sem þú ert með valið er að nota úreldar forsniðsaðferðir. Þú ættir að uppfæra ef þú hefur tök á því'); +@define('ENTRY_PUBLISHED_FUTURE', 'Þessi færsla hefur ekki enn verið birt.'); +@define('ENTRIES_BY', 'Færslur eftir %s'); +@define('PREVIOUS', 'Fyrri'); +@define('NEXT', 'Næsta'); +@define('APPROVE', 'Samþykkja'); +@define('DO_MARKUP_DESCRIPTION', 'Virkja breytinga rá texta út frá ákveðnum táknum (broskarlar, styttri leiðir í gegnum *, /, _, ...). Óvirking á þessu mun varðveita allan HTML-kóða í textanum. Sjálfgefið gildi er "Já".'); +@define('CATEGORY_ALREADY_EXIST', 'Flokkur með nafninu "s" er þegar til'); +@define('ERROR_FILE_FORBIDDEN', 'Þú mátt ekki vista skrár með virkt innihald'); +@define('ADMIN', 'Stjórn:'); +@define('ADMIN_FRONTPAGE', 'Forsíða'); +@define('QUOTE', 'Tilvitnun'); +@define('IFRAME_SAVE', 'Serendipity er nú að vista færsluna þína, búa til tilvísanir og gera mögulegar XML-RPC aðgerðir. Þetta gæti tekið smá stund...'); +@define('IFRAME_SAVE_DRAFT', 'Drög að færslu hafa verið vistuð'); +@define('IFRAME_PREVIEW', 'Serendipity býr nú til sýnishorn af færslunni þinni...'); +@define('IFRAME_WARNING', 'Vafrinn þinn skilur ekki iframes hugtakið. Vinsamlegast opnaði serendipity_config.inc.php skrána þína og stilltu $serendipity[\'use_iframe\'] breytinu á FALSE.'); +@define('NONE', 'engin(n)'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Sjálfgefnar stillingar fyrir nýjar færslur'); +@define('UPGRADE', 'Uppfæra'); +@define('UPGRADE_TO_VERSION', 'Uppfæra í útgáfu %s'); +@define('DELETE_DIRECTORY', 'Eyða þessari möppu'); +@define('DELETE_DIRECTORY_DESC', 'Þú ert að fara að eyða innihaldi möppu sem er með margmiðlunargögn, sem eru mögulega í notkun í sumum færsla þinna.'); +@define('FORCE_DELETE', 'Neyða eyðslu skráa sem eru ekki inni í miðlunargagnagrunninum'); +@define('CREATE_DIRECTORY', 'Búa til möppu'); +@define('CREATE_NEW_DIRECTORY', 'Búa til nýja möppu'); +@define('CREATE_DIRECTORY_DESC', 'Hér geturðu búið til nýja möppu til að setja gögn. Veldu nafn á nýju möppuna þína og veldu möppu til að setja hana í ef við á.'); +@define('BASE_DIRECTORY', 'Grunnmappa'); +@define('USERLEVEL_EDITOR_DESC', 'Venjulegur notandi'); +@define('USERLEVEL_CHIEF_DESC', 'Stjórnandi'); +@define('USERLEVEL_ADMIN_DESC', 'Umsjónarmaður'); +@define('USERCONF_USERLEVEL', 'Réttindastig'); +@define('USERCONF_USERLEVEL_DESC', 'Réttindastig. Ætti að vera eitt af eftirfarandi: [USERLEVEL_ADMIN] - Umsjónarmaður, [USERLEVEL_CHIEF] - Stjórnandi, [USERLEVEL_EDITOR] - Venjulegur notandi.'); +@define('USER_SELF_INFO', 'skráð(ur) inn sem %s, með stjórnstig %s'); +@define('ADMIN_ENTRIES', 'Færslur'); +@define('RECHECK_INSTALLATION', 'Skoða uppsetningu aftur'); +@define('IMAGICK_EXEC_ERROR', 'Gat ekki framkvæmt: "%s", villa: %s, return var: %d'); +@define('INSTALL_OFFSET_DESC', 'Sláðu inn fjölda klukkustunda sem er á milli vefþjónsins þíns og tímasvæðisins sem þú vilt hafa (núverandi: %clock%)'); +@define('UNMET_REQUIREMENTS', 'Óuppfylltar þarfir: %s'); +@define('CHARSET', 'Stafasett (charset)'); +@define('AUTOLANG', 'Nota tungumálastillingar vafra gestsins sem sjálfgefið tungumál'); +@define('AUTOLANG_DESC', 'Ef þetta er virkt mun serendipity nota tungumálið sem stillt er á í vafra viðkomandi gests fyrir viðmótið (og færslur ef við á).'); +@define('INSTALL_AUTODETECT_URL', 'Skynja sjálfvirkt HTTP-Host'); +@define('INSTALL_AUTODETECT_URL_DESC', 'Ef þetta er stillt á "true" mun Serendipity sjá til þess að HTTP Host nafnið sem var notað sé notað sem BaseURL stilling. Að virkja þetta mun gera þér kleift að nota mörg mismunandi vélarnöfn fyrir Serendipity bloggið þitt, og nota það vélarnafn fyrir alla tengla fyrir alla tengla eftir það sem eru notaðir til að vafra um bloggið þitt.'); +@define('CONVERT_HTMLENTITIES', 'Reyna að Try to breyta HTML færslum sjálfkrafa?'); +@define('EMPTY_SETTING', 'Þú skilgreindir ekki löglegt gildi fyrir "%s"!'); +@define('USERCONF_REALNAME', 'Nafn'); +@define('USERCONF_REALNAME_DESC', 'Fullt nafn höfundar. Þetta er nafnið eins og lesendur sjá það'); +@define('HOTLINK_DONE', 'Skrá hotlinkuð.
Búin.'); +@define('ENTER_MEDIA_URL_METHOD', 'Sóknaraðferð:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Athuga: Ef þú vilt hotlinka á þjón, gakktu úr skuggu um að þú hafir réttindi á viðkomandi vefsíðu, eða að þú eigir vefsíðuna. Hotlink leyfir þér að nota myndir sem eru ekki á þínum vefþjóni án þess að vista þær á þjóninum.'); +@define('MEDIA_HOTLINKED', 'hotlinkað'); +@define('FETCH_METHOD_IMAGE', 'Sækja mynd á þjóninn þinn'); +@define('FETCH_METHOD_HOTLINK', 'Hotlinka á þjón'); +@define('DELETE_HOTLINK_FILE', 'Eyddi hotlinkaðri skrá, nefnd %s'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Sýna netföng?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_it.inc.php b/lang/serendipity_lang_it.inc.php new file mode 100644 index 0000000..1a1fc86 --- /dev/null +++ b/lang/serendipity_lang_it.inc.php @@ -0,0 +1,670 @@ + + +@define('LANG_CHARSET', 'ISO-8859-1'); +@define('DATE_LOCALES', 'italiano, it, it_IT'); +@define('DATE_FORMAT_ENTRY', '%A, %B %e. %Y'); +@define('DATE_FORMAT_SHORT', '%d-%m-%Y %H:%M'); +@define('WYSIWYG_LANG', 'it'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', '.'); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Amministrazione di Serendipity'); +@define('HAVE_TO_BE_LOGGED_ON', 'Devi fare login per vedere questa pagina'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Sembra che tu abbia inserito nome utente o password non validi'); +@define('APPEARANCE', 'Aspetto'); +@define('MANAGE_STYLES', 'Gestione stili'); +@define('CONFIGURE_PLUGINS', 'Configurazione Plugin'); +@define('CONFIGURATION', 'Configurazione'); +@define('BACK_TO_BLOG', 'Torna al Weblog'); +@define('LOGIN', 'Login'); +@define('LOGOUT', 'Logout'); +@define('LOGGEDOUT', 'Scollegato.'); +@define('CREATE', 'Crea'); +@define('SAVE', 'Salva'); +@define('NAME', 'Nome'); +@define('CREATE_NEW_CAT', 'Crea una Nuova Categoria'); +@define('I_WANT_THUMB', 'Voglio usare la miniatura nella mia notizia.'); +@define('I_WANT_BIG_IMAGE', 'Voglio usare l\'immagine grande nella mia notizia.'); +@define('I_WANT_NO_LINK', ' Voglio mostrarla come immagine'); +@define('I_WANT_IT_TO_LINK', 'Voglio mostrarla come link a questo URL:'); +@define('BACK', 'Indietro'); +@define('FORWARD', 'Avanti'); +@define('ANONYMOUS', 'Anonimo'); +@define('NEW_TRACKBACK_TO', 'Nuovo trackback verso'); +@define('NEW_COMMENT_TO', 'Nuovo commento mandato a'); +@define('RECENT', 'Recente...'); +@define('OLDER', 'Più vecchio...'); +@define('DONE', 'Fatto'); +@define('WELCOME_BACK', 'bentornato,'); +@define('TITLE', 'Titolo'); +@define('DESCRIPTION', 'Descrizione'); +@define('PLACEMENT', 'Posizionamento'); +@define('DELETE', 'Cancella'); +@define('SAVE', 'Salva'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Scegli il plugin da aggiungere'); +@define('UP', 'SU'); +@define('DOWN', 'GIU`'); +@define('ENTRIES', 'notizie'); +@define('NEW_ENTRY', 'Nuova notizia'); +@define('EDIT_ENTRIES', 'Modifica notizie'); +@define('CATEGORIES', 'Categorie'); +@define('WARNING_THIS_BLAHBLAH', "ATTENZIONE:\\nPotrebbe essere necessario molto tempo se molte immagini non hanno le miniature."); +@define('CREATE_THUMBS', 'Ricostruisci miniature'); +@define('MANAGE_IMAGES', 'Gestione immagini'); +@define('NAME', 'Nome'); +@define('EMAIL', 'E-mail'); +@define('HOMEPAGE', 'Homepage'); +@define('COMMENT', 'Commento'); +@define('REMEMBER_INFO', 'Memorizza le Informazioni? '); +@define('SUBMIT_COMMENT', 'Manda Comment'); +@define('NO_ENTRIES_TO_PRINT', 'Nessuna notizia da stampare'); +@define('COMMENTS', 'Commenti'); +@define('ADD_COMMENT', 'Aggiungi Commento'); +@define('NO_COMMENTS', 'Nessun commento'); +@define('POSTED_BY', 'Scritto da'); +@define('ON', 'on'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Un nuovo commento è stato mandato al tuo blog "%s", nella notizia intitolata "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Un nuovo trackback è stato effettuato alla tua notizia intitolata "%s".'); +@define('NO_CATEGORY', 'Nessuna Categoria'); +@define('ENTRY_BODY', 'Corpo della Notizia'); +@define('EXTENDED_BODY', 'Corpo Esteso'); +@define('CATEGORY', 'Categoria'); +@define('EDIT', 'Modifica'); +@define('NO_ENTRIES_BLAHBLAH', 'Nessuna notizia trovata per la ricerca %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'La tua ricerca di %s ha fornito %s risultati:'); +@define('SEARCH_TOO_SHORT', 'La parola per la ricerca deve essere di almeno 3 caratteri'); +@define('IMAGE', 'Immagine'); +@define('ERROR_FILE_NOT_EXISTS', 'Errore: Il vecchio nome del file non esiste!'); +@define('ERROR_FILE_EXISTS', 'Errore: Nuovo nome file già usato, scegline un altro!'); +@define('ERROR_SOMETHING', 'Errore: Qualcosa non va.'); +@define('ADDING_IMAGE', 'Aggiunta image...'); +@define('THUMB_CREATED_DONE', 'Miniatura creata.
Fatto.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Errore: Il file esiste già sulla tua macchina!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Errore sconosciuto, file non inviato. Forse le dimensioni sono superiori al massimo consentito dall\'installazione del server. Chiedi al tuo provider o modifica php.ini per consentire upload più corposi.'); +@define('GO', 'Vai!'); +@define('NEWSIZE', 'Nuove dimensioni: '); +@define('RESIZE_BLAHBLAH', 'Ridimensiona %s

'); +@define('ORIGINAL_SIZE', 'Dimensione originale: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Qui puoi definire le nuove dimensioni dell\'immagine. Se vuoi mantenere le proporzioni inserisci un solo valore e premi TAB, calcolerò automaticamente le nuove dimensioni in modo da non modificare le proporzioni:'); +@define('QUICKJUMP_CALENDAR', 'Calendario di accesso veloce'); +@define('QUICKSEARCH', 'Ricerca veloce'); +@define('SEARCH_FOR_ENTRY', 'Cerca una notizia'); +@define('ARCHIVES', 'Archivi'); +@define('BROWSE_ARCHIVES', 'Sfoglia gli archivi per mese'); +@define('TOP_REFERRER', 'Top Referrers'); +@define('SHOWS_TOP_SITES', 'Mostra i maggiori siti che linkano il tuo blog'); +@define('TOP_EXITS', 'Top Exits'); +@define('SHOWS_TOP_EXIT', 'Mostra dove vanno i tuoi lettori quando escono dal blog'); +@define('SYNDICATION', 'Diffusione'); +@define('SHOWS_RSS_BLAHBLAH', 'Mostra i link di diffusione RSS'); +@define('ADVERTISES_BLAHBLAH', 'Pubblicizza le origini del tuo blog'); +@define('HTML_NUGGET', 'Pillola di HTML'); +@define('HOLDS_A_BLAHBLAH', 'Infila un pezzo di HTML nella tua barra laterale'); +@define('TITLE_FOR_NUGGET', 'Titolo della pillola'); +@define('THE_NUGGET', 'La pillola di HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Diffondi Questo Blog'); +@define('YOU_CHOSE', 'Hai scelto %s'); +@define('IMAGE_SIZE', 'Dimensioni dell\'immagine'); +@define('IMAGE_AS_A_LINK', 'Inserimento immagine'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', 'Trackbacks'); +@define('TRACKBACK', 'Trackback'); +@define('NO_TRACKBACKS', 'Nessun Trackbacks'); +@define('TOPICS_OF', 'Argomenti di'); +@define('VIEW_FULL', 'vedi tutto'); +@define('VIEW_TOPICS', 'vedi argomenti'); +@define('AT', 'at'); +@define('SET_AS_TEMPLATE', 'Imposta come modello'); +@define('IN', 'in'); +@define('EXCERPT', 'Estratto'); +@define('TRACKED', 'Tracciato'); +@define('LINK_TO_ENTRY', 'Link alla notizia'); +@define('LINK_TO_REMOTE_ENTRY', 'Link alla notizia in remoto'); +@define('IP_ADDRESS', 'Indirizzo IP'); +@define('USER', 'Utente'); +@define('THUMBNAIL_USING_OWN', 'Uso %s come miniatura stessa perché è già abbastanza piccola.'); +@define('THUMBNAIL_FAILED_COPY', 'Volevo usare %s come miniatura di sé stessa ma non riesco a copiarla!'); +@define('AUTHOR', 'Autore'); +@define('LAST_UPDATED', 'Ultimo aggiornamento'); +@define('TRACKBACK_SPECIFIC', 'URI specifico di Trackback per questa notizia'); +@define('DIRECT_LINK', 'Link diretto a questa notizia'); +@define('COMMENT_ADDED', 'Il tuo commento è stato inviato con successo. '); +@define('COMMENT_ADDED_CLICK', 'Clicka %squi per tornare%s ai commenti, e %squi per chiudere%s questa finestra.'); +@define('COMMENT_NOT_ADDED', 'Il tuo commento non può essere aggiunto, perché i commenti per questa notizia sono stati disattivati. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Clicka %squi per tornare%s ai commenti, e %squi per chiudere%s questa finestra.'); +@define('COMMENTS_DISABLE', 'Non consentire commenti a questa notizia'); +@define('COMMENTS_ENABLE', 'Consenti commenti a questa notizia'); +@define('COMMENTS_CLOSED', 'L\'autore non consente commenti a questa notizia'); +@define('EMPTY_COMMENT', 'Il tuo commento non conteneva nulla, per favore %storna indietro%s e riprova'); +@define('ENTRIES_FOR', 'Notizie per %s'); +@define('DOCUMENT_NOT_FOUND', 'Il documento %s non è stato trovato.'); +@define('USERNAME', 'Nome utente'); +@define('PASSWORD', 'Password'); +@define('AUTOMATIC_LOGIN', 'Salva informazioni'); +@define('SERENDIPITY_INSTALLATION', 'Installazione di Serendipity'); +@define('LEFT', 'sinistra'); +@define('RIGHT', 'destra'); +@define('HIDDEN', 'nascosto'); +@define('REMOVE_TICKED_PLUGINS', 'Rimuovi i plugin selezionati'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Salva i cambiamenti al layout'); +@define('COMMENTS_FROM', 'Commenti da'); +@define('ERROR', 'Errore'); +@define('ENTRY_SAVED', 'La tua notizia è stata salvata'); +@define('DELETE_SURE', 'Sei sicuro di voler cancellare #%s in modo permanente?'); +@define('NOT_REALLY', 'Non proprio...'); +@define('DUMP_IT', 'Cestinalo!'); +@define('RIP_ENTRY', 'Addio notizia #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Categoria #%s cancellata. Vecchi articoli spostati nella categoria #%s'); +@define('CATEGORY_DELETED', 'Categoria #%s cancellata.'); +@define('INVALID_CATEGORY', 'Nessuna categoria selezionata per la cancellazione'); +@define('CATEGORY_SAVED', 'Categoria salvata'); +@define('SELECT_TEMPLATE', 'Seleziona il modello che vuoi usare per il tuo blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Notizie non inserite!'); +@define('YES', 'Sì'); +@define('NO', 'No'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Controlla & salva'); +@define('DIRECTORY_WRITE_ERROR', 'Impossibile scrivere nella directory %s. Controllare i permessi.'); +@define('DIRECTORY_CREATE_ERROR', 'La directory %s non esiste e non può essere creata. Per favore crearla manualmente'); +@define('DIRECTORY_RUN_CMD', ' -> esegui %s %s'); +@define('CANT_EXECUTE_BINARY', 'Impossibile eseguire il binario %s'); +@define('FILE_WRITE_ERROR', 'Impossibile scrivere sul file %s.'); +@define('FILE_CREATE_YOURSELF', 'Per favore creare il file manualmente o controllare i permessi'); +@define('COPY_CODE_BELOW', '
* Copiare il codice qui sotto e metterlo in %s nella vostra cartella %s :

%s
' . "\n"); +@define('WWW_USER', 'Cambiare www con l\'utente con cui gira apache (es. nobody).'); +@define('BROWSER_RELOAD', 'Una volta eseguito, premete il bottone "Ricarica" del vostro browser.'); +@define('DIAGNOSTIC_ERROR', 'Sono stati rilevati degli errori durante il controllo dei dati inseriti:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity non è ancora installato. per favore installatelo ora.'); +@define('INCLUDE_ERROR', 'errore di serendipity: impossibile includere %s - terminato.'); +@define('DATABASE_ERROR', 'errore di serendipity: impossibile connettersi al database - terminato.'); +@define('CREATE_DATABASE', 'Creazione del database di default...'); +@define('ATTEMPT_WRITE_FILE', 'Tentativo di scrittura sul file %s...'); +@define('WRITTEN_N_SAVED', 'Configuratione scritta e salvata'); +@define('IMAGE_ALIGNMENT', 'Allineamento immagine'); +@define('ENTER_NEW_NAME', 'Inserisci il nuovo nome per: '); +@define('RESIZING', 'Ridimensionamento'); +@define('RESIZE_DONE', 'Fatto (ridimensionate %s immagini).'); +@define('SYNCING', 'Sincronizzazione del database con la cartella delle immagini'); +@define('SYNC_DONE', 'Fatto (Sincronizzate %s immagini).'); +@define('FILE_NOT_FOUND', 'Impossibile trovare il file %s, forse è già stato cancellato?'); +@define('ABORT_NOW', 'Interrompi subito'); +@define('REMOTE_FILE_NOT_FOUND', 'File non trovato sul server remoto, sei sicuro che l\'URL: %s sia correttoi?'); +@define('FILE_FETCHED', '%s scaricato come %s'); +@define('FILE_UPLOADED', 'File %s inviato con successo come %s'); +@define('WORD_OR', 'O'); +@define('SCALING_IMAGE', 'Ridimensionamento di %s a %s x %s px'); +@define('KEEP_PROPORTIONS', 'Mantieni le proporzioni'); +@define('REALLY_SCALE_IMAGE', 'Vuoi veramente riscalare l\'immagine? Questa operazione non può essere annullata!'); +@define('TOGGLE_ALL', 'Espandi tutto'); +@define('TOGGLE_OPTION', 'Inverti l\'opzione'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Iscriviti a questa notizia'); +@define('UNSUBSCRIBE_OK', "%s è stato disiscritto dalla notizia"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Nuovo commento alla notizia "%s" a cui sei iscritto'); +@define('SUBSCRIPTION_MAIL', "Ciao %s,\n\nC'è un nuovo commento alla notizia che stai tenendo d'occhio su \"%s\", intitolata \"%s\"\nIl nome dell'autore è : %s\n\nPuoi trovare la notizia qui: %s\n\nPuoi disiscriverti clickando su questo link: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Ciao %s,\n\nUn nuovo trackback è stato aggiunto alla notizia che stai tenendo d'occhio su \"%s\", intitolata \"%s\"\nIl nome dell'autore è: %s\n\nPuoi trovare la notizia qui: %s\n\nPuoi disiscriverti clickando su questo link: %s\n"); +@define('SIGNATURE', "\n-- \n%s powered by Serendipity.\nIl miglior blog del mondo, puoi usarlo anceh tu.\nGuarda per sapere come."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 commenti'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Campo "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Campo "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Immagine per il feed RSS'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Larghezza Immagine'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Altezza Immagine'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'Indirizzo e-mail del webmaster, se disponibile. (vuoto: nascosto) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'Indirizzo e-mail dell\'editore, se disponibile. (vuoto: nascosto) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL di un\'immagine GIF/JPEG/PNG, se disponibile. (vuoto: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'in pixel, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'in pixel, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Campo "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Numero di minuti dopo i quali il tuo blog non dovrebbe essere tenuto in cache da altri siti/applicazioni (vuoto: nascosto) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Campo "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Il campo "pubDate" deve essere incluso in un canale RSS, per mostrare la data di inserimento dell\'ultima notizia?'); +@define('CONTENT', 'Contenuto'); +@define('TYPE', 'Tipo'); +@define('DRAFT', 'Bozza'); +@define('PUBLISH', 'Pubblica'); +@define('PREVIEW', 'Anteprima'); +@define('DATE', 'Data'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Attenzione: La data specificata non è valida. Deve essere nel formato AAAA-MM-GG OO:MM .'); +@define('CATEGORY_PLUGIN_DESC', 'Mostra la lista delle categorie.'); +@define('ALL_AUTHORS', 'Tutti gli autori'); +@define('CATEGORIES_TO_FETCH', 'Categorie da scaricare'); +@define('CATEGORIES_TO_FETCH_DESC', 'Scarica le categorie di quale autore?'); +@define('PAGE_BROWSE_ENTRIES', 'Pagina %s di %s, in totale %s notizie'); +@define('PREVIOUS_PAGE', 'pagina precedente'); +@define('NEXT_PAGE', 'pagina seguente'); +@define('ALL_CATEGORIES', 'Tutte le categorie'); +@define('DO_MARKUP', 'Effettua trasformazioni del Markup'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Formato data'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Il formato della data della notizia, usando variabili di strftime() del PHP. (Default: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Impossibile aprire il file di modello, per favore aggiornare serendipity!'); +@define('ADVANCED_OPTIONS', 'Opzioni avanzate'); +@define('EDIT_ENTRY', 'Modifica notizia'); +@define('HTACCESS_ERROR', 'Per controllare l\'installazione del tuo webserver, serendipity ha bisogno di scrivere nel file ".htaccess". Questo non è stato possibile a causa di permessi errati. Per favore sistema i permessi in questo modo:
  %s
e ricarica questa pagina.'); +@define('SIDEBAR_PLUGINS', 'Plugin per le barre laterali'); +@define('EVENT_PLUGINS', 'Plugin di Evento'); +@define('SORT_ORDER', 'Ordinamento'); +@define('SORT_ORDER_NAME', 'Nome file'); +@define('SORT_ORDER_EXTENSION', 'Estensione del file'); +@define('SORT_ORDER_SIZE', 'Dimensioni del file'); +@define('SORT_ORDER_WIDTH', 'Larghezza immagine'); +@define('SORT_ORDER_HEIGHT', 'Altezza immagine'); +@define('SORT_ORDER_DATE', 'Data di upload'); +@define('SORT_ORDER_ASC', 'Crescente'); +@define('SORT_ORDER_DESC', 'Decrescente'); +@define('THUMBNAIL_SHORT', 'Mini'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Applica markup a %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Inizio settimana'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity ha rilevato che la configurazione si riferisce alla versione %s, mentre serendipity è installato nella versione %s, è necessario fare l\'upgrade! Clicka qui'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Salve, e benvenuto alla procedura di upgrade di Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Sono qui per aiutarti a fare l\'upgrade della tua installazione di Serendipity %s .'); +@define('SERENDIPITY_UPGRADER_WHY', 'Vedi questo messaggio perché hai appena installato Serendipity %s, ma non hai ancora aggiornato l\'installazione del database per questa versione'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Database update (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Ho trovato questi file .sql che hanno bisogno di essere caricati prima di continuare col funzionamento di Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Procedure specifiche di versione'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Nessuna procedura specifica della versione trovata'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Vuoi eseguire le procedure indicate?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'No, le eseguirò manualmente'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Sí, eseguile'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Sembra che tu non abbia bisogno della procedura di upgrade'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Considera Serendipity uggiornato'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Hai ignorato la procedura di upgrade di Serendipity, per favore controlla che il tuo database sia correttamente installato e che le funzioni periodiche vengano lanciate'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'La tua installazione di Serendipity è ora aggiornata alla versione %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Puoi tornare al tuo blog clickando %squi%s'); +@define('MANAGE_USERS', 'gestione Utenti'); +@define('CREATE_NEW_USER', 'Crea nuovo utente'); +@define('CREATE_NOT_AUTHORIZED', 'Non puoi modificare utenti con lo stesso tuo livello'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Non puoi creare utenti di livello superiore al tuo'); +@define('CREATED_USER', 'Un nuovo utente %s è stato creato'); +@define('MODIFIED_USER', 'Le caratteristiche dell\'utente %s sono state modificate'); +@define('USER_LEVEL', 'Livello utente'); +@define('DELETE_USER', 'Stai per cancellare l\'utente #%d %s. Sei convinto? Questo impedirà la visualizzazione delle notizie scritte da lui sulla pagina principale.'); +@define('DELETED_USER', 'Utente #%d %s cancellato.'); +@define('LIMIT_TO_NUMBER', 'Quante notizie vuoi mostrare?'); +@define('ENTRIES_PER_PAGE', 'notizie per pagina'); +@define('XML_IMAGE_TO_DISPLAY', 'Pulsante XML'); +@define('XML_IMAGE_TO_DISPLAY_DESC','I link ai feed XML saranno indicati da questa immagine. Lasciare vuoto per l\'immagine di default, inserire \'none\' per disabilitarla.'); + +@define('DIRECTORIES_AVAILABLE', 'Nella lista di sotto-directory disponibili puoi clickare sul nome di una directory per creare una nuova directory al suo interno.'); +@define('ALL_DIRECTORIES', 'tutte le directory'); +@define('MANAGE_DIRECTORIES', 'Gestione directory'); +@define('DIRECTORY_CREATED', 'La directory %s è stata creata.'); +@define('PARENT_DIRECTORY', 'Directory superiore'); +@define('CONFIRM_DELETE_DIRECTORY', 'Sei sicuro di voler cancellare tutto il contenuto della directory %s?'); +@define('ERROR_NO_DIRECTORY', 'Errore: La directory %s non esiste'); +@define('CHECKING_DIRECTORY', 'Controllo dei file nella directory %s'); +@define('DELETING_FILE', 'Cancellazione del file %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Impossibile rimuovere directory non vuote. Attivare "Forzare la cancellazione" se volete rimuoverli e rimandare il form. I file esistenti sono:'); +@define('DIRECTORY_DELETE_FAILED', 'Cancellazione della directory %s fallita. Controllare i permessi o i messaggi soprastanti.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Directory %s cancellata con successo.'); +@define('SKIPPING_FILE_EXTENSION', 'File evitato: Estensione mancante in %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'File evitato: %s non è leggibile.'); +@define('FOUND_FILE', 'Trovato file nuovo/modificato: %s.'); +@define('ALREADY_SUBCATEGORY', '%s è già una sotto-categoria di %s.'); +@define('PARENT_CATEGORY', 'Categoria superiore'); +@define('IN_REPLY_TO', 'In risposta a'); +@define('TOP_LEVEL', 'Primo Livello'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', 'feed %s'); +@define('PERMISSIONS', 'Permessi'); +@define('SETTINGS_SAVED_AT', 'Le nuove impostazioni sono state salvate in %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Impostazioni Database'); +@define('INSTALL_CAT_DB_DESC', 'Qui puoi inserire le informazioni sul database. Serendipity ne ha bisogno per funzionare'); +@define('INSTALL_DBTYPE', 'Tipo Database'); +@define('INSTALL_DBTYPE_DESC', 'Tipo di Database'); +@define('INSTALL_DBHOST', 'Host Database'); +@define('INSTALL_DBHOST_DESC', 'Il nome dell\'host del server database'); +@define('INSTALL_DBUSER', 'Utente Database'); +@define('INSTALL_DBUSER_DESC', 'Il nome utente con cui collegarsi al database'); +@define('INSTALL_DBPASS', 'Password Database'); +@define('INSTALL_DBPASS_DESC', 'La password dell\'utente indicato'); +@define('INSTALL_DBNAME', 'Nome Database'); +@define('INSTALL_DBNAME_DESC', 'Il nome del tuo database'); +@define('INSTALL_DBPREFIX', 'Prefisso Tabelle Database'); +@define('INSTALL_DBPREFIX_DESC', 'Prefisso per i nomi delle tabelle, per esempio serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Percorsi'); +@define('INSTALL_CAT_PATHS_DESC', 'Percorsi a cartelle e file essenziali. Non dimenticare la barra alla fine del nome delle directory!'); +@define('INSTALL_FULLPATH', 'Percorso completo'); +@define('INSTALL_FULLPATH_DESC', 'Il percorso completo e assoluto all\'installazione di serendipity'); +@define('INSTALL_UPLOADPATH', 'Percorso Upload'); +@define('INSTALL_UPLOADPATH_DESC', 'Tutti gli upload andranno qui, relativo al \'Percorso completo\' - tipicamente \'uploads/\''); +@define('INSTALL_RELPATH', 'Percorso relativo'); +@define('INSTALL_RELPATH_DESC', 'Percorso a serendipity nel browser, tipicamente \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Percorso relativo dei modelli'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Il percorso alla cartella contenente i modelli - relativa a \'percorso relativo\''); +@define('INSTALL_RELUPLOADPATH', 'Percorso relativo degli upload'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Percorso agli upload per il browser - relativo a \'percorso relativo\''); +@define('INSTALL_URL', 'URL del blog'); +@define('INSTALL_URL_DESC', 'URL di base all\'installazione di serendipity'); +@define('INSTALL_INDEXFILE', 'File indice'); +@define('INSTALL_INDEXFILE_DESC', 'Il nome del file indice di serendipity'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Impostazioni generali'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Personalizza il comportamento di Serendipity'); +@define('INSTALL_USERNAME', 'Nome utente di amministrazione'); +@define('INSTALL_USERNAME_DESC', 'Nome utente per l\'accesso come amministratore'); +@define('INSTALL_PASSWORD', 'Password di amministrazione'); +@define('INSTALL_PASSWORD_DESC', 'Password per l\'accesso come ammninistratore'); +@define('INSTALL_EMAIL', 'e-mail amministratore'); +@define('INSTALL_EMAIL_DESC', 'E-mail dell\'amministratore del blog'); +@define('INSTALL_SENDMAIL', 'Invia mail all\'amministratore?'); +@define('INSTALL_SENDMAIL_DESC', 'Vuoi che l\'amministratore riceva e-mail quando vengono scritti commenti alle notizie?'); +@define('INSTALL_SUBSCRIBE', 'Consenti iscrizione alle notizie?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Consenti agli utenti di iscriversi alle notizie e quindi di ricevere un\'e-mail quando vengono scritti commenti a quelle notizie'); +@define('INSTALL_BLOGNAME', 'Nome del Blog'); +@define('INSTALL_BLOGNAME_DESC', 'Il titolo del tuo blog'); +@define('INSTALL_BLOGDESC', 'Descrizione del Blog'); +@define('INSTALL_BLOGDESC_DESC', 'La descrizione del tuo blog'); +@define('INSTALL_LANG', 'Lingua'); +@define('INSTALL_LANG_DESC', 'Seleziona la lingua del tuo blog'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Aspetto e opzioni'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Personalizza l\'aspetto e il funzionamento di Serendipity'); +@define('INSTALL_WYSIWYG', 'Usa un editor WYSIWYG'); +@define('INSTALL_WYSIWYG_DESC', 'Vuoi usare l\'editor WYSIWYG? (Funziona con IE5+, parzialmente con Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Forza l\'aderenza a XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', 'Vuoi forzare l\'aderenza allo standard XHTML 1.1 (potrebbe causare problemi nel backend e nel frontend con i browser di vecchia generazione)'); +@define('INSTALL_POPUP', 'Abilita l\'uso di finestre popup'); +@define('INSTALL_POPUP_DESC', 'Vuoi usare dei popup per i commenti, i trackback, ecc.?'); +@define('INSTALL_EMBED', 'Hai inglobato serendipity?'); +@define('INSTALL_EMBED_DESC', 'Se vuoi inglobare serendipity in una normale pagina, imposta questa opzione a vero, in modo da scartare gli header e scrivere solo i contenuti. Puoi usare i normali header della tua pagina web. Leggi il file README per avere più informazioni!'); +@define('INSTALL_TOP_AS_LINKS', 'Mostra i Top Exit/Referrer come link?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"no": Exit e Referrer sono mostrati come puro testo per evitare spam su google. "sì": Exit e Referrer vengono mostrati come link. "default": Usa le impostazioni globali (raccomandato).'); +@define('INSTALL_BLOCKREF', 'Referers bloccati'); +@define('INSTALL_BLOCKREF_DESC', 'Ci sono particolari host che non vuoi mostrare nella lista dei referer? Separa la lista dei nomi di host con un \';\' e, nota bene, gli host vengono bloccati anche come sotto-stringhe!'); +@define('INSTALL_REWRITE', 'Riscrittura URL'); +@define('INSTALL_REWRITE_DESC', 'Seleziona quale regola vuoi per la generazione degli URL. Abilitare la riscrittura degli URL genera URL più belli e rende il blog meglio indicizzabile dai motori di ricerca come google. Il webserver deve supportare almeno mod_rewrite o "AllowOverride All" per la tua directory di serendipity. L\'impostazione di default è l\'auto-riconoscimento'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Impostazione per la conversione di immagini'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Inserisci informazioni generali su come serendipity deve trattare con le immagini'); +@define('INSTALL_IMAGEMAGICK', 'Usa Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Hai image magick installato e vuoi usarlo per ridimensionare le immagini?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Percorso al binario \'convert\''); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Percorso completo e nome dell\'eseguibile \'convert\' di ImageMagick'); +@define('INSTALL_THUMBSUFFIX', 'Suffisso miniature'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Le miniature avranno un nome nel formato: originale.[suffisso].est'); +@define('INSTALL_THUMBWIDTH', 'Dimensioni delle miniature'); +@define('INSTALL_THUMBWIDTH_DESC', 'Larghezza massima stabilita per le miniature auto-generate'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'I tuoi dettagli personali'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Modifica i tuoi dettagli personali'); +@define('USERCONF_USERNAME', 'Il tuo nome utente'); +@define('USERCONF_USERNAME_DESC', 'Il nome utente che usi per collegarti al blog'); +@define('USERCONF_PASSWORD', 'La tua password'); +@define('USERCONF_PASSWORD_DESC', 'La password che usi per collegarti al blog'); +@define('USERCONF_EMAIL', 'Il tuo indirizzo e-mail'); +@define('USERCONF_EMAIL_DESC', 'Il tuo indirizzo e-mail personale'); +@define('USERCONF_SENDCOMMENTS', 'Manda avvisi di commenti?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Vuoi ricevere un\'e-mail quando vengono scritti commenti sui tuoi articoli?'); +@define('USERCONF_SENDTRACKBACKS', 'manda avvisi di trackback?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Vuoi ricevere e-mail quando vengono aggiunti dei trackback ai tuoi articoli?'); +@define('USERCONF_ALLOWPUBLISH', 'Permessi: Pubblicazione notizie?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'A questo utente è consentito pubblicare notizie?'); +@define('SUCCESS', 'Successo'); +@define('POWERED_BY_SHOW_TEXT', 'Mostra "Serendipity" come testo'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Mostra "Serendipity Weblog" come testo'); +@define('POWERED_BY_SHOW_IMAGE', 'Mostra "Serendipity" con un logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Mostra il logo di Serendipity'); +@define('PLUGIN_ITEM_DISPLAY', 'Dove deve essere mostrato l\'oggetto?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Solo notizia estesa'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Solo pagina riassuntiva'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Sempre'); +@define('RSS_IMPORT_CATEGORY', 'Usa questa categoria per le notizie importate non corrispondenti'); + +@define('COMMENTS_WILL_BE_MODERATED', 'I commenti sottoposti sono soggetti a moderazione prima di essere mostrati.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Sono disponibili le seguenti opzioni:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Attenzione: Questo commento deve essere approvato prima di essere mostrato'); +@define('DELETE_COMMENT', 'Cancella commento'); +@define('APPROVE_COMMENT', 'Approva commento'); +@define('REQUIRES_REVIEW', 'Richiede revisione'); +@define('COMMENT_APPROVED', 'Il commento #%s è stato approvato con successo'); +@define('COMMENT_DELETED', 'Il commento #%s è stato cancellato con successo'); +@define('COMMENTS_MODERATE', 'Commenti e Traceback a questa notizia richiedono moderazione'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Attenzione: Questo trackback richiede approvazione prima di essere mostrato'); +@define('DELETE_TRACKBACK', 'Cancella trackback'); +@define('APPROVE_TRACKBACK', 'Approva trackback'); +@define('TRACKBACK_APPROVED', 'Il trackback #%s è stato approvato con successo'); +@define('TRACKBACK_DELETED', 'Il trackback #%s è stato cancellato con successo'); +@define('VIEW', 'Vedi'); +@define('COMMENT_ALREADY_APPROVED', 'Il commento #%s sembra già essere stato approvato'); +@define('COMMENT_EDITED', 'Il commento selezionato è stato modificato'); +@define('HIDE', 'Nascondi'); +@define('VIEW_EXTENDED_ENTRY', 'Continua a leggere "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Questo link non dovrebbe essere clickato. Contiene l\'URI di trackback per questa notizia. Puoi usare questo URI per mandare pingback e trackback dal tuo blog a questa notizia. Per copiare il link, clickaci col tasto destro e seleziona "Copia Collegamento".'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Usa https per il login'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Imposta il link di login a una locazione https. Il webserver deve supportare questa configurazione!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Rendi clickabili i link esterni?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": i link esterni non verificati (Top Exit, Top Referrer, Commenti degli utenti) non vengono mostrati/vengono mostrati come puro testo dove possibile, per evitare spam di google. (raccomandato). "Sì": I link esterni non verificati appaiono come link. Può essere reimpostato dalla configurazione dei plugin delle barre laterali!'); +@define('PAGE_BROWSE_COMMENTS', 'Pagina %s di %s, in totale %s commenti'); +@define('FILTERS', 'Filtri'); +@define('FIND_ENTRIES', 'Trova notizie'); +@define('FIND_COMMENTS', 'Trova commenti'); +@define('FIND_MEDIA', 'Trova media'); +@define('FILTER_DIRECTORY', 'Directory'); +@define('SORT_BY', 'Ordina per'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Nessun Trackback inviato: Impossibile connettersi a %s sulla porta %d'); +@define('MEDIA', 'Media'); +@define('MEDIA_LIBRARY', 'Libreria Media'); +@define('ADD_MEDIA', 'Aggiungi media'); +@define('ENTER_MEDIA_URL', 'Inserisci l\'URL di un file da scaricare:'); +@define('ENTER_MEDIA_UPLOAD', 'Seleziona un file da inviare:'); +@define('SAVE_FILE_AS', 'Salva il file come:'); +@define('STORE_IN_DIRECTORY', 'Salva il file nella directory: '); +@define('ADD_MEDIA_BLAHBLAH', 'Aggiungi un file al deposito di media:

Qui puoi inviare file media, o dirmi da dove prenderli in qualche parte del web! Se non hai l\'immagine giusta, cerca su google quella che preferisci, i risultati spesso sono utili e divertenti :)

Seleziona il metodo:
'); +@define('MEDIA_RENAME', 'Rinomina questo file'); +@define('IMAGE_RESIZE', 'Ridimensiona questa immagine'); +@define('MEDIA_DELETE', 'Cancella questo file'); +@define('FILES_PER_PAGE', 'File per pagina'); +@define('CLICK_FILE_TO_INSERT', 'Clicka sul file che vuoi inserire:'); +@define('SELECT_FILE', 'Seleziona il file da inserire'); +@define('MEDIA_FULLSIZE', 'Dimensioni piene'); +@define('CALENDAR_BOW_DESC', 'Il giorno della settimana che dovrebbe essere considerato il primo. Il default è Lunedì'); +@define('SUPERUSER', 'Amministrazione del Blog'); +@define('ALLOWS_YOU_BLAHBLAH', 'Fornisce un link nella barra laterare per l\'amministrazione del blog'); +@define('CALENDAR', 'Calendario'); +@define('SUPERUSER_OPEN_ADMIN', 'Apri amministrazione'); +@define('SUPERUSER_OPEN_LOGIN', 'Apri schermo di login'); +@define('INVERT_SELECTIONS', 'Inverti la selezione'); +@define('COMMENTS_DELETE_CONFIRM', 'Sei sicuro di voler cancellare i commenti selezionati?'); +@define('COMMENT_DELETE_CONFIRM', 'Sei sicuro di voler cancellare il commento #%d, scritto da %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Cancella i commenti selezionati'); +@define('VIEW_COMMENT', 'Vedi commento'); +@define('VIEW_ENTRY', 'Vedi notizia'); +@define('DELETE_FILE_FAIL' , 'Impossibile cancellare il file %s'); +@define('DELETE_THUMBNAIL', 'Cancellata miniatura dell\'immagine %s'); +@define('DELETE_FILE', 'Cancellato il file %s'); +@define('ABOUT_TO_DELETE_FILE', 'Stai per cancellare %s
Se stai usando questo file in altre notizie, questo causerà link o immagini "morti"
Sei sicuro di voler procedere?

'); +@define('TRACKBACK_SENDING', 'Invio del trackback all\'URI %s...'); +@define('TRACKBACK_SENT', 'Trackback inviato con successo'); +@define('TRACKBACK_FAILED', 'Trackback fallito: %s'); +@define('TRACKBACK_NOT_FOUND', 'Nessun URI di trackback trovato.'); +@define('TRACKBACK_URI_MISMATCH', 'L\'URI di trackback auto-rilevato non corrisponde con il nostro URI di destinazione.'); +@define('TRACKBACK_CHECKING', 'Controllo di %s per possibili trackback...'); +@define('TRACKBACK_NO_DATA', 'La destinazione non contiene dati'); +@define('TRACKBACK_SIZE', 'L\'URI di destinazione eccede le dimensioni massime per i file di %s byte.'); +@define('COMMENTS_VIEWMODE_THREADED', 'Per argomento'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Cronologicamente'); +@define('DISPLAY_COMMENTS_AS', 'Mostra commenti'); +@define('COMMENTS_FILTER_SHOW', 'Show'); // Translate +@define('COMMENTS_FILTER_ALL', 'All'); // Translate +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Only approved'); // Translate +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Pending approval'); // Translate +@define('RSS_IMPORT_BODYONLY', 'Put all imported text in the "body" section and do not split up into "extended entry" section.'); // Translate +@define('SYNDICATION_PLUGIN_FULLFEED', 'Show full articles with extended body inside RSS feed'); // Translate +@define('MT_DATA_FILE', 'Movable Type data file'); // Translate +@define('FORCE', 'Force'); // Translate +@define('CREATE_AUTHOR', 'Create author \'%s\'.'); // Translate +@define('CREATE_CATEGORY', 'Create category \'%s\'.'); // Translate +@define('MYSQL_REQUIRED', 'You must have the MySQL extension in order to perform this action.'); // Translate +@define('COULDNT_CONNECT', 'Could not connect to MySQL database: %s.'); // Translate +@define('COULDNT_SELECT_DB', 'Could not select database: %s.'); // Translate +@define('COULDNT_SELECT_USER_INFO', 'Could not select user information: %s.'); // Translate +@define('COULDNT_SELECT_CATEGORY_INFO', 'Could not select category information: %s.'); // Translate +@define('COULDNT_SELECT_ENTRY_INFO', 'Could not select entry information: %s.'); // Translate +@define('COULDNT_SELECT_COMMENT_INFO', 'Could not select comment information: %s.'); // Translate +@define('WEEK', 'Week'); // Translate +@define('WEEKS', 'Weeks'); // Translate +@define('MONTHS', 'Months'); // Translate +@define('DAYS', 'Days'); // Translate +@define('ARCHIVE_FREQUENCY', 'Calendar item frequency'); // Translate +@define('ARCHIVE_FREQUENCY_DESC', 'The calendar interval to use between each item in the list'); // Translate +@define('ARCHIVE_COUNT', 'Number of items in the list'); // Translate +@define('ARCHIVE_COUNT_DESC', 'The total number of months, weeks or days to display'); // Translate +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Below is a list of installed plugins'); // Translate +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); // Translate +@define('EVENT_PLUGIN', 'event plugin'); // Translate +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Click here to install a new %s'); // Translate +@define('VERSION', 'version'); // Translate +@define('INSTALL', 'Install'); // Translate +@define('ALREADY_INSTALLED', 'Already installed'); // Translate +@define('SELECT_A_PLUGIN_TO_ADD', 'Select the plugin which you wish to install'); // Translate +@define('INSTALL_OFFSET', 'Server time Offset'); // Translate +@define('STICKY_POSTINGS', 'Sticky Postings'); // Translate +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); // Translate +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); // Translate +@define('IMPORT_ENTRIES', 'Import data'); // Translate +@define('EXPORT_ENTRIES', 'Export entries'); // Translate +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); // Translate +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); // Translate +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); // Translate +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); // Translate +@define('IMPORT_NOW', 'Import now!'); // Translate +@define('IMPORT_STARTING', 'Starting import procedure...'); // Translate +@define('IMPORT_FAILED', 'Import failed'); // Translate +@define('IMPORT_DONE', 'Import successfully completed'); // Translate +@define('IMPORT_WEBLOG_APP', 'Weblog application'); // Translate +@define('EXPORT_FEED', 'Export full RSS feed'); // Translate +@define('STATUS', 'Status after import'); // Translate +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); // Translate +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); // Translate +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); // Translate +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); // Translate +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); // Translate +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); // Translate +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); // Translate +@define('INSTALL_SHOWFUTURE', 'Show future entries'); // Translate +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); // Translate +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); // Translate +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); // Translate +@define('NO_IMAGES_FOUND', 'No images found'); // Translate +@define('PERSONAL_SETTINGS', 'Personal Settings'); // Translate +@define('REFERER', 'Referer'); // Translate +@define('NOT_FOUND', 'Not found'); // Translate +@define('NOT_WRITABLE', 'Not writable'); // Translate +@define('WRITABLE', 'Writable'); // Translate +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); // Translate +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); // Translate +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); // Translate +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); // Translate +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); // Translate +@define('RED', 'red'); // Translate +@define('YELLOW', 'yellow'); // Translate +@define('GREEN', 'green'); // Translate +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); // Translate +@define('RECOMMENDED', 'Recommended'); // Translate +@define('ACTUAL', 'Actual'); // Translate +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); // Translate +@define('PHP_INSTALLATION', 'PHP installation'); // Translate +@define('THEY_DO', 'they do'); // Translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', 'Simple installation'); // Translate +@define('EXPERT_INSTALLATION', 'Expert installation'); // Translate +@define('COMPLETE_INSTALLATION', 'Complete installation'); // Translate +@define('WONT_INSTALL_DB_AGAIN', 'won\'t install the database again'); // Translate +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); // Translate +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); // Translate +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); // Translate +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); // Translate +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); // Translate +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); // Translate +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); // Translate +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); // Translate +@define('OPERATING_SYSTEM', 'Operating system'); // Translate +@define('WEBSERVER_SAPI', 'Webserver SAPI'); // Translate +@define('IMAGE_ROTATE_LEFT', 'Rotate image 90 degrees counter-clockwise'); // Translate +@define('IMAGE_ROTATE_RIGHT', 'Rotate image 90 degrees clockwise'); // Translate +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); // Translate +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); // Translate +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Applica le trasformazioni del markup al testo (smilies, abbreviazionicon *, /, _, ...). Disabilitare questa opzione significa mantenere il codice HTML nel testo.'); +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_ja.inc.php b/lang/serendipity_lang_ja.inc.php new file mode 100644 index 0000000..b803587 --- /dev/null +++ b/lang/serendipity_lang_ja.inc.php @@ -0,0 +1,670 @@ +, 2004-2005. + +@define('LANG_CHARSET', 'UTF-8'); +@define('DATE_LOCALES', 'ja,jp,ja_JP.UTF-8'); +@define('DATE_FORMAT_ENTRY', '%Y年 %B %e(%A)'); +@define('DATE_FORMAT_SHORT', '%Y-%m-%d %H:%M'); +@define('WYSIWYG_LANG', 'ja-utf8'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', '.'); +@define('NUMBER_FORMAT_THOUSANDS', ','); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Serendipity 管理スイート'); +@define('HAVE_TO_BE_LOGGED_ON', 'このページを閲覧するにはログインしなければなりません。'); +@define('WRONG_USERNAME_OR_PASSWORD', '無効のユーザー名かパスワードを入力したように見えます。'); +@define('APPEARANCE', '外観'); +@define('MANAGE_STYLES', 'スタイル管理'); +@define('CONFIGURE_PLUGINS', 'プラグイン設定'); +@define('CONFIGURATION', '設定'); +@define('BACK_TO_BLOG', 'ウェブログに戻る'); +@define('LOGIN', 'ログイン'); +@define('LOGOUT', 'ログアウト'); +@define('LOGGEDOUT', 'ログアウトしました。'); +@define('CREATE', '作成'); +@define('SAVE', '保存'); +@define('NAME', '名前'); +@define('CREATE_NEW_CAT', '新規カテゴリを作成する'); +@define('I_WANT_THUMB', 'エントリ中でサムネイルを使用したい'); +@define('I_WANT_BIG_IMAGE', 'エントリの中で大きな画像を使用したい'); +@define('I_WANT_NO_LINK', ' 画像としてそれを表示したい'); +@define('I_WANT_IT_TO_LINK', 'それをこの URL へのリンクとして表示したい:'); +@define('BACK', '戻る'); +@define('FORWARD', '転送'); +@define('ANONYMOUS', '匿名'); +@define('NEW_TRACKBACK_TO', '新規トラックバックを作成する: '); +@define('NEW_COMMENT_TO', '新規コメントを投稿する: '); +@define('RECENT', '最近の記事...'); +@define('OLDER', '古い記事...'); +@define('DONE', '実行完了'); +@define('WELCOME_BACK', 'ようこそ!! '); +@define('TITLE', '題名'); +@define('DESCRIPTION', '説明'); +@define('PLACEMENT', '配置'); +@define('DELETE', '削除'); +@define('SAVE', '保存'); +@define('UP', '上へ'); +@define('DOWN', '下へ'); +@define('ENTRIES', 'エントリ'); +@define('NEW_ENTRY', '新規エントリ追加'); +@define('EDIT_ENTRIES', 'エントリ編集'); +@define('CATEGORIES', 'カテゴリ一覧'); +@define('WARNING_THIS_BLAHBLAH', "警告:\\nサムネイルなしの画像が多い場合、長時間かかるかもしれません。"); +@define('CREATE_THUMBS', 'サムネイル再構築'); +@define('MANAGE_IMAGES', '画像管理'); +@define('NAME', '名前'); +@define('EMAIL', '電子メール'); +@define('HOMEPAGE', 'ホームページ'); +@define('COMMENT', 'コメント'); +@define('REMEMBER_INFO', '入力情報を記憶しますか?'); +@define('SUBMIT_COMMENT', 'コメント送信'); +@define('NO_ENTRIES_TO_PRINT', '表示するエントリはありません。'); +@define('COMMENTS', 'コメント'); +@define('ADD_COMMENT', 'コメント追加'); +@define('NO_COMMENTS', 'コメントがありません'); +@define('POSTED_BY', '投稿者'); +@define('ON', 'on'); +@define('A_NEW_COMMENT_BLAHBLAH', "エントリに新しいコメントが投稿されました。\n\nブログ名:%s\nエントリ名:\n%s"); +@define('A_NEW_TRACKBACK_BLAHBLAH', '題名 "%s" に新しいトラックバックが作成されました。'); +@define('NO_CATEGORY', 'カテゴリがありません'); +@define('ENTRY_BODY', 'エントリ本文'); +@define('EXTENDED_BODY', '拡張本文'); +@define('CATEGORY', 'カテゴリ'); +@define('EDIT', '編集'); +@define('NO_ENTRIES_BLAHBLAH', '照会 %s ではエントリは見つかりませんでした。' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', '%s の検索結果は %s 個あります:'); +@define('SEARCH_TOO_SHORT', '検索文字は 3 文字以上でなければなりません。'); +@define('IMAGE', '画像'); +@define('ERROR_FILE_NOT_EXISTS', 'エラー: 古いファイル名が存在しません!'); +@define('ERROR_FILE_EXISTS', 'エラー: 既に新しいファイル名が使用されています。別の名前を指定してください!'); +@define('ERROR_SOMETHING', 'エラー: 何かが間違っています。'); +@define('ADDING_IMAGE', '画像追加中...'); +@define('THUMB_CREATED_DONE', 'サムネイルを作成しました。
終了します。'); +@define('ERROR_FILE_EXISTS_ALREADY', 'エラー: ファイルはマシン上に既に存在します!'); +@define('ERROR_UNKNOWN_NOUPLOAD', '未知のエラーが生じました。ファイルはアップロードしませんでした。おそらくファイルサイズがサーバーのインストールで許可された最大サイズを超えたと思われます。ISP に確認するか、php.ini ファイルで許可されたアップロード可能な最大ファイルサイズを編集してください。'); +@define('GO', 'Go!'); +@define('NEWSIZE', '新規サイズ: '); +@define('RESIZE_BLAHBLAH', 'リサイズ %s

'); +@define('ORIGINAL_SIZE', '元サイズ: %sx%s ピクセル'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Here, you can adjust the image size. If you want to resize the image proportionally, just enter a value in one of the two boxes and press the TAB key -- I\'ll automatically calculate the new size so the image proportions don\'t get messed up

'); +@define('QUICKJUMP_CALENDAR', 'カレンダクイックジャンプ'); +@define('QUICKSEARCH', 'クイックサーチ'); +@define('SEARCH_FOR_ENTRY', 'エントリの検索'); +@define('ARCHIVES', '書庫一覧'); +@define('BROWSE_ARCHIVES', '月単位の書庫表示'); +@define('TOP_REFERRER', 'トップリファラ一覧'); +@define('SHOWS_TOP_SITES', 'あなたのブログにリンクしたサイトのトップを表示します。'); +@define('TOP_EXITS', 'Top Exits'); +@define('SHOWS_TOP_EXIT', 'あなたのブログから退出したリンクのトップを表示します。'); +@define('SYNDICATION', 'Syndication'); +@define('SHOWS_RSS_BLAHBLAH', 'RSS syndication リンクを表示します。'); +@define('ADVERTISES_BLAHBLAH', 'ブログの元を宣伝します。'); +@define('HTML_NUGGET', 'HTML ナゲット'); +@define('HOLDS_A_BLAHBLAH', 'サイドバーに HTML の情報(ナゲット)を保持します。'); +@define('TITLE_FOR_NUGGET', 'ナゲットの題名'); +@define('THE_NUGGET', 'HTML の塊です!'); +@define('SYNDICATE_THIS_BLOG', 'このブログと Syndicate'); +@define('YOU_CHOSE', 'あなたは %s を選択しました。'); +@define('IMAGE_ROTATE_LEFT', '左回り(時計と反対回り)に 90 度回転する'); +@define('IMAGE_ROTATE_RIGHT', '右回り(時計回り)に 90 度回転する'); +@define('IMAGE_SIZE', '画像サイズ'); +@define('IMAGE_AS_A_LINK', '画像の挿入'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', 'トラックバック'); +@define('TRACKBACK', 'トラックバック'); +@define('NO_TRACKBACKS', 'トラックバックがありません'); +@define('TOPICS_OF', 'Topics from'); +@define('VIEW_FULL', 'フル閲覧'); +@define('VIEW_TOPICS', 'トピック閲覧'); +@define('AT', 'at'); +@define('SET_AS_TEMPLATE', 'テンプレートとして設定'); +@define('IN', 'in'); +@define('EXCERPT', '抜粋'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'エントリにリンク'); +@define('LINK_TO_REMOTE_ENTRY', 'リモートエントリにリンク'); +@define('IP_ADDRESS', 'IP アドレス'); +@define('USER', 'ユーザー'); +@define('THUMBNAIL_USING_OWN', 'Using %s as it\'s own thumbnail because it is so small already.'); +@define('THUMBNAIL_FAILED_COPY', 'Wanted to use %s as it\'s own thumbnail, but failed to copy!'); +@define('AUTHOR', '執筆者'); +@define('LAST_UPDATED', '最終更新日'); +@define('TRACKBACK_SPECIFIC', 'このエントリのトラックバック URI を指定する'); +@define('DIRECT_LINK', 'このエントリへのダイレクトリンク'); +@define('COMMENT_ADDED', 'コメントの追加に成功しました。'); +@define('COMMENT_ADDED_CLICK', '%sここへ戻る%s をクリックするとコメントに戻ります。%sここで閉じる%s ウィンドウを閉じます。'); +@define('COMMENT_NOT_ADDED', 'このエントリへのコメントが無効になったのでコメントは追加できませんでした。'); +@define('COMMENT_NOT_ADDED_CLICK', '%s戻る%s でコメントに戻ります。%s閉じる%s でウィンドウを閉じます。'); +@define('COMMENTS_DISABLE', 'このエントリのコメントを許可しない'); +@define('COMMENTS_ENABLE', 'このエントリへのコメントを許可する'); +@define('COMMENTS_CLOSED', '執筆者はこのエントリへのコメントを許可していません'); +@define('EMPTY_COMMENT', 'コメントは何も含んでいません。%s戻る%s でもう一度試してください。'); +@define('ENTRIES_FOR', '%s のエントリ一覧'); +@define('DOCUMENT_NOT_FOUND', 'ドキュメント %s が見つかりません。'); +@define('USERNAME', 'ユーザー名'); +@define('PASSWORD', 'パスワード'); +@define('AUTOMATIC_LOGIN', '情報を保存する'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity インストール作業'); +@define('LEFT', 'å·¦'); +@define('RIGHT', '右'); +@define('HIDDEN', '隠す'); +@define('REMOVE_TICKED_PLUGINS', '印のついたプラグインを削除'); +@define('SAVE_CHANGES_TO_LAYOUT', 'レイアウトへの変更を保存'); +@define('COMMENTS_FROM', 'Comments from'); +@define('ERROR', 'エラー'); +@define('ENTRY_SAVED', 'エントリは保存されました。'); +@define('DELETE_SURE', '#%s の削除を本当に実行しますか?'); +@define('NOT_REALLY', 'とりやめます...'); +@define('DUMP_IT', '実行します!'); +@define('RIP_ENTRY', 'R.I.P. エントリ #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'カテゴリ #%s を削除しました。古い記事はカテゴリ #%s に移動しました。'); +@define('CATEGORY_DELETED', 'カテゴリ #%s を削除しました。'); +@define('INVALID_CATEGORY', 'カテゴリは破棄するために提供されませんでした。'); +@define('CATEGORY_SAVED', 'カテゴリを保存しました。'); +@define('SELECT_TEMPLATE', 'ウェブログに使用したいテンプレートを選択します。'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'エントリの挿入が成功しませんでした!'); +@define('MT_DATA_FILE', 'Movable Type データファイル'); +@define('FORCE', '強制'); +@define('CREATE_AUTHOR', '執筆者 \'%s\' を作成する'); +@define('CREATE_CATEGORY', 'カテゴリ \'%s\' を作成する'); +@define('MYSQL_REQUIRED', 'この操作を実行するには MySQL 拡張が古過ぎます。'); +@define('COULDNT_CONNECT', 'MySQL データベースへ接続できませんでした: %s.'); +@define('COULDNT_SELECT_DB', 'データベースを選択できませんでした: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'ユーザー情報を選択できませんでした: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'カテゴリ情報を選択できませんでした: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'エントリ情報を選択できませんでした: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'コメント情報を選択できませんでした: %s.'); +@define('YES', 'はい'); +@define('NO', 'いいえ'); +@define('USE_DEFAULT', 'デフォルト'); +@define('CHECK_N_SAVE', 'チェックと保存'); +@define('DIRECTORY_WRITE_ERROR', 'ディレクトリ %s の書き込みができませんでした。パーミッションを調べてください'); +@define('DIRECTORY_CREATE_ERROR', 'ディレクトリ %s が存在しないか作成することができませんでした。手動でディレクトリを作成してください。'); +@define('DIRECTORY_RUN_CMD', ' -> 実行 %s %s'); +@define('CANT_EXECUTE_BINARY', '%s バイナリを実行できませんでした。'); +@define('FILE_WRITE_ERROR', 'ファイル %s の書き込みができませんでした。'); +@define('FILE_CREATE_YOURSELF', '自分でファイルを作成するか、パーミッションを調べてください'); +@define('COPY_CODE_BELOW', '
* Just copy the code below and place it in %s in your %s folder:
%s
' . "\n"); +@define('WWW_USER', 'Change www to the user apache runs as (i.e. nobody).'); +@define('BROWSER_RELOAD', '一度これを実行してにはブラウザーの「再読み込み」ボタンをクリックします。'); +@define('DIAGNOSTIC_ERROR', 'あなたの入力した情報の診断を実行する間にいくつかのエラーを検知しました:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity はまだインストールされていません。今からインストール してください。'); +@define('INCLUDE_ERROR', 'serendipity エラー: could not include %s - exiting.'); +@define('DATABASE_ERROR', 'serendipity エラー: データベースに接続できませんでした - 終了します。'); +@define('CREATE_DATABASE', 'デフォルトデータベースセットアップの作成中...'); +@define('ATTEMPT_WRITE_FILE', 'ファイル %s の書き込みを試みます...'); +@define('WRITTEN_N_SAVED', '設定の書き込みと保存'); +@define('IMAGE_ALIGNMENT', '画像位置あわせ'); +@define('ENTER_NEW_NAME', '新規名称の入力: '); +@define('RESIZING', 'リサイズ中'); +@define('RESIZE_DONE', '終了しました (%s このイメージをリサイズしました)'); +@define('SYNCING', 'データベースと画像フォルダーの同期中'); +@define('SYNC_DONE', '終了しました (%s この画像を同期しました)'); +@define('FILE_NOT_FOUND', '%s とタイトルをつけられたファイルは既に削除されたため、恐らく見つけることができません。'); +@define('ABORT_NOW', '今中断する'); +@define('REMOTE_FILE_NOT_FOUND', 'ファイルはリモートサーバーにありませんでした。URL を確認しましたか: %s は正しいですか?'); +@define('FILE_FETCHED', '%s を %s として取得しました。'); +@define('FILE_UPLOADED', 'ファイル %s を %s としてアップロードすることに成功しました。'); +@define('WORD_OR', 'Or'); +@define('SCALING_IMAGE', '%s を %s×%s ピクセルに変換します。'); +@define('KEEP_PROPORTIONS', '比率を維持する'); +@define('REALLY_SCALE_IMAGE', '本当に画像を変換しますか? この操作は取り消すことができません!'); +@define('TOGGLE_ALL', 'すべて展開に切り替え'); +@define('TOGGLE_OPTION', 'オプションに切り替え'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'このエントリを購読する'); +@define('UNSUBSCRIBE_OK', "%s は今、このエントリの購読を取り消しました。"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', '購読済みエントリ "%s" に新規コメントです'); +@define('SUBSCRIPTION_MAIL', "こんにちは %s さん。\n監視中のエントリに新しいコメントが作成されました。\n\nブログ名:\n%s\nエントリ名:\n%s\n\n下記でエントリを見つけることができます:\n%s\n\n下記のリンクをクリックすると購読解除することができます:\n%s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Hello %s,\n\nA new trackback was added to the entry you are monitoring on \"%s\", entitled \"%s\"\nThe name of the poster is: %s\n\nYou can find the entry here: %s\n\nYou can unsubscribe by clicking on this link: %s\n"); +@define('SIGNATURE', "\n-- \n%s は Serendipityを使っています。\n最良の blog を探しているなら を見てください。"); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 フィード'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 フォード'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 フィード'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 コメント'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 フィード'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', '"managingEditor" フィールド'); +@define('SYNDICATION_PLUGIN_WEBMASTER', '"webMaster" フィールド'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'RSS feed の画像'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', '画像の幅'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', '画像の高さ'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'ウェブマスターの電子メールアドレスで、入力すると有効になります (空にすると隠します) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', '管理編集者の電子メールアドレスで、入力すると有効になります (空にすると隠します) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'GIF/JPEG/PNG 形式の画像の URL で、入力すると有効になります (空にすると serendipity ロゴ)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', '最大 144 ピクセルです。'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', '最大 400 ピクセルです。'); +@define('SYNDICATION_PLUGIN_TTL', '"ttl" フィールド(生存期間)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Amount of minutes after which your blog should not be cached any more by foreign sites/applications (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', '"pubDate" フィールド'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Should the "pubDate"-field be embedded for a RSS-channel, to show the date of the latest entry?'); +@define('CONTENT', '内容'); +@define('TYPE', '種類'); +@define('DRAFT', '草稿'); +@define('PUBLISH', '公開'); +@define('PREVIEW', 'プレビュー'); +@define('DATE', '日付'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', '警告: 指定した日付は無効です。「YYYY-MM-DD HH:MM」の書式を与えなければなりません。'); +@define('CATEGORY_PLUGIN_DESC', 'カテゴリの一覧を表示します。'); +@define('ALL_AUTHORS', 'すべての執筆者'); +@define('CATEGORIES_TO_FETCH', 'カテゴリを取得'); +@define('CATEGORIES_TO_FETCH_DESC', 'どの執筆者のカテゴリを取得しますか?'); +@define('PAGE_BROWSE_ENTRIES', 'ページ %s/%s, 合計 %s エントリ'); +@define('PREVIOUS_PAGE', '前のページ'); +@define('NEXT_PAGE', '次のページ'); +@define('ALL_CATEGORIES', 'すべてのカテゴリ'); +@define('DO_MARKUP', 'マークアップ変換を行う'); +@define('GENERAL_PLUGIN_DATEFORMAT', '日付書式'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'エントリの実際の日付の書式です。PHP の strftime() 値を使用します (デフォルト: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'テンプレートファイルを開けません。serendipity をアップデートしてください!'); +@define('ADVANCED_OPTIONS', '高度なオプション'); +@define('EDIT_ENTRY', 'エントリ編集'); +@define('HTACCESS_ERROR', 'To check your local webserver installation, serendipity needs to be able to write the file ".htaccess". This was not possible because of permission errors. Please adjust the permissions like this:
  %s
and reload this page.'); +@define('SIDEBAR_PLUGINS', 'サイドバープラグイン'); +@define('EVENT_PLUGINS', 'イベントプラグイン'); +@define('SORT_ORDER', 'ソート順'); +@define('SORT_ORDER_NAME', 'ファイル名'); +@define('SORT_ORDER_EXTENSION', 'ファイル拡張子'); +@define('SORT_ORDER_SIZE', 'ファイルサイズ'); +@define('SORT_ORDER_WIDTH', '画像の幅'); +@define('SORT_ORDER_HEIGHT', '画像の高さ'); +@define('SORT_ORDER_DATE', 'アップロード日付'); +@define('SORT_ORDER_ASC', '昇順'); +@define('SORT_ORDER_DESC', '降順'); +@define('THUMBNAIL_SHORT', 'サムネイル'); +@define('ORIGINAL_SHORT', 'オリジナル'); +@define('APPLY_MARKUP_TO', '%s へのマークアップを適用します。'); +@define('CALENDAR_BEGINNING_OF_WEEK', '週の開始曜日'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity は現在のインストール済みバージョン %s の設定を検出しました。しかし serendipity 自身はバージョン %s としてインストールされています。ここをクリックしてアップグレードする必要があります!'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'やあ、Serendipity アップグレードエージェントにようこそ。'); +@define('SERENDIPITY_UPGRADER_PURPOSE', '私は Serendipity %s をアップグレードインストールするのを助けるためにここに居ます。'); +@define('SERENDIPITY_UPGRADER_WHY', '今 Serendipity %s をインストールしましたが、まだこのバージョンに適したデータベースをアップグレードインストールしていないのでこのメッセージを見ています。'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'データベースアップデート (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', '次の.sqlファイルを見つけました。Serendipity の通常動作を継続すること可能にするには、それを実行する必要があります'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', '特定バージョンのタスク'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', '特定バージョンのタスクバージョンが見つかりませんでした。'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', '上記タスクを行うことを望みますか?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'いいえ、手動で実行します。'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'はい、そうしてください'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'アップグレードの実行を必要としないように見えます。'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', '改良された Serendipity にアップグレードしました。'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', ' +Serendipity のアップグレードステージを無視しました。正しいデータベースが確実にインストールされ、スケジュール機能を実行します。'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'あなたの Serendipity は今バージョン %s にアップグレードしました。'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', '%sここ%s をクリックするとブログに戻ることができます。'); +@define('MANAGE_USERS', 'ユーザー管理'); +@define('CREATE_NEW_USER', '新規ユーザーを追加する'); +@define('CREATE_NOT_AUTHORIZED', 'あなたと同じユーザーレベルのユーザーを修正することは出来ません。'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'あなたより高いユーザーレベルを持ったユーザを作ることができません。'); +@define('CREATED_USER', '新規ユーザー %s を作成しました。'); +@define('MODIFIED_USER', 'ユーザー %s のプロパティを変更しました。'); +@define('USER_LEVEL', 'ユーザーレベル'); +@define('DELETE_USER', 'You are about to delete user #%d %s. Are you serious? This will disallow showing any entries written by him on the frontend.'); +@define('DELETED_USER', 'ユーザー ID #%d の %s を削除しました。'); +@define('LIMIT_TO_NUMBER', 'どれだけの項目を表示しますか?'); +@define('ENTRIES_PER_PAGE', 'ページ毎のエントリ'); +@define('XML_IMAGE_TO_DISPLAY', 'XML ボタン'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Links to XML Feeds will be displayed by this image. Leave empty for default, enter \'none\' to disable.'); + +@define('DIRECTORIES_AVAILABLE', 'In the list of available subdirectories you can click on any directory name to create a new directory within that structure.'); +@define('ALL_DIRECTORIES', 'すべてのディレクトリ'); +@define('MANAGE_DIRECTORIES', 'ディレクトリ管理'); +@define('DIRECTORY_CREATED', 'ディレクトリ %s を作成しました。'); +@define('PARENT_DIRECTORY', '親ディレクトリ'); +@define('CONFIRM_DELETE_DIRECTORY', '本当にディレクトリ %s の内容をすべて削除しますか?'); +@define('ERROR_NO_DIRECTORY', 'エラー: ディレクトリ %s がありません'); +@define('CHECKING_DIRECTORY', 'ディレクトリ %s 内のファイルを調べています'); +@define('DELETING_FILE', 'ファイル %s を削除中...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', '空でないディレクトリは削除できません。もし同様にファイルを削除したければチェックボックス「強制削除する」をチェックし、もう一度送信してください.存在するファイルは次の通りです:'); +@define('DIRECTORY_DELETE_FAILED', 'ディレクトリ %s の削除に失敗しました。パーミッションか上野メッセージを調べてください。'); +@define('DIRECTORY_DELETE_SUCCESS', 'ディレクトリ %s の削除に成功しました。'); +@define('SKIPPING_FILE_EXTENSION', 'ファイルを飛ばします: %s は拡張子がありません。'); +@define('SKIPPING_FILE_UNREADABLE', 'ファイルを飛ばします: %s は読み込めません。'); +@define('FOUND_FILE', '新規/修正されたファイルを見つけました: %s.'); +@define('ALREADY_SUBCATEGORY', '%s は %s のサブカテゴリに既に存在します。'); +@define('PARENT_CATEGORY', '親カテゴリ'); +@define('IN_REPLY_TO', '返信先指定'); +@define('TOP_LEVEL', 'トップレベル'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s フィード'); +@define('PERMISSIONS', '許可'); +@define('SETTINGS_SAVED_AT', '新しい設定は %s に保存されました。'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'データベース設定'); +@define('INSTALL_CAT_DB_DESC', 'ここですべてのデータベース情報を入力できます。Serendipity が機能するためにこれが必要です。'); +@define('INSTALL_DBTYPE', 'データベースタイプ'); +@define('INSTALL_DBTYPE_DESC', 'データベースの種類を指定します。'); +@define('INSTALL_DBHOST', 'データベースホスト'); +@define('INSTALL_DBHOST_DESC', 'データベースサーバーのホスト名を指定します。'); +@define('INSTALL_DBUSER', 'データベースユーザー'); +@define('INSTALL_DBUSER_DESC', 'データベースの接続に使用するユーザー名を指定します。'); +@define('INSTALL_DBPASS', 'データベースパスワード'); +@define('INSTALL_DBPASS_DESC', '上のユーザー名と一致するパスワードを指定します。'); +@define('INSTALL_DBNAME', 'データベース名'); +@define('INSTALL_DBNAME_DESC', '使用するデータベース名を指定します。'); +@define('INSTALL_DBPREFIX', 'データベーステーブル接頭語'); +@define('INSTALL_DBPREFIX_DESC', 'テーブル名の接頭語を指定します。例えば「serendipity_」です。'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'パス'); +@define('INSTALL_CAT_PATHS_DESC', '各種パスに必要なフォルダーとファイルを指定します。ディレクトリには末尾にスラッシュを忘れないでください!'); +@define('INSTALL_FULLPATH', 'フルパス'); +@define('INSTALL_FULLPATH_DESC', 'serendipity をインストールした絶対フルパスです。'); +@define('INSTALL_UPLOADPATH', 'アップロードパス'); +@define('INSTALL_UPLOADPATH_DESC', 'すべてのアップロードはここに来ます。「フルパス\」への相対パス - 通常「uploads/」です。'); +@define('INSTALL_RELPATH', '相対パス'); +@define('INSTALL_RELPATH_DESC', 'ブラウザーで使用する serendipity のパスです。通常「/serendipity/」 です。'); +@define('INSTALL_RELTEMPLPATH', '相対テンプレートパス'); +@define('INSTALL_RELTEMPLPATH_DESC', 'テンプレートが含まれるフォルダーへのパスです - 「相対パス」への相対です。'); +@define('INSTALL_RELUPLOADPATH', '相対アップロードパス path'); +@define('INSTALL_RELUPLOADPATH_DESC', 'ブラウザからのアップロードのパスです - 「相対パス」への相対です。'); +@define('INSTALL_URL', 'ブログの URL'); +@define('INSTALL_URL_DESC', 'serendipity をインストールしたベース URL'); +@define('INSTALL_INDEXFILE', 'インデックスファイル'); +@define('INSTALL_INDEXFILE_DESC', 'serendipity インデックスファイルの名前'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', '大域設定'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Serendipity がどのように振舞うかカスタマイズします。'); +@define('INSTALL_USERNAME', '管理者ユーザー名'); +@define('INSTALL_USERNAME_DESC', '管理者ログインのユーザー名を指定します。'); +@define('INSTALL_PASSWORD', '管理者パスワード'); +@define('INSTALL_PASSWORD_DESC', '管理者ログインのパスワードを指定します。'); +@define('INSTALL_EMAIL', '管理者電子メール'); +@define('INSTALL_EMAIL_DESC', 'ブログ管理者の電子メールを指定します。'); +@define('INSTALL_SENDMAIL', '管理者にメールを送信しますか?'); +@define('INSTALL_SENDMAIL_DESC', 'エントリにコメントが投稿されたとき、電子メールを受信しますか?'); +@define('INSTALL_SUBSCRIBE', 'ユーザーのエントリの購読を許可しますか?'); +@define('INSTALL_SUBSCRIBE_DESC', 'ユーザーがエントリを購読し、かつ新しいコメントがそのエントリへ作られた場合、そのメイルを受け取ることを許可します。'); +@define('INSTALL_BLOGNAME', 'ブログの名前'); +@define('INSTALL_BLOGNAME_DESC', 'ブログの題名を記述します。'); +@define('INSTALL_BLOGDESC', 'ブログの説明'); +@define('INSTALL_BLOGDESC_DESC', 'ブログについての紹介文を記述します。'); +@define('INSTALL_LANG', '言語'); +@define('INSTALL_LANG_DESC', 'ブログの言語を選択します。'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', '外観とオプション'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Serendipity のルックアンドフィールをカスタマイズ'); +@define('INSTALL_WYSIWYG', 'WYSIWYG エディタを使う'); +@define('INSTALL_WYSIWYG_DESC', 'WYSIWYG エディタを使用しますか? (実行には IE5 以上か+、Mozilla 1.3 以上が必要です)'); +@define('INSTALL_XHTML11', '強制的に XHTML 1.1 準拠'); +@define('INSTALL_XHTML11_DESC', '強制で XHTML 1.1 準拠にします (第 4 世代より古いブラウザーのフロントエンド・バックエンドの問題を起こすかもしれません。)'); +@define('INSTALL_POPUP', 'ポップアップウィンドウを有効'); +@define('INSTALL_POPUP_DESC', 'コメントやトラックバックにポップアップウィンドウを使用しますか?'); +@define('INSTALL_EMBED', 'serendipity を組み込みで使用しますか?'); +@define('INSTALL_EMBED_DESC', 'If you want to embed serendipity within a regular page, set to true to discard any headers and just print the contents. You can make use of the indexFile option to use a wrapper class where you put your normal webpage headers. より詳しい情報はファイル README を参照してください!'); +@define('INSTALL_TOP_AS_LINKS', 'トップの退出/リファラーのリンクを表示しますか?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"いいえ": Exits and Referrers are shown as plain text to prevent google spam. "yes": Exits and Referrers are shown as hyperlinks. "デフォルト": 大域設定をの設定を使用します(推奨)'); +@define('INSTALL_BLOCKREF', 'リファラーブロック'); +@define('INSTALL_BLOCKREF_DESC', 'Are there any special hosts you want not to show up in the referers list? ホスト名の一覧を「;」で列挙し、そのホスト名が部分一致でブロックされることに注意してください!'); +@define('INSTALL_REWRITE', 'URL 書き換え'); +@define('INSTALL_REWRITE_DESC', 'Select which rules you wish to use when generating URLs. Enabling rewrite rules will make pretty URLs for your blog and make it better indexable for spiders like google. The webserver needs to support either mod_rewrite or "AllowOverride All" for your serendipity dir. The default setting is auto-detected'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', '画像変換設定'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'serendipity がどのようにイメージを扱わなければならないかに関する一般的な情報を入力します。'); +@define('INSTALL_IMAGEMAGICK', 'Imagemagick を使う'); +@define('INSTALL_IMAGEMAGICK_DESC', 'image magick がインストール済みで、それを使って画像のリサイズをしたいですか?'); +@define('INSTALL_IMAGEMAGICKPATH', 'convert バイナリへのパス'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'image magic convert バイナリのフルパスと名前'); +@define('INSTALL_THUMBSUFFIX', 'サムネイル接尾辞'); +@define('INSTALL_THUMBSUFFIX_DESC', 'サムネイルは次の書式で指定されるでしょう: オリジナル.[接尾辞].拡張子'); +@define('INSTALL_THUMBWIDTH', 'サムネイルの大きさ'); +@define('INSTALL_THUMBWIDTH_DESC', '自動生成するサムネイルの不変の最大幅'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', '個人情報の詳細'); +@define('USERCONF_CAT_PERSONAL_DESC', '個人情報の詳細を変更します。'); +@define('USERCONF_USERNAME', 'ユーザー名'); +@define('USERCONF_USERNAME_DESC', 'ブログにログインするときに使うユーザー名を指定します。'); +@define('USERCONF_PASSWORD', 'パスワード'); +@define('USERCONF_PASSWORD_DESC', 'ブログにログインするときに使うパスワードを指定します。'); +@define('USERCONF_EMAIL', '電子メールアドレス'); +@define('USERCONF_EMAIL_DESC', '個人の電子メールアドレスをしていします。'); +@define('USERCONF_SENDCOMMENTS', 'コメント告知を送信しますか?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'コメントをあなたのエントリが受けたとき、電子メールを受信しますか?'); +@define('USERCONF_SENDTRACKBACKS', 'トラックバック告知を送信しますか?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'トラックバックをあなたのエントリが受けたとき、電子メールを受信しますか?'); +@define('USERCONF_ALLOWPUBLISH', '権限: エントリを公開しますか?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'このユーザーがエントリを公開することを許可しますか?'); +@define('SUCCESS', 'Success'); +@define('POWERED_BY_SHOW_TEXT', 'テキストとして "Serendipity" を表示する'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'テキストとして "Serendipity Weblog" を表示するでしょう。'); +@define('POWERED_BY_SHOW_IMAGE', '"Serendipity" とロゴを表示'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Serendipity ロゴを表示します。'); +@define('PLUGIN_ITEM_DISPLAY', 'どこで項目を表示するべきですか?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', '拡張エントリのみ表示'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', '概要ページのみ表示'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', '常に表示'); +@define('RSS_IMPORT_CATEGORY', '一致しなかったインポートしたエントリはこのカテゴリを使用する'); + +@define('COMMENTS_WILL_BE_MODERATED', '送信されたコメントは表示する前にもでレーションされるでしょう。'); +@define('YOU_HAVE_THESE_OPTIONS', '次のオプションが利用可能です:'); +@define('THIS_COMMENT_NEEDS_REVIEW', '警告: このコメントは表示する前に認証が必要です'); +@define('DELETE_COMMENT', 'コメントを削除'); +@define('APPROVE_COMMENT', 'コメントを承認'); +@define('REQUIRES_REVIEW', 'レビューが必須'); +@define('COMMENT_APPROVED', 'コメント #%s の承認に成功しました。'); +@define('COMMENT_DELETED', 'コメント #%s の削除に成功しました。'); +@define('COMMENTS_MODERATE', 'このエントリのコメントとトラックバックにはモデレーションが必要'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', '警告: このトラックバックは表示する前に認証が必要です。'); +@define('DELETE_TRACKBACK', 'トラックバックを削除'); +@define('APPROVE_TRACKBACK', 'トラックバックを承認'); +@define('TRACKBACK_APPROVED', 'トラックバック #%s の承認に成功しました。'); +@define('TRACKBACK_DELETED', 'トラックバック #%s の削除に成功しました。'); +@define('VIEW', '閲覧'); +@define('COMMENT_ALREADY_APPROVED', 'コメント #%s は既に承認されたようです。'); +@define('COMMENT_EDITED', '選択されたコメントを編集しました。'); +@define('HIDE', '隠す'); +@define('VIEW_EXTENDED_ENTRY', '"%s" の続きを読む...'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'このリンクは、クリックされるのが目的ではありません。それは、このエントリ用のトラックバック URIを含んでいます。You can use this URI to send ping- & trackbacks from your own blog to this entry. このリンクをコピーするには、Internet Explorer の場合右クリックを、「ショートカットをコピー」を選択します。Mozilla の場合「リンクロケーションをコピー」を選択します。'); +@define('PLUGIN_SUPERUSER_HTTPS', 'ログインに https を使う'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'ログインの https ロケーションへのリンクポイントです。ウェブサーバーがこれをサポートしている必要があります!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', '外部リンクをクリック可能にしますか?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"いいえ": Unchecked external links (Top Exits, Top Referrers, User comments) are not shown/shown as plain text where applicable to prevent google spam (recommended). "はい": Unchecked external links are shown as hyperlinks. Can be overridden within sidebar plugin configuration!'); +@define('PAGE_BROWSE_COMMENTS', 'ページ %s/%s, 合計 %s コメント'); +@define('FILTERS', 'フィルター'); +@define('FIND_ENTRIES', 'エントリ検索'); +@define('FIND_COMMENTS', 'コメント検索'); +@define('FIND_MEDIA', 'メディア検索'); +@define('FILTER_DIRECTORY', 'ディレクトリ'); +@define('SORT_BY', 'ソート基準'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'トラックバックを送信しませんでした: %s のポート番号 %s に接続できませんでした。'); +@define('MEDIA', 'メディア'); +@define('MEDIA_LIBRARY', 'メディアライブラリ'); +@define('ADD_MEDIA', 'メディア追加'); +@define('ENTER_MEDIA_URL', '取得するファイルの URL を入力:'); +@define('ENTER_MEDIA_UPLOAD', 'あなたがアップロードしたいファイルを選択:'); +@define('SAVE_FILE_AS', '保存するファイル名:'); +@define('STORE_IN_DIRECTORY', '次のディレクトリの中に保管: '); +@define('ADD_MEDIA_BLAHBLAH', 'メディアリポジトリにファイルを追加します:

ここでメディアファイルをアップロードするか、ウェブ中のどこかからそれらを取得するように私に命じることができます! If you don\'t have an appropriate image, search for images on google matching your thoughts, the results are often useful and funny :)

選択方法:
'); +@define('MEDIA_RENAME', 'このファイルの名称を変更する'); +@define('IMAGE_RESIZE', 'この画像の大きさを変更する'); +@define('MEDIA_DELETE', 'このファイルを削除する'); +@define('FILES_PER_PAGE', 'ページ毎のファイル数'); +@define('CLICK_FILE_TO_INSERT', '追加したいファイルをクリック:'); +@define('SELECT_FILE', '追加するファイルを選択'); +@define('MEDIA_FULLSIZE', 'フルサイズ'); +@define('CALENDAR_BOW_DESC', 'その週の始めと考えるべき週の曜日です。デフォルトは「Monday(月曜日)」です。'); +@define('SUPERUSER', 'ブログ管理'); +@define('ALLOWS_YOU_BLAHBLAH', 'ブログ管理のサイドバーにリンクを提供します。'); +@define('CALENDAR', 'カレンダ'); +@define('SUPERUSER_OPEN_ADMIN', '管理画面を開く'); +@define('SUPERUSER_OPEN_LOGIN', 'ログイン画面を開く'); +@define('INVERT_SELECTIONS', '選択を反転'); +@define('COMMENTS_DELETE_CONFIRM', '本当に選択したコメントを削除しますか?'); +@define('COMMENT_DELETE_CONFIRM', 'コメント番号 #%d で %s が書いたコメントを本当に削除しますか?'); +@define('DELETE_SELECTED_COMMENTS', '選択したコメントの削除'); +@define('VIEW_COMMENT', 'コメント閲覧'); +@define('VIEW_ENTRY', 'エントリ閲覧'); +@define('DELETE_FILE_FAIL' , 'ファイル %s を削除できませんでした。'); +@define('DELETE_THUMBNAIL', '%s というタイトルの画像サムネイルを削除しました。'); +@define('DELETE_FILE', '%s というタイトルのファイルを削除しました。'); +@define('ABOUT_TO_DELETE_FILE', '%sを削除します。
もしこのファイルをエントリで使用していた場合、リンク切れや表示で気ない画像の原因になるでしょう。
本当に進みますか?

'); +@define('TRACKBACK_SENDING', 'URI %s にトラックバックを送信中...'); +@define('TRACKBACK_SENT', 'トラックバック成功'); +@define('TRACKBACK_FAILED', 'トラックバック失敗: %s'); +@define('TRACKBACK_NOT_FOUND', 'トラックバック URI が見つかりません。'); +@define('TRACKBACK_URI_MISMATCH', '自動検出されたトラックバック URI はターゲット URI と一致しません。'); +@define('TRACKBACK_CHECKING', 'トラックバックが可能か %s を検査中...'); +@define('TRACKBACK_NO_DATA', '対象はデータが含まれませんでした。'); +@define('TRACKBACK_SIZE', 'ターゲット URI は最大ファイルサイズ %s を超過しました。'); +@define('COMMENTS_VIEWMODE_THREADED', 'スレッド'); +@define('COMMENTS_VIEWMODE_LINEAR', '一覧'); +@define('DISPLAY_COMMENTS_AS', 'コメント表示形式'); +@define('COMMENTS_FILTER_SHOW', '表示'); +@define('COMMENTS_FILTER_ALL', 'すべて'); +@define('COMMENTS_FILTER_APPROVED_ONLY', '承認済みのみ'); +@define('COMMENTS_FILTER_NEED_APPROVAL', '承認待ち'); +@define('RSS_IMPORT_BODYONLY', 'すべてのエントリは「本文」セクションに置き、拡張エントリセクションに分割しない'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'RSS フィー土中で拡張本文とすべての記事を表示する'); +@define('WEEK', '週'); +@define('WEEKS', '週'); +@define('MONTHS', '月'); +@define('DAYS', '日'); +@define('ARCHIVE_FREQUENCY', 'カレンダ項目の周期'); +@define('ARCHIVE_FREQUENCY_DESC', 'リストの中で各項目間で使用するカレンダー間隔'); +@define('ARCHIVE_COUNT', '一覧中の項目の数'); +@define('ARCHIVE_COUNT_DESC', '表示する月・週または日の合計数'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', '以下にインストール済みのプラグインの一覧があります。'); +@define('SIDEBAR_PLUGIN', 'サイドバープラグイン'); +@define('EVENT_PLUGIN', 'イベントプラグイン'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', '新しい %s をインストールする'); +@define('VERSION', 'バージョン'); +@define('INSTALL', 'インストール'); +@define('ALREADY_INSTALLED', '既にインストール済みです。'); +@define('SELECT_A_PLUGIN_TO_ADD', 'インストールしたいプラグインを選択する'); +@define('INSTALL_OFFSET', 'サーバー時間差'); +@define('STICKY_POSTINGS', 'スティッキ投稿'); +@define('INSTALL_FETCHLIMIT', 'フロントページにエントリを表示する'); +@define('INSTALL_FETCHLIMIT_DESC', '各ページでフロントエンドに表示するエントリの数'); +@define('IMPORT_ENTRIES', 'インポートデータ'); +@define('EXPORT_ENTRIES', 'エクスポートエントリ'); +@define('IMPORT_WELCOME', 'ようこそ Serendipity のインポートユーティリティへ'); +@define('IMPORT_WHAT_CAN', 'ここで、他のウェブログソフトウェアアプリケーションからエントリをインポートすることができます。'); +@define('IMPORT_SELECT', 'あなたがインポートしたいソフトウェアを選択してください。'); +@define('IMPORT_PLEASE_ENTER', '下に要求されたデータを入力してください。'); +@define('IMPORT_NOW', '今すぐインポート!'); +@define('IMPORT_STARTING', 'インポート手続きをはじめました...'); +@define('IMPORT_FAILED', 'インポートに失敗しました。'); +@define('IMPORT_DONE', 'インポートに完了し成功しました。'); +@define('IMPORT_WEBLOG_APP', 'Weblog アプリケーション'); +@define('IMPORT_NOTES', '注:'); +@define('EXPORT_FEED', 'フル RSS フィードをエクスポートする'); +@define('STATUS', 'インポート後の状況'); +@define('IMPORT_GENERIC_RSS', '一般的な RSS をインポートする'); +@define('ACTIVATE_AUTODISCOVERY', 'エントリで見つたリンクにトラックバックを送る'); +@define('WELCOME_TO_ADMIN', 'ようこそ Serendipity の管理スイートへ'); +@define('PLEASE_ENTER_CREDENTIALS', 'ログイン情報を下記に入力してください。'); +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); +@define('INSTALL_USEGZIP', 'ページの gzip 圧縮を使う'); +@define('INSTALL_USEGZIP_DESC', 'ページの送信を高速化するために、ブラウザーがこれをサポートするなら、訪問者へ送るページを圧縮することができます。これが推奨です。'); +@define('INSTALL_SHOWFUTURE', '未来のエントリを表示する'); +@define('INSTALL_SHOWFUTURE_DESC', 'もし有効にしたならブログは未来を含むすべてのエントリを表示するでしょう。デフォルトはそれらのエントリを隠し、公開日が到来したらそれらを表示します。'); +@define('INSTALL_DBPERSISTENT', '継続的接続を使用する'); +@define('INSTALL_DBPERSISTENT_DESC', '継続的データベース接続の使用法を有効にします。詳しいことは ここ を参照してください。これは通常使用することを推奨しません。'); +@define('NO_IMAGES_FOUND', '画像が見つかりません。'); +@define('PERSONAL_SETTINGS', '個人設定'); +@define('REFERER', 'リファラー'); +@define('NOT_FOUND', '見つかりません'); +@define('WRITABLE', '書き込み可能'); +@define('NOT_WRITABLE', '書き込み不可能'); +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); +@define('SELECT_INSTALLATION_TYPE', 'どのインストールタイプの使用を希望するか選択してください。'); +@define('WELCOME_TO_INSTALLATION', 'ようこそ Serendipity のインストール画面へ'); +@define('FIRST_WE_TAKE_A_LOOK', 'まず初めに、現在の設定を見てごんな互換性の問題があるか分析を試みます。'); +@define('ERRORS_ARE_DISPLAYED_IN', 'エラーは %s で、推奨は %s で、成功は %s で表示されます。'); +@define('RED', '赤'); +@define('YELLOW', '黄'); +@define('GREEN', '緑'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s インストール作業前の報告'); +@define('RECOMMENDED', '推奨'); +@define('ACTUAL', '実際'); +@define('PHPINI_CONFIGURATION', 'php.ini 設定'); +@define('PHP_INSTALLATION', 'PHP インストール'); +@define('THEY_DO', 'それを行う'); +@define('THEY_DONT', 'それを行わない'); +@define('SIMPLE_INSTALLATION', '簡単なインストール作業を行う'); +@define('EXPERT_INSTALLATION', '上級者のインストール作業を行う'); +@define('COMPLETE_INSTALLATION', 'インストール作業を完了する'); +@define('WONT_INSTALL_DB_AGAIN', '再度データベースをインストールしないでしょう。'); +@define('CHECK_DATABASE_EXISTS', 'データベースとテーブルが既に存在するか確認します。'); +@define('CREATING_PRIMARY_AUTHOR', '主要な執筆者 \'%s\' を作成中'); +@define('SETTING_DEFAULT_TEMPLATE', 'デフォルトテンプレート設定'); +@define('INSTALLING_DEFAULT_PLUGINS', 'デフォルトプラグインのインストール'); +@define('SERENDIPITY_INSTALLED', 'Serendipity のインストールに成功しました。'); +@define('VISIT_BLOG_HERE', 'ここからあなたの新しいブログに訪問できます。'); +@define('THANK_YOU_FOR_CHOOSING', 'Serendipity を選んでくれてありがとうございます。'); +@define('ERROR_DETECTED_IN_INSTALL', 'インストール作業でエラーを検知しました。'); +@define('OPERATING_SYSTEM', 'オペレーションシステム'); +@define('WEBSERVER_SAPI', 'ウェブサーバー SAPI'); +@define('TEMPLATE_SET', '\'%s\' をアクティブテンプレートに設定しました。'); +@define('SEARCH_ERROR', 'サーチ機能は期待通りに働きませんでした。このブログの管理者に通知します: これはデータベースにインデックスキーがないから起きるのかもしれません。MySQLシステムにおいては、あなたのデータベース・ユーザアカウントがこの照会を実行する特権のある必要があります:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
データベースから返された特定のエラーはこの通りです:
%s
'); +@define('EDIT_THIS_CAT', '"%s" 編集中'); +@define('CATEGORY_REMAINING', 'このカテゴリーを削除し、このカテゴリーへのそのエントリーを移動させます。'); +@define('CATEGORY_INDEX', '下記にあなたのエントリに利用可能なカテゴリの一覧があります。'); +@define('NO_CATEGORIES', 'カテゴリがありません'); +@define('RESET_DATE', 'データリセット'); +@define('RESET_DATE_DESC', '現在の時刻への日付をリセットするにはここをクリックしてください。'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'パーミッションはシェルコマンドの実行で設定することができます: `%s` on the failed directory, or by setting this using an FTP program'); +@define('WARNING_TEMPLATE_DEPRECATED', '警告: あなたの現在のテンプレートは非常に古いテンプレート方法を使用しています。可能なかぎり更新を提案します。'); +@define('ENTRY_PUBLISHED_FUTURE', 'このエントリはまだ公開されていません。'); +@define('ENTRIES_BY', '%s のエントリ一覧'); +@define('PREVIOUS', '前へ'); +@define('NEXT', '次へ'); +@define('APPROVE', '承認'); +@define('DO_MARKUP_DESCRIPTION', 'マークアップ変換をテキストに適用します (顔文字、「*」、「/」、「_」などのマークアップショートカット。無効にするとテキスト中のどんな HTML コードも保持します。デフォルトは「はい」です。'); +@define('CATEGORY_ALREADY_EXIST', '"%s" という名前のカテゴリは既に存在します。'); +@define('ERROR_FILE_FORBIDDEN', 'アクティブコンテンツのファイルをアップロードすることを認められていません。'); +@define('ADMIN', '管理'); +@define('ADMIN_FRONTPAGE', 'フロントページ'); +@define('QUOTE', '引用'); +@define('IFRAME_SAVE', 'Serendipity はをエントリ保存中で、トラックバックの作成と可能な限り XML-RPC 呼び出しを実行中です。これは時間がかかるかもしれません...'); +@define('IFRAME_SAVE_DRAFT', 'このエントリの草稿を保存しました。'); +@define('IFRAME_PREVIEW', 'Serendipity はエントリのプレビューを作成中です...'); +@define('IFRAME_WARNING', 'ブラウザーが iframe をサポートしていません。serendipity_config.inc.php ファイルを開いて、$serendipity[\'use_iframe\'] を FALSE に設定してください。'); +@define('NONE', 'なし'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', '新規エントリのデフォルト設定'); +@define('UPGRADE', 'アップグレード'); +@define('UPGRADE_TO_VERSION', 'バージョン %s へアップグレード'); +@define('DELETE_DIRECTORY', 'ディレクトリの削除'); +@define('DELETE_DIRECTORY_DESC', 'メディアファイル(恐らくあなたのエントリのうちのいくつかの中で使用されるファイル)を含むディレクトリの内容を削除をします。'); +@define('FORCE_DELETE', 'Serendipity でこのディレクトリ中の未知のものを含むファイルをすべて削除します。'); +@define('CREATE_DIRECTORY', 'ディレクトリの作成'); +@define('CREATE_NEW_DIRECTORY', '新規ディレクトリの作成'); +@define('CREATE_DIRECTORY_DESC', 'ここで、メディアファイルを中へ保存めに新しいディレクトリを作成することができます。新しいディレクトリの名前を選び、それを保存するオプションと親ディレクトリを選択します。'); +@define('BASE_DIRECTORY', 'ベースディレクトリ'); +@define('USERLEVEL_EDITOR_DESC', '標準の編集者'); +@define('USERLEVEL_CHIEF_DESC', 'チーフ編集者'); +@define('USERLEVEL_ADMIN_DESC', '管理者'); +@define('USERCONF_USERLEVEL', 'アクセスレベル'); +@define('USERCONF_USERLEVEL_DESC', 'このレベルはこのユーザがウェブログに対してどういう種類のアクセスを持つか決定するため使用されます。'); +@define('USER_SELF_INFO', '%s としてログイン中 (%s)'); +@define('ADMIN_ENTRIES', 'エントリ'); +@define('RECHECK_INSTALLATION', 'インストールの再検査'); +@define('IMAGICK_EXEC_ERROR', '実行できませんでした: "%s", エラー: %s, 返り値: %d'); +@define('INSTALL_OFFSET_DESC', 'ウェブサーバー(現在: %clock%)と希望の時間帯の時差を入力します。'); +@define('UNMET_REQUIREMENTS', '要求に失敗: %s'); +@define('CHARSET', '文字セット'); +@define('AUTOLANG', '訪問者が使用するブラウザーのデフォルト言語'); +@define('AUTOLANG_DESC', 'もし有効にしたならエントリとインターフェースの言語の決定は訪問者のブラウザーの言語設定を使用します。'); +@define('INSTALL_AUTODETECT_URL', '自動検知に HTTP-Host を使う'); +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'HTML 実体への自動変換を試みますか?'); +@define('EMPTY_SETTING', '%s の値が正しく指定されていません!'); +@define('USERCONF_REALNAME', '本名'); +@define('USERCONF_REALNAME_DESC', '著作者のフルネームです。これは読者に見える名前です。'); +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', '取得方法:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'サーバーへ画像をダウンロード'); +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', '電子メールアドレスを表示しますか?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/lang/serendipity_lang_ko.inc.php b/lang/serendipity_lang_ko.inc.php new file mode 100644 index 0000000..76a41d6 --- /dev/null +++ b/lang/serendipity_lang_ko.inc.php @@ -0,0 +1,673 @@ + + + +@define('LANG_CHARSET', 'UTF-8'); +@define('DATE_LOCALES', 'korean, ko, ko_KR'); +@define('DATE_FORMAT_ENTRY', '%Y-%m-%d %a'); +@define('DATE_FORMAT_SHORT', '%Y-%m-%d %H:%M'); +@define('WYSIWYG_LANG', 'en'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', '.'); +@define('NUMBER_FORMAT_THOUSANDS', ','); +@define('LANG_DIRECTION', 'ltr'); + + +@define('SERENDIPITY_ADMIN_SUITE', 'Serendipity Administration Suite'); +@define('HAVE_TO_BE_LOGGED_ON', 'You have to be logged in to view this page'); +@define('WRONG_USERNAME_OR_PASSWORD', 'You appear to have entered an invalid username or password'); +@define('APPEARANCE', 'Appearance'); +@define('MANAGE_STYLES', 'Manage styles'); +@define('CONFIGURE_PLUGINS', 'Configure Plugins'); + + +@define('CONFIGURATION', 'Configuration'); +@define('BACK_TO_BLOG', 'Back to Weblog'); +@define('LOGIN', 'Login'); +@define('LOGOUT', 'Logout'); +@define('LOGGEDOUT', 'Logged out.'); +@define('CREATE', 'Create'); +@define('SAVE', 'Save'); +@define('NAME', '이름'); +@define('CREATE_NEW_CAT', 'Create New Category'); +@define('I_WANT_THUMB', 'I want to use the thumbnail in my entry.'); +@define('I_WANT_BIG_IMAGE', 'I want to use the larger image in my entry.'); +@define('I_WANT_NO_LINK', ' I want to display it as an image'); +@define('I_WANT_IT_TO_LINK', 'I want to display it as a link to this url:'); +@define('BACK', 'Back'); +@define('FORWARD', 'Forward'); +@define('ANONYMOUS', '익명'); +@define('NEW_TRACKBACK_TO', 'New trackback made to'); +@define('NEW_COMMENT_TO', 'New comment posted to'); +@define('RECENT', '최근…'); +@define('OLDER', '순서…'); +@define('DONE', 'Done'); +@define('WELCOME_BACK', 'Welcome back,'); +@define('TITLE', 'Title'); +@define('DESCRIPTION', 'Description'); +@define('PLACEMENT', 'Placement'); +@define('DELETE', 'Delete'); +@define('SAVE', 'Save'); +@define('UP', 'UP'); +@define('DOWN', 'DOWN'); +@define('ENTRIES', 'entries'); +@define('NEW_ENTRY', 'New entry'); +@define('EDIT_ENTRIES', 'Edit entries'); +@define('CATEGORIES', '목록'); +@define('WARNING_THIS_BLAHBLAH', "WARNING:\\nThis may take a long time if there are many images without thumbnails."); +@define('CREATE_THUMBS', 'Rebuild Thumbs'); +@define('MANAGE_IMAGES', 'Manage images'); +@define('NAME', '이름'); +@define('EMAIL', '이메일'); +@define('HOMEPAGE', '홈페이지'); +@define('COMMENT', '꼬리말'); +@define('REMEMBER_INFO', '이름, 이메일, 홈페이지 기억하기'); +@define('SUBMIT_COMMENT', '등록'); +@define('NO_ENTRIES_TO_PRINT', '곧 새로운 글이 찾아옵니다. 화려한 컴백을 기대하세요'); +@define('COMMENTS', '꼬리말'); +@define('ADD_COMMENT', '꼬리말 쓰기'); +@define('NO_COMMENTS', '꼬리말 없습니다'); +@define('POSTED_BY', '글쓴 지구인:'); +@define('ON', 'on'); +@define('A_NEW_COMMENT_BLAHBLAH', 'A new comment has been posted on your blog "%s", in the entry entitled "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'A new trackback has been made to your blog-entry entitled "%s".'); +@define('NO_CATEGORY', 'No Category'); +@define('ENTRY_BODY', 'Entry Body'); +@define('EXTENDED_BODY', 'Extended Body'); +@define('CATEGORY', 'Category'); +@define('EDIT', 'Edit'); +@define('NO_ENTRIES_BLAHBLAH', 'No Entries Found for Query %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Your search for %s returned %s results:'); +@define('SEARCH_TOO_SHORT', 'Your search-query must be longer than 3 characters'); +@define('IMAGE', 'Image'); +@define('ERROR_FILE_NOT_EXISTS', 'Error: Old filename doesn\'t exist!'); +@define('ERROR_FILE_EXISTS', 'Error: New filename already used, pick another!'); +@define('ERROR_SOMETHING', 'Error: Something\'s wrong.'); +@define('ADDING_IMAGE', 'Adding image...'); +@define('THUMB_CREATED_DONE', 'Thumbnail created.
Done.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Error: File already exists on your machine!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Unknown error occured, file not uploaded. Maybe your filesize is larger than the maximum size allowed by your server installation. Check with your ISP or edit your php.ini file to allow larger file size uploads.'); +@define('GO', 'Go!'); +@define('NEWSIZE', 'New size: '); +@define('RESIZE_BLAHBLAH', 'Resize %s

'); +@define('ORIGINAL_SIZE', 'Original size: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Here, you can adjust the image size. If you want to resize the image proportionally, just enter a value in one of the two boxes and press the TAB key -- I\'ll automatically calculate the new size so the image proportions don\'t get messed up

'); +@define('QUICKJUMP_CALENDAR', 'QuickJump Calendar'); +@define('QUICKSEARCH', '빨리찾기'); +@define('SEARCH_FOR_ENTRY', 'Search for an entry'); +@define('ARCHIVES', '문서 저장고'); +@define('BROWSE_ARCHIVES', 'Browse archives by month'); +@define('TOP_REFERRER', 'Top Referrers'); +@define('SHOWS_TOP_SITES', 'Shows top sites that linked to your blogs'); +@define('TOP_EXITS', 'Top Exits'); +@define('SHOWS_TOP_EXIT', 'Shows top exit links from your blogs'); +@define('SYNDICATION', 'Syndication'); +@define('SHOWS_RSS_BLAHBLAH', 'Shows RSS syndication links'); +@define('ADVERTISES_BLAHBLAH', 'Advertises the origins of your blog'); +@define('HTML_NUGGET', 'HTML Nugget'); +@define('HOLDS_A_BLAHBLAH', 'Holds a nugget of HTML in your sidebar'); +@define('TITLE_FOR_NUGGET', 'Title for the nugget'); +@define('THE_NUGGET', 'The Nugget of HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Syndicate This Blog'); +@define('YOU_CHOSE', 'You chose %s'); +@define('IMAGE_ROTATE_LEFT', 'Rotate image 90 degrees counter-clockwise'); +@define('IMAGE_ROTATE_RIGHT', 'Rotate image 90 degrees clockwise'); +@define('IMAGE_SIZE', 'Image size'); +@define('IMAGE_AS_A_LINK', 'Image insertion'); +@define('POWERED_BY', '저작권'); +@define('TRACKBACKS', '전달하기'); +@define('TRACKBACK', '전달하기'); +@define('NO_TRACKBACKS', '아무도 이글을 전달을 안했군요!'); +@define('TOPICS_OF', 'Topics from'); +@define('VIEW_FULL', 'view full'); +@define('VIEW_TOPICS', 'view topics'); +@define('AT', 'at'); +@define('SET_AS_TEMPLATE', 'Set as template'); +@define('IN', 'in'); +@define('EXCERPT', 'Excerpt'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Link to entry'); +@define('LINK_TO_REMOTE_ENTRY', 'Link to remote-entry'); +@define('IP_ADDRESS', 'IP-address'); +@define('USER', 'User'); +@define('THUMBNAIL_USING_OWN', 'Using %s as it\'s own thumbnail because it is so small already.'); +@define('THUMBNAIL_FAILED_COPY', 'Wanted to use %s as it\'s own thumbnail, but failed to copy!'); +@define('AUTHOR', 'Author'); +@define('LAST_UPDATED', 'Last Updated'); +@define('TRACKBACK_SPECIFIC', 'Trackback specific URI for this entry'); +@define('DIRECT_LINK', 'Direct link to this entry'); +@define('COMMENT_ADDED', '꼬리말이 성공적으로 등록되었습니다.'); +@define('COMMENT_ADDED_CLICK', 'Click %shere to return%s to the comments, and %shere to close%s this window.'); +@define('COMMENT_NOT_ADDED', '꼬리말을 달수 없습니다.'); +@define('COMMENT_NOT_ADDED_CLICK', 'Click %shere to return%s to the comments, and %shere to close%s this window.'); +@define('COMMENTS_DISABLE', 'Do not allow comments to this entry'); +@define('COMMENTS_ENABLE', 'Allow comments to this entry'); +@define('COMMENTS_CLOSED', 'The author does not allow comments to this entry'); +@define('EMPTY_COMMENT', 'Your comment did not contain anything, please %sgo back%s and try again'); +@define('ENTRIES_FOR', 'Entries from %s'); +@define('DOCUMENT_NOT_FOUND', 'The document %s was not found.'); +@define('USERNAME', 'Username'); +@define('PASSWORD', 'Password'); +@define('AUTOMATIC_LOGIN', 'Save information'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity installation'); +@define('LEFT', 'left'); +@define('RIGHT', 'right'); +@define('HIDDEN', 'hidden'); +@define('REMOVE_TICKED_PLUGINS', 'Remove ticked plugins'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Save changes to layout'); +@define('COMMENTS_FROM', 'Comments from'); +@define('ERROR', 'Error'); +@define('ENTRY_SAVED', 'Your entry has been saved'); +@define('DELETE_SURE', 'Are you sure you want to delete #%s permanently?'); +@define('NOT_REALLY', 'Not really...'); +@define('DUMP_IT', 'Dump it!'); +@define('RIP_ENTRY', 'R.I.P. entry #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Category #%s deleted. Old articles moved to category #%s'); +@define('CATEGORY_DELETED', 'Category #%s deleted.'); +@define('INVALID_CATEGORY', 'No category was provided for deletion'); +@define('CATEGORY_SAVED', 'Category saved'); +@define('SELECT_TEMPLATE', 'Select the template you wish to use for your blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Entries were not successfully inserted!'); +@define('MT_DATA_FILE', 'Movable Type data file'); +@define('FORCE', 'Force'); +@define('CREATE_AUTHOR', 'Create author \'%s\'.'); +@define('CREATE_CATEGORY', 'Create category \'%s\'.'); +@define('MYSQL_REQUIRED', 'You must have the MySQL extension in order to perform this action.'); +@define('COULDNT_CONNECT', 'Could not connect to MySQL database: %s.'); +@define('COULDNT_SELECT_DB', 'Could not select database: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Could not select user information: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Could not select category information: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Could not select entry information: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Could not select comment information: %s.'); +@define('YES', 'Yes'); +@define('NO', 'No'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Check & save'); +@define('DIRECTORY_WRITE_ERROR', 'Can\'t write to directory %s. Check permissions.'); +@define('DIRECTORY_CREATE_ERROR', 'Directory %s does not exist and could not be created. Please manually create the directory'); +@define('DIRECTORY_RUN_CMD', ' -> run %s %s'); +@define('CANT_EXECUTE_BINARY', 'Can\'t execute the %s binary'); +@define('FILE_WRITE_ERROR', 'Can\'t write to file %s.'); +@define('FILE_CREATE_YOURSELF', 'Please create the file yourself or check permissions'); +@define('COPY_CODE_BELOW', '
* Just copy the code below and place it in %s in your %s folder:
%s
' . "\n"); +@define('WWW_USER', 'Change www to the user apache runs as (i.e. nobody).'); +@define('BROWSER_RELOAD', 'Once you\'ve done this, hit your browser\'s "reload" button.'); +@define('DIAGNOSTIC_ERROR', 'We detected some errors while running some diagnostics on your entered information:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity is not yet installed. Please install it now.'); +@define('INCLUDE_ERROR', 'serendipity error: could not include %s - exiting.'); +@define('DATABASE_ERROR', 'serendipity error: unable to connect to database - exiting.'); +@define('CREATE_DATABASE', 'Creating default database setup...'); +@define('ATTEMPT_WRITE_FILE', 'Attemping to write %s file...'); +@define('WRITTEN_N_SAVED', 'Configuration written & saved'); +@define('IMAGE_ALIGNMENT', 'Image alignment'); +@define('ENTER_NEW_NAME', 'Enter the new name for: '); +@define('RESIZING', 'Resizing'); +@define('RESIZE_DONE', 'Done (resized %s images).'); +@define('SYNCING', 'Synchronizing the database with the image folder'); +@define('SYNC_DONE', 'Done (Synchronized %s images).'); +@define('FILE_NOT_FOUND', 'Unable to locate the file entitled %s, maybe it has already been deleted?'); +@define('ABORT_NOW', 'Abort now'); +@define('REMOTE_FILE_NOT_FOUND', 'File was not located on the remote server, are you sure the URL: %s is correct?'); +@define('FILE_FETCHED', '%s fetched as %s'); +@define('FILE_UPLOADED', 'File %s successfully uploaded as %s'); +@define('WORD_OR', 'Or'); +@define('SCALING_IMAGE', 'Scaling %s to %s x %s px'); +@define('KEEP_PROPORTIONS', 'Keep proportions'); +@define('REALLY_SCALE_IMAGE', 'Really scale the image? This operation cannot be undone!'); +@define('TOGGLE_ALL', 'Toggle expand all'); +@define('TOGGLE_OPTION', 'Toggle option'); +@define('SUBSCRIBE_TO_THIS_ENTRY', '꼬리말 이메일로 받기'); +@define('UNSUBSCRIBE_OK', "%s is now unsubscribed from this entry"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'New comment to subscribed entry "%s"'); +@define('SUBSCRIPTION_MAIL', "Hello %s,\n\nA new comment was made to the entry you are monitoring on \"%s\", entitled \"%s\"\nThe name of the poster is: %s\n\nYou can find the entry here: %s\n\nYou can unsubscribe by clicking on this link: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Hello %s,\n\nA new trackback was added to the entry you are monitoring on \"%s\", entitled \"%s\"\nThe name of the poster is: %s\n\nYou can find the entry here: %s\n\nYou can unsubscribe by clicking on this link: %s\n"); +@define('SIGNATURE', "\n-- \n%s is powered by Serendipity.\nThe best blog around, you can use it too.\nCheck out to find out how."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comments'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Field "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Field "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Image for the RSS feed'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Image width'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Image height'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-Mail address of the webmaster, if available. (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-Mail address of the managing editor, if available. (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL of an image in GIF/JPEG/PNG format, if available. (empty: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'in pixels, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'in pixels, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Field "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Amount of minutes after which your blog should not be cached any more by foreign sites/applications (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Field "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Should the "pubDate"-field be embedded for a RSS-channel, to show the date of the latest entry?'); +@define('CONTENT', 'Content'); +@define('TYPE', 'Type'); +@define('DRAFT', 'Draft'); +@define('PUBLISH', 'Publish'); +@define('PREVIEW', '미리보기'); +@define('DATE', 'Date'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Warning: The date you specified was invalid. It has to be given in YYYY-MM-DD HH:MM format.'); +@define('CATEGORY_PLUGIN_DESC', 'Shows the list of categories.'); +@define('ALL_AUTHORS', 'All authors'); +@define('CATEGORIES_TO_FETCH', 'Categories to fetch'); +@define('CATEGORIES_TO_FETCH_DESC', 'Fetch categories from which author?'); +@define('PAGE_BROWSE_ENTRIES', '페이지 %s of %s, 총 %s 입력'); +@define('PREVIOUS_PAGE', '이전 제이지'); +@define('NEXT_PAGE', '다음 제이지'); +@define('ALL_CATEGORIES', '모든목록'); +@define('DO_MARKUP', 'Perform Markup Transformations'); +@define('DO_MARKUP_DESCRIPTION', 'Apply markup transformations to the text (smilies, shortcut markups via *, /, _, ...). Disabling this will preserve any HTML-code in the text.'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Dateformatting'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'The format of the entry\'s actual date, using PHPs strftime() variables. (Default: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Unable to open template file, please update serendipity!'); +@define('ADVANCED_OPTIONS', 'Advanced Options'); +@define('EDIT_ENTRY', 'Edit entry'); +@define('HTACCESS_ERROR', 'To check your local webserver installation, serendipity needs to be able to write the file ".htaccess". This was not possible because of permission errors. Please adjust the permissions like this:
  %s
and reload this page.'); +@define('SIDEBAR_PLUGINS', 'Sidebar Plugins'); +@define('EVENT_PLUGINS', 'Event Plugins'); +@define('SORT_ORDER', 'Sort order'); +@define('SORT_ORDER_NAME', 'Filename'); +@define('SORT_ORDER_EXTENSION', 'File extension'); +@define('SORT_ORDER_SIZE', 'Filesize'); +@define('SORT_ORDER_WIDTH', 'Image width'); +@define('SORT_ORDER_HEIGHT', 'Image height'); +@define('SORT_ORDER_DATE', 'Upload date'); +@define('SORT_ORDER_ASC', 'Ascending'); +@define('SORT_ORDER_DESC', 'Descending'); +@define('THUMBNAIL_SHORT', 'Thumb'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Apply markup to %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Beginning of the week'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity has detected that your configuration is currently installed with version %s, however serendipity itself is installed as version %s, you need to upgrade! Click here'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Hi, and welcome to the Serendipity upgrade agent.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'I am here to help you upgrade your Serendipity %s installation.'); +@define('SERENDIPITY_UPGRADER_WHY', 'You are seeing this message because you have just installed Serendipity %s, but have not yet upgraded your database installation to fit this version'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Database updates (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'I have found the following .sql files which needs to be run before you can continue normal operation of Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Version specific tasks'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'No version specific tasks found'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Do you wish me to perform the above tasks?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'No, I will run them manually'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Yes, please do so'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'It appears you do not need any upgrades run'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Consider Serendipity upgraded'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'You have ignored the upgrade stage of Serendipity, please make sure your database is correctly installed, and scheduled functions are run'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Your Serendipity installation is now upgraded to version %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'You can return to your blog by clicking %shere%s'); +@define('MANAGE_USERS', 'Manage users'); +@define('CREATE_NEW_USER', 'Create new user'); +@define('CREATE_NOT_AUTHORIZED', 'You cannot modify users with the same userlevel as yourself'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'You cannot create users with a higher userlevel than yourself'); +@define('CREATED_USER', 'A new user %s has been created'); +@define('MODIFIED_USER', 'The properties of user %s have been changed'); +@define('USER_LEVEL', 'Userlevel'); +@define('DELETE_USER', 'You are about to delete user #%d %s. Are you serious? This will disallow showing any entries written by him on the frontend.'); +@define('DELETED_USER', 'User #%d %s deleted.'); +@define('LIMIT_TO_NUMBER', 'How many items should be displayed?'); +@define('ENTRIES_PER_PAGE', 'entries per page'); +@define('XML_IMAGE_TO_DISPLAY', 'XML Button'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Links to XML Feeds will be displayed by this image. Leave empty for default, enter \'none\' to disable.'); + +@define('DIRECTORIES_AVAILABLE', 'In the list of available subdirectories you can click on any directory name to create a new directory within that structure.'); +@define('ALL_DIRECTORIES', 'all directories'); +@define('MANAGE_DIRECTORIES', 'Manage directories'); +@define('DIRECTORY_CREATED', 'Directory %s has been created.'); +@define('PARENT_DIRECTORY', 'Parent directory'); +@define('CONFIRM_DELETE_DIRECTORY', 'Are you sure you want to remove all the contents of directory %s?'); +@define('ERROR_NO_DIRECTORY', 'Error: Directory %s does not exist'); +@define('CHECKING_DIRECTORY', 'Checking files in directory %s'); +@define('DELETING_FILE', 'Deleting file %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Could not remove non-empty directory. Check the "force deletion" checkbox if you want to remove those files as well, and then submit again. Existing files are:'); +@define('DIRECTORY_DELETE_FAILED', 'Deletion of directory %s failed. Check permissions or messages above.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Directory %s successfully deleted.'); +@define('SKIPPING_FILE_EXTENSION', 'Skipping file: Missing extension on %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Skipping file: %s not readable.'); +@define('FOUND_FILE', 'Found new/modified file: %s.'); +@define('ALREADY_SUBCATEGORY', '%s is a already a subcategory of %s.'); +@define('PARENT_CATEGORY', 'Parent category'); +@define('IN_REPLY_TO', '답글하기'); +@define('TOP_LEVEL', '첫째목록'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'Permissions'); +@define('SETTINGS_SAVED_AT', 'The new settings have been saved at %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Database settings'); +@define('INSTALL_CAT_DB_DESC', 'Here you can enter all your database information. Serendipity needs this to be able to function'); +@define('INSTALL_DBTYPE', 'Database type'); +@define('INSTALL_DBTYPE_DESC', 'Database type'); +@define('INSTALL_DBHOST', 'Database host'); +@define('INSTALL_DBHOST_DESC', 'The hostname for your database server'); +@define('INSTALL_DBUSER', 'Database user'); +@define('INSTALL_DBUSER_DESC', 'The username used to connect to your database'); +@define('INSTALL_DBPASS', 'Database password'); +@define('INSTALL_DBPASS_DESC', 'The password matching the above username'); +@define('INSTALL_DBNAME', 'Database name'); +@define('INSTALL_DBNAME_DESC', 'The name of your database'); +@define('INSTALL_DBPREFIX', 'Database table prefix'); +@define('INSTALL_DBPREFIX_DESC', 'Prefix for the table names, i.e. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Paths'); +@define('INSTALL_CAT_PATHS_DESC', 'Various paths to different essential folders and files. Don\'t forget trailing slashes for directories!'); +@define('INSTALL_FULLPATH', 'Full path'); +@define('INSTALL_FULLPATH_DESC', 'The full and absolute path to your serendipity installation'); +@define('INSTALL_UPLOADPATH', 'Upload path'); +@define('INSTALL_UPLOADPATH_DESC', 'All uploads will go here, relative to the \'Full path\' - typically \'uploads/\''); +@define('INSTALL_RELPATH', 'Relative path'); +@define('INSTALL_RELPATH_DESC', 'Path to serendipity for your browser, typically \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Relative template path'); +@define('INSTALL_RELTEMPLPATH_DESC', 'The path to the folder containing your templates - Relative to the \'relative path\''); +@define('INSTALL_RELUPLOADPATH', 'Relative upload path'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Path to your uploads for browsers - Relative to the \'relative path\''); +@define('INSTALL_URL', 'URL to blog'); +@define('INSTALL_URL_DESC', 'Base URL to your serendipity installation'); +@define('INSTALL_INDEXFILE', 'Index file'); +@define('INSTALL_INDEXFILE_DESC', 'The name of your serendipity index file'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'General settings'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Customize how Serendipity behaves'); +@define('INSTALL_USERNAME', 'Admin username'); +@define('INSTALL_USERNAME_DESC', 'Username for admin login'); +@define('INSTALL_PASSWORD', 'Admin password'); +@define('INSTALL_PASSWORD_DESC', 'Password for admin login'); +@define('INSTALL_EMAIL', 'Admin email'); +@define('INSTALL_EMAIL_DESC', 'Email for the blog administrator'); +@define('INSTALL_SENDMAIL', 'Send mails to admin?'); +@define('INSTALL_SENDMAIL_DESC', 'Do you want to receive emails when comments are posted to your entries?'); +@define('INSTALL_SUBSCRIBE', 'Allow users to subscribe to entries?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Allow users to subscribe to an entry and thereby receive a mail when new comments are made to that entry'); +@define('INSTALL_BLOGNAME', 'Blog name'); +@define('INSTALL_BLOGNAME_DESC', 'The title of your blog'); +@define('INSTALL_BLOGDESC', 'Blog description'); +@define('INSTALL_BLOGDESC_DESC', 'Description of your blog'); +@define('INSTALL_LANG', 'Language'); +@define('INSTALL_LANG_DESC', 'Select the language for your blog'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Appearance and options'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Customize how Serendipity looks and feels'); +@define('INSTALL_WYSIWYG', 'Use WYSIWYG editor'); +@define('INSTALL_WYSIWYG_DESC', 'Do you want to use the WYSIWYG editor? (Works on IE5+, partially in Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Force XHTML 1.1 compliance'); +@define('INSTALL_XHTML11_DESC', 'Do you want to force XHTML 1.1 compliance (may cause problems for back-/frontend on older 4th generation browsers)'); +@define('INSTALL_POPUP', 'Enable use of popup windows'); +@define('INSTALL_POPUP_DESC', 'Do you want to use popup windows for comments, trackbacks et al?'); +@define('INSTALL_EMBED', 'Is serendipity embedded?'); +@define('INSTALL_EMBED_DESC', 'If you want to embed serendipity within a regular page, set to true to discard any headers and just print the contents. You can make use of the indexFile option to use a wrapper class where you put your normal webpage headers. See the README file for more information!'); +@define('INSTALL_TOP_AS_LINKS', 'Show Top Exits/Referrers as links?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"no": Exits and Referrers are shown as plain text to prevent google spam. "yes": Exits and Referrers are shown as hyperlinks. "default": Use setting from global configuration (recommended).'); +@define('INSTALL_BLOCKREF', 'Blocked Referers'); +@define('INSTALL_BLOCKREF_DESC', 'Are there any special hosts you want not to show up in the referers list? Separate the list of hostnames with \';\' and note that the host is blocked by substring matches!'); +@define('INSTALL_REWRITE', 'URL Rewriting'); +@define('INSTALL_REWRITE_DESC', 'Select which rules you wish to use when generating URLs. Enabling rewrite rules will make pretty URLs for your blog and make it better indexable for spiders like google. The webserver needs to support either mod_rewrite or "AllowOverride All" for your serendipity dir. The default setting is auto-detected'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Imageconversion Settings'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Enter general information about how serendipity should handle Images'); +@define('INSTALL_IMAGEMAGICK', 'Use Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Do you have image magick installed and want to use it to resize images?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Path to convert binary'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Full path & name of your image magick convert binary'); +@define('INSTALL_THUMBSUFFIX', 'Thumbnail suffix'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Thumbnails will be named with the following format: original.[suffix].ext'); +@define('INSTALL_THUMBWIDTH', 'Thumbnail dimensions'); +@define('INSTALL_THUMBWIDTH_DESC', 'Static maximum width of auto-generated thumbnails'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Your personal details'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Change your personal details'); +@define('USERCONF_USERNAME', 'Your username'); +@define('USERCONF_USERNAME_DESC', 'The username you use to log in to the blog'); +@define('USERCONF_PASSWORD', 'Your password'); +@define('USERCONF_PASSWORD_DESC', 'The password you wish to use to log in to the blog'); +@define('USERCONF_EMAIL', 'Your e-mail address'); +@define('USERCONF_EMAIL_DESC', 'Your personal e-mail address'); +@define('USERCONF_SENDCOMMENTS', 'Send comment announcements?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Do you want to receive emails when comments are posted to your entries?'); +@define('USERCONF_SENDTRACKBACKS', 'Send trackback announcements?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Do you want to receive emails when trackbacks are posted to your entries?'); +@define('USERCONF_ALLOWPUBLISH', 'Rights: Publishing entries?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Is this user allowed to publish entries?'); +@define('SUCCESS', 'Success'); +@define('POWERED_BY_SHOW_TEXT', 'Show "Serendipity" as text'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Will display "Serendipity Weblog" as text'); +@define('POWERED_BY_SHOW_IMAGE', 'Show "Serendipity" with a logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Displays the Serendipity logo'); +@define('PLUGIN_ITEM_DISPLAY', 'Where should the item be displayed?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Extended entry only'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Overview page only'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'All times'); +@define('RSS_IMPORT_CATEGORY', 'Use this category for non-matching imported entries'); + +@define('COMMENTS_WILL_BE_MODERATED', 'Submitted comments will be subject to moderation before being displayed.'); +@define('YOU_HAVE_THESE_OPTIONS', 'You have the following options available:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Warning: This comment needs approval before it will be displayed'); +@define('DELETE_COMMENT', 'Delete comment'); +@define('APPROVE_COMMENT', 'Approve comment'); +@define('REQUIRES_REVIEW', 'Requires review'); +@define('COMMENT_APPROVED', 'Comment #%s has successfully been approved'); +@define('COMMENT_DELETED', 'Comment #%s has successfully been deleted'); +@define('COMMENTS_MODERATE', 'Comments & trackbacks to this entry requires moderation'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Warning: This trackback needs approval before it will be displayed'); +@define('DELETE_TRACKBACK', 'Delete trackback'); +@define('APPROVE_TRACKBACK', 'Approve trackback'); +@define('TRACKBACK_APPROVED', 'Trackback #%s has successfully been approved'); +@define('TRACKBACK_DELETED', 'Trackback #%s has successfully been deleted'); +@define('VIEW', 'View'); +@define('COMMENT_ALREADY_APPROVED', 'Comment #%s appears to already have been approved'); +@define('COMMENT_EDITED', 'The selected comment has been edited'); +@define('HIDE', 'Hide'); +@define('VIEW_EXTENDED_ENTRY', 'Continue reading "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'This link is not meant to be clicked. It contains the trackback URI for this entry. You can use this URI to send ping- & trackbacks from your own blog to this entry. To copy the link, right click and select "Copy Shortcut" in Internet Explorer or "Copy Link Location" in Mozilla.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Use https for login'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Lets the login-link point to a https-location. Your webserver needs to support this!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Make external links clickable?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": Unchecked external links (Top Exits, Top Referrers, User comments) are not shown/shown as plain text where applicable to prevent google spam (recommended). "yes": Unchecked external links are shown as hyperlinks. Can be overridden within sidebar plugin configuration!'); +@define('PAGE_BROWSE_COMMENTS', 'Page %s of %s, totalling %s comments'); +@define('FILTERS', 'Filters'); +@define('FIND_ENTRIES', 'Find entries'); +@define('FIND_COMMENTS', 'Find comments'); +@define('FIND_MEDIA', 'Find media'); +@define('FILTER_DIRECTORY', 'Directory'); +@define('SORT_BY', 'Sort by'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'No Trackback sent: Could not open connection to %s on port %d'); +@define('MEDIA', 'Media'); +@define('MEDIA_LIBRARY', 'Media library'); +@define('ADD_MEDIA', 'Add media'); +@define('ENTER_MEDIA_URL', 'Enter an URL of a file to fetch:'); +@define('ENTER_MEDIA_UPLOAD', 'Select a file you wish to upload:'); +@define('SAVE_FILE_AS', 'Save the file as:'); +@define('STORE_IN_DIRECTORY', 'Store inside the following directory: '); +@define('ADD_MEDIA_BLAHBLAH', 'Add a file to your media repository:

Here you can upload mediafiles, or tell me to fetch them from somewhere in the web! If you don\'t have an appropriate image, search for images on google matching your thoughts, the results are often useful and funny :)

Select method:
'); +@define('MEDIA_RENAME', 'Rename this file'); +@define('IMAGE_RESIZE', 'Resize this image'); +@define('MEDIA_DELETE', 'Delete this file'); +@define('FILES_PER_PAGE', 'Files per page'); +@define('CLICK_FILE_TO_INSERT', 'Click the file you want to insert:'); +@define('SELECT_FILE', 'Select file to insert'); +@define('MEDIA_FULLSIZE', 'Fullsize'); +@define('CALENDAR_BOW_DESC', 'The day of the week that should be considered the beginning of the week. Default is Monday'); +@define('SUPERUSER', 'Blog Administration'); +@define('ALLOWS_YOU_BLAHBLAH', 'Provides a link in the sidebar to your blog administration'); +@define('CALENDAR', '달력'); +@define('SUPERUSER_OPEN_ADMIN', 'Open administration'); +@define('SUPERUSER_OPEN_LOGIN', 'Open login screen'); +@define('INVERT_SELECTIONS', 'Invert Selections'); +@define('COMMENTS_DELETE_CONFIRM', 'Are you sure you wish to delete the selected comments?'); +@define('COMMENT_DELETE_CONFIRM', 'Are you sure you wish to delete comment #%d, written by %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Delete selected comments'); +@define('VIEW_COMMENT', 'View comment'); +@define('VIEW_ENTRY', 'View entry'); +@define('DELETE_FILE_FAIL', 'Unable to delete file %s'); +@define('DELETE_THUMBNAIL', 'Deleted the image thumbnail entitled %s'); +@define('DELETE_FILE', 'Deleted the file entitled %s'); +@define('ABOUT_TO_DELETE_FILE', 'You are about to delete %s
If you are using this file in some of your entries, it will cause dead links or images
Are you sure you wish to proceed?

'); +@define('TRACKBACK_SENDING', 'Sending trackback to URI %s...'); +@define('TRACKBACK_SENT', 'Trackback successful'); +@define('TRACKBACK_FAILED', 'Trackback failed: %s'); +@define('TRACKBACK_NOT_FOUND', 'No trackback-URI found.'); +@define('TRACKBACK_URI_MISMATCH', 'The autodiscovered trackback URI does not match our target URI.'); +@define('TRACKBACK_CHECKING', 'Checking %s for possible trackbacks...'); +@define('TRACKBACK_NO_DATA', 'Target contained no data'); +@define('TRACKBACK_SIZE', 'Target URI exceeded maximum filesize of %s bytes.'); +@define('COMMENTS_VIEWMODE_THREADED', '답글'); +@define('COMMENTS_VIEWMODE_LINEAR', '연대순'); +@define('DISPLAY_COMMENTS_AS', '답글 형식'); +@define('COMMENTS_FILTER_SHOW', 'Show'); +@define('COMMENTS_FILTER_ALL', 'All'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Only approved'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Pending approval'); +@define('RSS_IMPORT_BODYONLY', 'Put all imported text in the "body" section and do not split up into "extended entry" section.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Show full articles with extended body inside RSS feed'); +@define('WEEK', 'Week'); +@define('WEEKS', 'Weeks'); +@define('MONTHS', 'Months'); +@define('DAYS', 'Days'); +@define('ARCHIVE_FREQUENCY', 'Calendar item frequency'); +@define('ARCHIVE_FREQUENCY_DESC', 'The calendar interval to use between each item in the list'); +@define('ARCHIVE_COUNT', 'Number of items in the list'); +@define('ARCHIVE_COUNT_DESC', 'The total number of months, weeks or days to display'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Below is a list of installed plugins'); +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); +@define('EVENT_PLUGIN', 'event plugin'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Click here to install a new %s'); +@define('VERSION', 'version'); +@define('INSTALL', 'Install'); +@define('ALREADY_INSTALLED', 'Already installed'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Select the plugin which you wish to install'); +@define('INSTALL_OFFSET', 'Server time Offset'); +@define('STICKY_POSTINGS', 'Sticky Postings'); +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); +@define('IMPORT_ENTRIES', 'Import data'); +@define('EXPORT_ENTRIES', 'Export entries'); +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); +@define('IMPORT_NOW', 'Import now!'); +@define('IMPORT_STARTING', 'Starting import procedure...'); +@define('IMPORT_FAILED', 'Import failed'); +@define('IMPORT_DONE', 'Import successfully completed'); +@define('IMPORT_WEBLOG_APP', 'Weblog application'); +@define('EXPORT_FEED', 'Export full RSS feed'); +@define('STATUS', 'Status after import'); +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); +@define('INSTALL_SHOWFUTURE', 'Show future entries'); +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); +@define('NO_IMAGES_FOUND', 'No images found'); +@define('PERSONAL_SETTINGS', 'Personal Settings'); +@define('REFERER', 'Referer'); +@define('NOT_FOUND', 'Not found'); +@define('WRITABLE', 'Writable'); +@define('NOT_WRITABLE', 'Not writable'); +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); +@define('RED', 'red'); +@define('YELLOW', 'yellow'); +@define('GREEN', 'green'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); +@define('RECOMMENDED', 'Recommended'); +@define('ACTUAL', 'Actual'); +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); +@define('PHP_INSTALLATION', 'PHP installation'); +@define('THEY_DO', 'they do'); +@define('THEY_DONT', 'they don\'t'); +@define('SIMPLE_INSTALLATION', 'Simple installation'); +@define('EXPERT_INSTALLATION', 'Expert installation'); +@define('COMPLETE_INSTALLATION', 'Complete installation'); +@define('WONT_INSTALL_DB_AGAIN', 'won\'t install the database again'); +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); +@define('OPERATING_SYSTEM', 'Operating system'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); +@define('EDIT_THIS_CAT', 'Editing "%s"'); +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); +@define('NO_CATEGORIES', 'No categories'); +@define('RESET_DATE', 'Reset date'); +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); +@define('ENTRIES_BY', 'Entries by %s'); +@define('PREVIOUS', 'Previous'); +@define('NEXT', 'Next'); +@define('APPROVE', 'Approve'); +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_nl.inc.php b/lang/serendipity_lang_nl.inc.php new file mode 100644 index 0000000..719542f --- /dev/null +++ b/lang/serendipity_lang_nl.inc.php @@ -0,0 +1,672 @@ + +# http://www.heimp.nl + +@define('LANG_CHARSET', 'ISO-8859-1'); +@define('DATE_LOCALES', 'dutch, nl_BE, nl, nl_BE.ISO8859-1'); +@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y'); +@define('DATE_FORMAT_SHORT', '%d-m%-%Y %H:%M'); +@define('WYSIWYG_LANG', 'nl'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', '.'); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Serendipity Beheer'); +@define('HAVE_TO_BE_LOGGED_ON', 'U moet zijn ingelogd om deze pagina te kunnen bekijken'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Waarschijnlijk heeft u een ongeldige gebruikersnaam of wachtwoord ingevoerd.'); +@define('APPEARANCE', 'Uiterlijk'); +@define('MANAGE_STYLES', 'Beheer stijlen'); +@define('CONFIGURE_PLUGINS', 'Configureer Plugins'); +@define('CONFIGURATION', 'Configuratie'); +@define('BACK_TO_BLOG', 'Terug naar het Weblog'); +@define('LOGIN', 'Aanmelden'); +@define('LOGOUT', 'Afmelden'); +@define('LOGGEDOUT', 'Afgemeld.'); +@define('CREATE', 'Aanmaken'); +@define('EDIT_THIS_CAT', 'Bewerken "%s - %s"'); +@define('SAVE', 'Opslaan'); +@define('NAME', 'Naam'); +@define('CREATE_NEW_CAT', 'Maak een nieuwe categorie aan'); +@define('I_WANT_THUMB', 'Ik wil graag een indexplaatje in mijn artikel gebruiken.'); +@define('I_WANT_BIG_IMAGE', 'Ik wil graag de volledige afbeeldingen in mijn artikel gebruiken.'); +@define('I_WANT_NO_LINK', ' Ik wil het graag laten weergeven als een afbeelding'); +@define('I_WANT_IT_TO_LINK', 'Ik wil het graag als een verwijzing weergeven naar de volgende pagina:'); +@define('BACK', 'Terug'); +@define('FORWARD', 'Verder'); +@define('ANONYMOUS', 'Anoniem'); +@define('NEW_TRACKBACK_TO', 'Nieuwe trackback gemaakt voor'); +@define('NEW_COMMENT_TO', 'Nieuwe reactie op'); +@define('RECENT', 'Recentelijk...'); +@define('OLDER', 'Ouder...'); +@define('DONE', 'Gedaan'); +@define('WELCOME_BACK', 'Welkom terug,'); +@define('TITLE', 'Onderwerp'); +@define('DESCRIPTION', 'Beschrijving'); +@define('PLACEMENT', 'Placement'); +@define('DELETE', 'Verwijderen'); +@define('SAVE', 'Opslaan'); +@define('UP', 'OP'); +@define('DOWN', 'NEER'); +@define('ENTRIES', 'inzendingen'); +@define('NEW_ENTRY', 'Nieuwe inzending'); +@define('EDIT_ENTRIES', 'Bewerk inzendingen'); +@define('CATEGORIES', 'Categorieën'); +@define('WARNING_THIS_BLAHBLAH', "WAARSCHUWING:\\nDit kan veel tijd in beslag nemen als er veel grote afbeeldingen zijn, zonder index-afbeelding."); +@define('CREATE_THUMBS', 'Creër nieuwe index-afbeeldingen'); +@define('MANAGE_IMAGES', 'Beheer afbeeldingen'); +@define('NAME', 'Naam'); +@define('EMAIL', 'E-mail'); +@define('HOMEPAGE', 'Webpagina'); +@define('COMMENT', 'Reactie'); +@define('REMEMBER_INFO', 'Onthoud Informatie? '); +@define('SUBMIT_COMMENT', 'Reactie plaatsen'); +@define('NO_ENTRIES_TO_PRINT', 'Er zijn geen inzendingen af te drukken'); +@define('COMMENTS', 'Reacties'); +@define('ADD_COMMENT', 'Reactie toevoegen'); +@define('NO_COMMENTS', 'Geen reacties'); +@define('POSTED_BY', 'Geplaatst door'); +@define('ON', 'aan'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Er is een nieuwe reactie geplaatst op uw Weblog "%s", op inzending met onderwerp "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Een nieuwe trackback naar uw website is aangemaakt naar uw Weblog-inzending met onderwerp "%s".'); +@define('NO_CATEGORY', 'Geen categorie'); +@define('ENTRY_BODY', 'Verkorte inzending'); +@define('EXTENDED_BODY', 'Uitgebreide inzending'); +@define('CATEGORY', 'Categorie'); +@define('EDIT', 'Bewerk'); +@define('NO_ENTRIES_BLAHBLAH', 'Er zijn geen inzendingen gevonden voor zoekopdracht %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Uw zoekopdracht naar %s heeft %s zoekresultaten opgeleverd:'); +@define('SEARCH_TOO_SHORT', 'Uw zoekopdracht moet uit meer dan 3 karakters bestaan'); +@define('IMAGE', 'Afbeelding'); +@define('ERROR_FILE_NOT_EXISTS', 'Fout: Oude bestandsnaam bestaat niet!'); +@define('ERROR_FILE_EXISTS', 'Fout: Nieuwe bestandsnaam is reeds in gebruik, kies een andere!'); +@define('ERROR_SOMETHING', 'Fout: Er gaat iets fout'); +@define('ADDING_IMAGE', 'Afbeelding toevoegen...'); +@define('THUMB_CREATED_DONE', 'Index-afbeelding gemaakt.
Succesvol.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Fout: Bestand bestaat al!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Er is een onbekende fout opgetreden, het bestand is niet verzonden. Misschien is het bestand groter dan uw server toestaat. Controlleer dit bij uw provider of bewerk uw php.ini zodat deze grotere bestanden toe laat.'); +@define('GO', 'Uitvoeren!'); +@define('NEWSIZE', 'Nieuwe grootte: '); +@define('RESIZE_BLAHBLAH', 'Vergroten/Verkleinen %s

'); +@define('ORIGINAL_SIZE', 'Originele grootte: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Hier kunt u de grootte van de afbeelding aanpassen. Als u de afbeeldingsverhoudingen wilt behouden, voer dan een waarde in een van de velden een grootte in en druk op de TAB-toets -- Het programma zal dan zelf de andere grootte berekenen zodat de verhoudingen hetzelfde blijven

'); +@define('QUICKJUMP_CALENDAR', 'Quickjump Kalender'); +@define('QUICKSEARCH', 'Zoeken'); +@define('SEARCH_FOR_ENTRY', 'Zoek naar een inzending'); +@define('ARCHIVES', 'Archief'); +@define('BROWSE_ARCHIVES', 'Doorzoek het archief, per maand'); +@define('TOP_REFERRER', 'Top Referrer'); +@define('SHOWS_TOP_SITES', 'Hier worden websites weergegeven die regelmatig naar uw website verwijzen of waar regelmatig lezers vandaan komen'); +@define('TOP_EXITS', 'Top Exits'); +@define('SHOWS_TOP_EXIT', 'Hier worden de, door u geplaatste, links getoond die regelmatig door uw lezers bekeken worden'); +@define('SYNDICATION', 'Syndication'); +@define('SHOWS_RSS_BLAHBLAH', 'Toont de RSS Syndication-Links'); +@define('ADVERTISES_BLAHBLAH', 'Toont een link waar anderen Serendipity software kunnen downloaden'); +@define('HTML_NUGGET', 'HTML Invoer'); +@define('HOLDS_A_BLAHBLAH', 'Een stukje waarin u uw eigen HTML-tekst kunt schrijven, deze verschijnt aan de zijkant'); +@define('TITLE_FOR_NUGGET', 'Naam van het stuk'); +@define('THE_NUGGET', 'The Nugget of HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Abonneren op dit weblog'); +@define('YOU_CHOSE', 'U heeft zich voor %s opgegeven'); +@define('IMAGE_ROTATE_LEFT', 'Roteer de afbeelding 90 graden tegen de klok in'); +@define('IMAGE_ROTATE_RIGHT', 'Roteer de afbeelding 90 degrees met de klok mee'); +@define('IMAGE_SIZE', 'Grootte van de afbeelding'); +@define('IMAGE_AS_A_LINK', 'Image insertion'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', 'Trackbacks'); +@define('TRACKBACK', 'Trackback'); +@define('NO_TRACKBACKS', 'Geen Trackbacks'); +@define('TOPICS_OF', 'Onderwerpen bij'); +@define('VIEW_FULL', 'bekijk volledig'); +@define('VIEW_TOPICS', 'bekijk onderwerpen'); +@define('AT', 'op'); +@define('SET_AS_TEMPLATE', 'Gebruik als template'); +@define('IN', 'in'); +@define('EXCERPT', 'Uittreksel'); +@define('TRACKED', 'Gevolgd'); +@define('LINK_TO_ENTRY', 'Link naar inzending'); +@define('LINK_TO_REMOTE_ENTRY', 'Link naar externe inzending'); +@define('IP_ADDRESS', 'IP-adres'); +@define('USER', 'Gebruiker'); +@define('THUMBNAIL_USING_OWN', 'Behoud %s als zijn eigen index-afbeelding, verkleinen is niet nodig.'); +@define('THUMBNAIL_FAILED_COPY', '%s kon niet gekopieërd worden, kan dus niet als index-afbeelding gebruikt worden!'); +@define('AUTHOR', 'Auteur'); +@define('LAST_UPDATED', 'Laatst begewerkt'); +@define('TRACKBACK_SPECIFIC', 'Trackback is een specifieke link naar deze inzending'); +@define('DIRECT_LINK', 'Directe link naar deze inzending'); +@define('COMMENT_ADDED', 'Uw reactie is succesvol toegevoegd. '); +@define('COMMENT_ADDED_CLICK', 'Klik %shier%s om terug te keren naar de reacties, of klik %shier%s om dit scherm af te sluiten.'); +@define('COMMENT_NOT_ADDED', 'Uw reactie kon niet worden toegevoegd omdat, deze functie voor deze inzending is uitgeschakeld. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Klik %shier%s om terug te keren naar de reacties, of klik %shier%s om dit scherm af te sluiten.'); +@define('COMMENTS_DISABLE', 'Sta geen reacties toe op deze inzending'); +@define('COMMENTS_ENABLE', 'Sta reacties toe op deze inzending'); +@define('COMMENTS_CLOSED', 'De auteur staat het niet toe te reageren op deze inzending'); +@define('EMPTY_COMMENT', 'Uw reactie bevatte geen tekst, gaat u alstublieft %sterug%s en probeer opnieuw'); +@define('ENTRIES_FOR', 'Inzendingen voor %s'); +@define('DOCUMENT_NOT_FOUND', 'Het document %s is helaas niet gevonden.'); +@define('USERNAME', 'Gebruikersnaam'); +@define('PASSWORD', 'Wachtwoord'); +@define('AUTOMATIC_LOGIN', 'Bewaar deze informatie'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity installatie'); +@define('LEFT', 'links'); +@define('RIGHT', 'rechts'); +@define('HIDDEN', 'verborgen'); +@define('REMOVE_TICKED_PLUGINS', 'Verwijder geselecteerde plugins'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Bewaar veranderingn in ontwerp'); +@define('COMMENTS_FROM', 'Reactie van'); +@define('ERROR', 'Fout'); +@define('ENTRY_SAVED', 'Uw inzending is bewaard'); +@define('DELETE_SURE', 'Weet u zeker dat u inzending #%s definitief wilt verwijderen?'); +@define('NOT_REALLY', 'Niet echt...'); +@define('DUMP_IT', 'Verwijder maar!'); +@define('RIP_ENTRY', 'Inzending #%s is verwijderd'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Categorie #%s is verwijderd. Aanwezige inzendingen zijn verplaatst naar categorie #%s'); +@define('CATEGORY_DELETED', 'Categorie #%s is verwijderd.'); +@define('CATEGORY_REMAINING', 'Verwijder deze categorie en verplaatst de inzendingen naar categorie: %s'); +@define('INVALID_CATEGORY', 'Er is geen categorie opgegeven om te verwijderen'); +@define('CATEGORY_SAVED', 'Categorie is opgeslagen'); +@define('SELECT_TEMPLATE', 'Selecteer een template dat u wenst te gebruiken voor uw weblog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Inzendingen zijn niet succesvol ingevoerd!'); +@define('MT_DATA_FILE', 'Movable Type databestand'); +@define('FORCE', 'Forceer'); +@define('CREATE_AUTHOR', 'Maak auteur \'%s\' aan.'); +@define('CREATE_CATEGORY', 'Maak categorie \'%s\' aan.'); +@define('MYSQL_REQUIRED', 'U moet een MySQL-verbinding hebben om deze actie te voltooien.'); +@define('COULDNT_CONNECT', 'Kan geen verbinding maken met de volgende MySQL database: %s.'); +@define('COULDNT_SELECT_DB', 'Kan de volgende database niet selecteren: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Kan de volgende gebruikers informatie niet selecteren: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Kan de volgende categorie niet selecteren: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Kan de volgende inzendingen niet selecteren: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Kan de volgende reactie niet selecteren: %s.'); +@define('YES', 'Ja'); +@define('NO', 'Nee'); +@define('USE_DEFAULT', 'Standaard'); +@define('CHECK_N_SAVE', 'Controlleer & Bewaren'); +@define('DIRECTORY_WRITE_ERROR', 'Kan niet schrijven naar map %s. Controlleer de toegangsrechten.'); +@define('DIRECTORY_CREATE_ERROR', 'Map %s bestaat niet en kon niet worden aangemaakt. Maak deze alstublieft handmatig aan'); +@define('DIRECTORY_RUN_CMD', ' -> voer %s %s uit'); +@define('CANT_EXECUTE_BINARY', 'Kan %s opdracht opdracht niet uitvoeren'); +@define('FILE_WRITE_ERROR', 'Kan niet schrijven naar bestand %s.'); +@define('FILE_CREATE_YOURSELF', 'Maakt u zelf het bestand aan of controlleer de toegangsrechten'); +@define('COPY_CODE_BELOW', '
* Kopieer de onderstaande code en voeg deze toe aan het bestand %s in uw %s map:
%s
' . "\n"); +@define('WWW_USER', 'Verander gebruiker www in de gebruiker die de apache-server draait (bijvoorbeeld nobody).'); +@define('BROWSER_RELOAD', 'Als u diet heeft gedaan druk u op uw browser\'s "opnieuw openen" knop.'); +@define('DIAGNOSTIC_ERROR', 'Serendipity heeft enkele fouten gevonden, in de door u opgegeven informatie, tijden het uitvoeren van een diagnostische programma:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity is nog niet geinstalleerd. Installeer het nu alstublieft.'); +@define('INCLUDE_ERROR', 'serendipity fout: kan %s niet toevoegen - word afgesloten.'); +@define('DATABASE_ERROR', 'serendipity error: kan geen verbinding maken met de database - word afgesloten.'); +@define('CREATE_DATABASE', 'Maak standaar database aan...'); +@define('ATTEMPT_WRITE_FILE', 'Probeer bestand %s aan te maken...'); +@define('WRITTEN_N_SAVED', 'Configuratie geschreven & opgeslagen'); +@define('IMAGE_ALIGNMENT', 'Afbeelding uitlijnen'); +@define('ENTER_NEW_NAME', 'Voer een nieuwe naam in voor: '); +@define('RESIZING', 'Grootte aanpassen'); +@define('RESIZE_DONE', 'Gereed (%s afbeeldingen aangepast).'); +@define('SYNCING', 'Bezig met het synchroniseren van de database met de map waar de afbeeldingen in staan'); +@define('SYNC_DONE', 'Gereed (%s afbeeldingen gesynchroniseerd).'); +@define('FILE_NOT_FOUND', 'Kan bestand %s niet vinden, mogelijk is deze reeds verwijderd.'); +@define('ABORT_NOW', 'Annuleer nu'); +@define('REMOTE_FILE_NOT_FOUND', 'Het bestand is niet gevonden, weet u zeker dat de webpagina %s correct (geschreven) is?'); +@define('FILE_FETCHED', '%s opgehaald als %s'); +@define('FILE_UPLOADED', 'Het bestand %s is succesvol geupload als %s'); +@define('WORD_OR', 'Of'); +@define('SCALING_IMAGE', 'Aanpassen van de grootte van %s naar %s x %s px'); +@define('KEEP_PROPORTIONS', 'Behoud verhoudingen'); +@define('REALLY_SCALE_IMAGE', 'Wilt u de afbeelding echt aanpassen? Dit kan namelijk niet meer ongedaan gemaakt worden!'); +@define('TOGGLE_ALL', 'Alles uit- of inklappen'); +@define('TOGGLE_OPTION', 'Uit/Inklap opties'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Abonneer op deze inzending'); +@define('UNSUBSCRIBE_OK', "%s is nu geabonneerd op deze inzending"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Nieuwe reactie op geabonneerde inzending "%s"'); +@define('SUBSCRIPTION_MAIL', "Geachte %s,\n\nEen nieuwe reacties is geplaatst op \"%s\", op inzending \"%s\"\nDe persoon die gereageerd heeft is: %s\n\nU kunt de inzending hier vinden: %s\n\nU kunt zich uitschrijven door op deze link te drukken: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Geachte %s,\n\nEen nieuwe trackback is toegevoegd op\"%s\", op inzending \"%s\"\nDe persoon die gereageerd heeft is: %s\n\nU kunt de inzending hier vinden: %s\n\nU kunt zich uitschrijven door op deze link te drukken: %s\n"); +@define('SIGNATURE', "\n-- \n%s is powered by Serendipity.\nEen van de beste weblogs. U kunt het ook gebruiken.\nGa naar om uit te vinden hoe."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 reacties'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Field "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Field "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Afbeelding voor de RSS feed'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Breedte van de afbeelding'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Hoogte van de afbeelding'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-Mailadres van de webmaster, indien beschikbaar. (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-Mailadres van de managing editor, indien beschikbaar. (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL van een afbeelding in GIF/JPEG/PNG format, indien beschikbaar. (empty: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'in pixels, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'in pixels, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Field "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Aantal minuten nadat uw weblog niet meer gecached mag worden door buitenlandse sites/applicaties (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Field "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Moet het "pubDate"-veld worden geintegreerd in uw RSS-channel, om zo de dag van de laatste inzending te tonen?'); +@define('CONTENT', 'Inhoud'); +@define('TYPE', 'Type'); +@define('DRAFT', 'Concept'); +@define('PUBLISH', 'Publiceren'); +@define('PREVIEW', 'Voorvertoning'); +@define('DATE', 'Datum'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Opgelet: De door u ingevoerde datum is niet correct. Het moet opgegeven worden in het volgende formaat JJJJ-MM-DD UU:MM. Bijvoorbeeld 1970-12-31 14:39'); +@define('CATEGORY_PLUGIN_DESC', 'Toon de lijst met categoriëen.'); +@define('ALL_AUTHORS', 'Alle auteurs'); +@define('CATEGORIES_TO_FETCH', 'Op te halen categoriëen'); +@define('CATEGORIES_TO_FETCH_DESC', 'Catergoriëen op van welke auteur inzien?'); +@define('PAGE_BROWSE_ENTRIES', 'Pagina %s van %s, totaal %s inzendingen'); +@define('PREVIOUS_PAGE', 'vorige pagina'); +@define('NEXT_PAGE', 'volgende pagina'); +@define('ALL_CATEGORIES', 'Alle categoriëen'); +@define('DO_MARKUP', 'Voer tekstopmaak veranderingen uit'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Datumopmaak'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'De echte datum van de inzending, gebruikmakend van de PHPs strftime() variabelen. (Standaard: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Kan de template niet openen, update u alstublieft Serendipity!'); +@define('ADVANCED_OPTIONS', 'Geavanceerde Opties'); +@define('EDIT_ENTRY', 'Bewerk Inzending'); +@define('HTACCESS_ERROR', 'Controlleer uw webserver installatie, Serendipity moet kunnen schrijven naar het bestand ".htaccess". Dit was helaas niet mogelijk door fouten in toegangsrechten. Past u deze alstublieft als volgt aan:
  %s
en laad deze pagina opnieuw.'); +@define('SIDEBAR_PLUGINS', 'Sidebar Plugins'); +@define('EVENT_PLUGINS', 'Evenementen Plugins'); +@define('SORT_ORDER', 'Sorteer volgorder'); +@define('SORT_ORDER_NAME', 'Bestandsnaam'); +@define('SORT_ORDER_EXTENSION', 'Bestandsextensies'); +@define('SORT_ORDER_SIZE', 'Bestandsgrootte'); +@define('SORT_ORDER_WIDTH', 'Afbeeldings breedte'); +@define('SORT_ORDER_HEIGHT', 'Afbeeldings hoogte'); +@define('SORT_ORDER_DATE', 'Upload datum'); +@define('SORT_ORDER_ASC', 'Oplopend'); +@define('SORT_ORDER_DESC', 'Aflopend'); +@define('THUMBNAIL_SHORT', 'Thumb'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Tekstopmaak toepassen op %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Begin van de vorige week'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity heeft ontdekt dat u configuratie momenteel versie %s is, terwijl Serendipity zelf geïnstalleerd is als versie %s, u moet opwaarderen! Klik hier'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Hallo en welkom bij de Serendipity upgrade agent.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Ik zal u helpen Serendipity %s installatie te upgraden.'); +@define('SERENDIPITY_UPGRADER_WHY', 'U krijgt deze melding te zien omdat, u zojuist Serendipity %s geinstalleerd heeft, u heeft echter uw database nog niet geupgrade naar deze versie'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Database updates (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Zojuist zijn .sql-bestanden aangetroffen, welke eerst uitgevoerd moeten worden voordat Serendipity normaal kan functioneren'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Taken specifiek voor deze versie'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Geen taken gevonden voor specifiek deze versie'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Wilt u dat ik de bovenstaande taken uitvoer?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Nee, ik voer ze zelf uit'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Ja, alstublieft'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'U hoeft geen upgrades uit te voeren'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity is geupgraded'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'U heeft ervoor gekozen geen upgrades uit te voeren, zorg ervoor dat uw database goed geïnstalleerd is en geplande taken uitgevoerd worden'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Uw Serendipity installatie is nu geupgraded naar versie %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'U kunt terugkeren naar uw weblog door %shier%s te klikken'); +@define('MANAGE_USERS', 'Beheer gebruikers'); +@define('CREATE_NEW_USER', 'Maak nieuwe gebruiker aan'); +@define('CREATE_NOT_AUTHORIZED', 'U kunt geen gebruikers bewerken met hetzelfde gebruikersniveau als uzelf'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'U kunt geen gebruikers aanmaken met een hoger gebruikersniveau als uzelf'); +@define('CREATED_USER', '%s is aangemaakt als nieuwe gebruiker'); +@define('MODIFIED_USER', 'De eigenschappen van gebruiker, %s, zijn gewijzigd'); +@define('USER_LEVEL', 'Gebruikersniveau'); +@define('DELETE_USER', 'U staat op het punt de volgende gebruiker te verwijderen: #%d %s. Weet u zeker dat u deze gebruiker wilt verwijderen? Wanneer u dit doet zullen de inzendingen van deze gebruiker niet meer worden weergegeven.'); +@define('DELETED_USER', 'Gebruiker, #%d %s, is verwijderd.'); +@define('LIMIT_TO_NUMBER', 'Hoeveel items moeten er worden weergegeven?'); +@define('ENTRIES_PER_PAGE', 'inzendingen per pagina'); +@define('XML_IMAGE_TO_DISPLAY', 'XML Button'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Deze afbeelding laat u uw XML Feeds weergeven. Laat het veld leeg voor de standaard instellingen, voer \'none\' in om het uit te schakellen.'); + +@define('DIRECTORIES_AVAILABLE', 'In de lijst van beschikbare mappen kunt u een willekeurige map selecteren om een nieuwe map in aan te maken.'); +@define('ALL_DIRECTORIES', 'alle mappen'); +@define('MANAGE_DIRECTORIES', 'Beheer mappen'); +@define('DIRECTORY_CREATED', 'Map %s is aangemaakt.'); +@define('PARENT_DIRECTORY', 'Huidige map'); +@define('CONFIRM_DELETE_DIRECTORY', 'Weet u zeker dat u alle gevens uit map %s wilt verwijderen?'); +@define('ERROR_NO_DIRECTORY', 'Fout: Map %s bestaat niet'); +@define('CHECKING_DIRECTORY', 'Controleer de bestanden in map %s'); +@define('DELETING_FILE', 'Verwijder bestand %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Kan een map die nog niet leeg is niet verwijderen. Vink "force deletion" aan als u ook deze bestanden wilt verwijderen, voer het daarna nogmaals uit. Aanwezige bestanden zijn:'); +@define('DIRECTORY_DELETE_FAILED', 'Het verwijderen van map %s is niet gelukt. Controleer de toegangsrechten of de bovenstaande meldingen.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Map %s is succesvol verwijderd.'); +@define('SKIPPING_FILE_EXTENSION', 'Bestand overgeslagen: Er mist een extensie voor %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Bestand overgeslagen: %s het bestand is niet leesbaar.'); +@define('FOUND_FILE', 'Een nieuw of aangepast bestand is gevonden: %s.'); +@define('ALREADY_SUBCATEGORY', '%s is reeds een subcategorie van %s.'); +@define('PARENT_CATEGORY', 'Huidige catergorie'); +@define('IN_REPLY_TO', 'Reactie op'); +@define('TOP_LEVEL', 'Top level'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'Toegangsrechten'); +@define('SETTINGS_SAVED_AT', 'De instellingen zijn opgeslagen in %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Database instellingen'); +@define('INSTALL_CAT_DB_DESC', 'Hier kunt u de instellingen van uw database invoeren. Serendipity heeft deze nodig om te functioneren'); +@define('INSTALL_DBTYPE', 'Database type'); +@define('INSTALL_DBTYPE_DESC', 'Database type'); +@define('INSTALL_DBHOST', 'Database host'); +@define('INSTALL_DBHOST_DESC', 'De hostnaam van uw database'); +@define('INSTALL_DBUSER', 'Database gebruiker'); +@define('INSTALL_DBUSER_DESC', 'De gebruikersnaam die nodig is om verbinding te maken met uw database'); +@define('INSTALL_DBPASS', 'Database wachtwoord'); +@define('INSTALL_DBPASS_DESC', 'Het wachtwoord behorend bij de ingevoerde gebruikersnaam'); +@define('INSTALL_DBNAME', 'Database naam'); +@define('INSTALL_DBNAME_DESC', 'De naam van uw database'); +@define('INSTALL_DBPREFIX', 'Database kenmerk'); +@define('INSTALL_DBPREFIX_DESC', 'Het kenmerk waar dit weblog in de database te vinden is, bijvoorbeeld serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Padden'); +@define('INSTALL_CAT_PATHS_DESC', 'Diverse padden naar essentiële mappen en bestanden. Let alstublieft op de aanduiding van mappen!'); +@define('INSTALL_FULLPATH', 'Volledig pad'); +@define('INSTALL_FULLPATH_DESC', 'Het volledige pad naar uw Serendipity installatie'); +@define('INSTALL_UPLOADPATH', 'Upload pad'); +@define('INSTALL_UPLOADPATH_DESC', 'Alle uploads worden in deze map geplaatst, bevind zich in \'Volledige pad\' - meestal is dit \'uploads/\''); +@define('INSTALL_RELPATH', 'Browser pad'); +@define('INSTALL_RELPATH_DESC', 'Het pad naar Serendipity voor gebruik in uw browser, meestal is dit \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Template browser-pad'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Het pad naar waar de templates zich bevinden - gerelateerd aan het \'Browser pad\''); +@define('INSTALL_RELUPLOADPATH', 'Upload browser-pad'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Het pad naar uw uploadmap - gerelateerd aan het \'Browser pad\''); +@define('INSTALL_URL', 'URL naar uw weblog'); +@define('INSTALL_URL_DESC', 'De URL naar uw Serendipity installatie'); +@define('INSTALL_INDEXFILE', 'Index bestand'); +@define('INSTALL_INDEXFILE_DESC', 'De naam van uw Serendipity index bestand'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Algemene Instellingen'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Pas aan hoe Serendipity zich gedraagd'); +@define('INSTALL_USERNAME', 'Gebruikersnaam beheerder'); +@define('INSTALL_USERNAME_DESC', 'De gebruikersnaam van de beheerder'); +@define('INSTALL_PASSWORD', 'Wachtwoord beheerder'); +@define('INSTALL_PASSWORD_DESC', 'Het wachtwoord van de beheerder'); +@define('INSTALL_EMAIL', 'E-mailadres van beheerder'); +@define('INSTALL_EMAIL_DESC', 'E-mailadres van de beheerder van het weblog'); +@define('INSTALL_SENDMAIL', 'Verstuur e-mails naar beheerder?'); +@define('INSTALL_SENDMAIL_DESC', 'Wilt een e-mail ontvangen wanneer er een reactie geplaatst is op een van uw inzendingen?'); +@define('INSTALL_SUBSCRIBE', 'Abonneren op inzendingen?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Maak het mogelijk voor gebruikers om zich te abonneren op uw inzendingen? Gebruikers zullen dan een e-mail ontvangen wanneer er een reactie geplaatst is op deze inzending'); +@define('INSTALL_BLOGNAME', 'Weblog naam'); +@define('INSTALL_BLOGNAME_DESC', 'De naam van uw weblog'); +@define('INSTALL_BLOGDESC', 'Omschrijving weblog'); +@define('INSTALL_BLOGDESC_DESC', 'De omschrijving van het weblog'); +@define('INSTALL_LANG', 'Taal'); +@define('INSTALL_LANG_DESC', 'Selecteer de taal die gebruikt word voor uw weblog'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Uiterlijk en opties'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Pas aan hoe Serendipity zich gedraagd'); +@define('INSTALL_WYSIWYG', 'Gebruik de WYSIWYG editor'); +@define('INSTALL_WYSIWYG_DESC', 'Wilt u de WYSIWYG editor gebruiken? (Werkt met IE5+ en gedeeltelijk met Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Forceer XHTML 1.1 compabiliteit'); +@define('INSTALL_XHTML11_DESC', 'Wilt u XHTML 1.1 compabiliteit forceren ? (Dit kan problemen veroorzaken met 4e generatie browsers)'); +@define('INSTALL_POPUP', 'Maak gebruik van popups'); +@define('INSTALL_POPUP_DESC', 'Wilt u gebruik maken van popups voor reacties, trackbacks e.d.?'); +@define('INSTALL_EMBED', 'Is Serendipity geïntegreerd in een ander pagina?'); +@define('INSTALL_EMBED_DESC', 'Als u Serendipity wilt integreren in een bestaande pagina, zet deze dan op ja om de headers te laten voor wat ze zijn en gewoon de inhoud weer te geven. Bekijk het README bestand voor meer informatie!'); +@define('INSTALL_TOP_AS_LINKS', 'Geef Top Exits/Referrers weer als links?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"Nee": Exits en Referrers worden als gewone tekst weergeven om het spammen door zoekmachines te voorkomen. "ja": Exits en Referrers worden getoond als hyperlinks. "standaard": Gebruik de instellingen vanuit uw algemene instellingen (aanbevolen).'); +@define('INSTALL_BLOCKREF', 'Geblokkeerde Referers'); +@define('INSTALL_BLOCKREF_DESC', 'Zijn er speciale hosts waarvan u niet wilt dat zij in uw Top Refferers lijst komen te staan? Scheid de hosts met \';\''); +@define('INSTALL_REWRITE', 'URL Herschrijven'); +@define('INSTALL_REWRITE_DESC', 'Welke regels moeten er gehanteerd worden bij het genererem van URLs. Het inschakelen van deze optie zorgt voor aantrekkelijke URLs, het maakt het makkelijker voor zoekmachines om uw weblog te indexeren. De webserver moet wel mod_rewrite of "AllowOverride All" toestaan in uw Serendipity map. Standaard staat deze op automatisch'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Afbeelding instellingen'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Hier kunt u aangeven hoe Serendipity met afbeeldingen moet omgaan'); +@define('INSTALL_IMAGEMAGICK', 'Gebruik Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Heeft u Imagemagick geïnstalleerd en wilt u deze gebruiken om het formaat van de afbeeldingen aan te passen?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Pad naar de conversiebestanden'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Volledig pad en naam uw Imagemagick convert binary'); +@define('INSTALL_THUMBSUFFIX', 'Index-afbeelding toevoeging'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Index-afbeeldingen zullen als volgt worden weergeven: original.[suffix].ext'); +@define('INSTALL_THUMBWIDTH', 'Index-afbeelding formaat'); +@define('INSTALL_THUMBWIDTH_DESC', 'Maximale breedte van automatisch aangemaakte index-afbeeldingen'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Uw persoonlijke gegevens'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Pas uw persoonlijke gegevens aan'); +@define('USERCONF_USERNAME', 'Uw gebruikersnaam'); +@define('USERCONF_USERNAME_DESC', 'De gebruikersnaam waarmee in zich aanmeld op het weblog'); +@define('USERCONF_PASSWORD', 'Uw wachtwoord'); +@define('USERCONF_PASSWORD_DESC', 'Het wachtwoord dat u wilt gebruiken om zich aan te melden'); +@define('USERCONF_EMAIL', 'Uw e-mailadres'); +@define('USERCONF_EMAIL_DESC', 'Uw eigen e-mailadres'); +@define('USERCONF_SENDCOMMENTS', 'Bericht bij reacties?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Wilt u een e-mail ontvangen wanneer er reacties geplaatst worden op uw inzendingen?'); +@define('USERCONF_SENDTRACKBACKS', 'Verstuur trackback bericht?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Wilt u een e-mail ontvangen wanneer er een trackback naar een van uw berichten is gemaakt?'); +@define('USERCONF_ALLOWPUBLISH', 'Toestaan berichten te plaatsen?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Wilt u toestaan dat deze gebruiker berichten kan plaatsen?'); +@define('SUCCESS', 'Success'); +@define('POWERED_BY_SHOW_TEXT', 'Toon "Serendipity" als tekst'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Dit laat "Serendipity Weblog" als tekst zien'); +@define('POWERED_BY_SHOW_IMAGE', 'Toon "Serendipity" logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Toont het Serendipity logo'); +@define('PLUGIN_ITEM_DISPLAY', 'Waar moeten de items worden weergegeven?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Alleen uitgebreide inzendingen'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Alleen overzichtspagina'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Altijd'); +@define('RSS_IMPORT_CATEGORY', 'Gebruik deze catergorie gebruiken om niet gelijke inzendingen in op te slaan'); + +@define('COMMENTS_WILL_BE_MODERATED', 'Ingestuurde reacties zullen eerst worden gecontrolleerd voor deze geplaatst worden.'); +@define('YOU_HAVE_THESE_OPTIONS', 'U heeft de volgende opties tot uw beschikking:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Waarschuwing: Deze reactie moet eerst worden goedgekeurd voor deze worden weergegeven'); +@define('DELETE_COMMENT', 'Verwijder reactie'); +@define('APPROVE_COMMENT', 'Keur reactie goed'); +@define('REQUIRES_REVIEW', 'Moet nagekeken worden'); +@define('COMMENT_APPROVED', 'Reactie #%s is goedgekeurd'); +@define('COMMENT_DELETED', 'Reactie #%s is succesvol verwijderd'); +@define('COMMENTS_MODERATE', 'Reacties & trackbacks moeten worden gecontrolleerd'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Waarschuwing: Deze trackback moet worden goedgekeurd voor hij word weergegeven'); +@define('DELETE_TRACKBACK', 'Verwijder trackback'); +@define('APPROVE_TRACKBACK', 'Keur trackback goed'); +@define('TRACKBACK_APPROVED', 'Trackback #%s is goedgekeurd'); +@define('TRACKBACK_DELETED', 'Trackback #%s is verwijderd'); +@define('VIEW', 'Bekijk'); +@define('COMMENT_ALREADY_APPROVED', 'Reactie #%s is reeds goedgekeurd'); +@define('COMMENT_EDITED', 'De reactie is aangepast'); +@define('HIDE', 'Verbergen'); +@define('VIEW_EXTENDED_ENTRY', 'Ga door met lezen van "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'De link is niet bedoeld om aangekliked te worden. Het bevat een trackback URL voor deze inzending. U kunt deze URL gebruiken om ping- & trackbacks te versturen van uw weblog naar deze inzending. Om deze URL te kopiëeren klikt u op de rechter muisknop, "Copy Shortcut" voor Internet Explorer gebruikers of "Copy Link Location" voor Mozilla gebruikers.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Gebruik HTTPS om aan te melden'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Laat de aanmelding via https verlopen. Uw webserver moet dit echter wel ondersteunen!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Maak externe links aanklikbaar?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"nee": Niet gecontrolleerde externe links (Top Exits, Top Referrers, User comments) worden niet getoond of getoond als gewone tekst om spam vanuit zoekmachines te voorkomen. (aanbevolen). "ja": Niet gecontrolleerde externe links worden gewoon getoond als links. De Sidebar plugin configuratie kan dit beïnvloeden!'); +@define('PAGE_BROWSE_COMMENTS', 'Pagina %s van de %s, in totaal %s reactie(s)'); +@define('FILTERS', 'Filters'); +@define('FIND_ENTRIES', 'Zoek inzendingen'); +@define('FIND_COMMENTS', 'Zoek reacties'); +@define('FIND_MEDIA', 'Zoek media'); +@define('FILTER_DIRECTORY', 'Map'); +@define('SORT_BY', 'Sorteren op'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Er is geen Trackback verzonden: Kan geen verbinding maken met %s via poort %d'); +@define('MEDIA', 'Media'); +@define('MEDIA_LIBRARY', 'Media bibliotheek'); +@define('ADD_MEDIA', 'Voeg media toe'); +@define('ENTER_MEDIA_URL', 'Voer een URL van een bestand toe om op te halen:'); +@define('ENTER_MEDIA_UPLOAD', 'Selecteer een bestand dat u wilt uploaden:'); +@define('SAVE_FILE_AS', 'Sla bestand op als:'); +@define('STORE_IN_DIRECTORY', 'Sla op in de volgende map: '); +@define('ADD_MEDIA_BLAHBLAH', 'Voeg een bestand toe aan uw media verzameling:

Hier kunt u mediabestanden uploaden, of aangeven welke waar elders op het internet ze zich bevinden. Als u de juiste afbeelding niet kunt vinden, ga dan naar Zoek naar afbeeldingen op Google.

Selectie methode:
'); +@define('MEDIA_RENAME', 'Hernoem dit bestand'); +@define('IMAGE_RESIZE', 'Wijzig formaat van de afbeelding'); +@define('MEDIA_DELETE', 'Verwijder dit bestand'); +@define('FILES_PER_PAGE', 'Bestanden per pagina'); +@define('CLICK_FILE_TO_INSERT', 'Selecteer het bestand dat u wilt invoeren:'); +@define('SELECT_FILE', 'Selecteer bestand om in te voeren'); +@define('MEDIA_FULLSIZE', 'Volledige grootte'); +@define('CALENDAR_BOW_DESC', 'De eerse dag van de week. Standaard is maandag'); +@define('SUPERUSER', 'Weblog Beheer'); +@define('ALLOWS_YOU_BLAHBLAH', 'Toont een link naar de beheersite van uw weblog'); +@define('CALENDAR', 'Kalender'); +@define('SUPERUSER_OPEN_ADMIN', 'Open beheerscherm'); +@define('SUPERUSER_OPEN_LOGIN', 'Open aanmeldscherm'); +@define('INVERT_SELECTIONS', 'Keer selectie om'); +@define('COMMENTS_DELETE_CONFIRM', 'Weet u zeker dat u de geselecteerde reacties wilt verwijderen?'); +@define('COMMENT_DELETE_CONFIRM', 'Weet u zeker dat u de reactie #%d, geschreven door %s wilt verwijderen?'); +@define('DELETE_SELECTED_COMMENTS', 'Verwijder geselecteerde reacties'); +@define('VIEW_COMMENT', 'Bekijk reactie'); +@define('VIEW_ENTRY', 'Bekijk inzending'); +@define('DELETE_FILE_FAIL' , 'Kan bestand %s niet verwijderen'); +@define('DELETE_THUMBNAIL', 'Verwijder index-afbeelding %s'); +@define('DELETE_FILE', 'Verwijder bestand genaamd %s'); +@define('ABOUT_TO_DELETE_FILE', 'U staat op het punt om bestand %s
te verwijderen. Als u dit bestand in een van uw inzendingen gebruikt, zal dit leiden tot niet werkende links of afbeeldingen.
Weet u zeker dat u door wilt gaan?

'); +@define('TRACKBACK_SENDING', 'Verstuur een trackback naar %s...'); +@define('TRACKBACK_SENT', 'Trackback succesvol'); +@define('TRACKBACK_FAILED', 'Trackback functioneerd niet: %s'); +@define('TRACKBACK_NOT_FOUND', 'Er is geen juiste trackback-URL gevonden.'); +@define('TRACKBACK_URI_MISMATCH', 'De gevonden trackback URL heeft geen overeenkomsten met de door u opgegeven uw.'); +@define('TRACKBACK_CHECKING', 'Controlleer %s op mogelijke trackbacks...'); +@define('TRACKBACK_NO_DATA', 'Doel bevatte geen gegevens'); +@define('TRACKBACK_SIZE', 'Doel URL heeft de maximale grootte overschreven van %s bytes.'); +@define('COMMENTS_VIEWMODE_THREADED', 'Samengevoegd'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Lineair'); +@define('DISPLAY_COMMENTS_AS', 'Geeft reacties weer als'); +@define('COMMENTS_FILTER_SHOW', 'Tonen'); +@define('COMMENTS_FILTER_ALL', 'Alles'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Alleen geäuthoriseerden'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Wacht op authorisatie'); +@define('RSS_IMPORT_BODYONLY', 'Voeg alle geïmporteerde teksten in de "verkorte inzendingen"-sectie en splits deze niet op in de "uitgebreide inzendingen"-sectie.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Geef volledige inzendingen weer in het RSS feed'); +@define('WEEK', 'Week'); +@define('WEEKS', 'Weken'); +@define('MONTHS', 'Maanden'); +@define('DAYS', 'Dagen'); +@define('ARCHIVE_FREQUENCY', 'Kalender item frequentie'); +@define('ARCHIVE_FREQUENCY_DESC', 'De interval die gebruikt moet worden voor ieder item in de lijst'); +@define('ARCHIVE_COUNT', 'Aantal items in de lijst'); +@define('ARCHIVE_COUNT_DESC', 'Het totaal aantal maanden, weken of dagen dat weergeven moet worden'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Hieronder is een lijst met geïnstalleerde plugins'); +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); +@define('EVENT_PLUGIN', 'evenementen plugin'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Klik hier om een nieuwe %s te installeren'); +@define('VERSION', 'versie'); +@define('INSTALL', 'Installeren'); +@define('ALREADY_INSTALLED', 'Reed geïnstalleerd'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Selecteerd welke plugin u wenst te installeren'); +@define('INSTALL_OFFSET', 'Aanpassing servertijd'); +@define('STICKY_POSTINGS', 'Post-its'); +@define('INSTALL_FETCHLIMIT', 'Inzendingen die weergegeven moeten woreden'); +@define('INSTALL_FETCHLIMIT_DESC', 'Aantal inzendingen die weergeven moeten worden voor elke pagina'); +@define('IMPORT_ENTRIES', 'Importeer inzendingen'); +@define('EXPORT_ENTRIES', 'Exporteer inzendingen'); +@define('IMPORT_WELCOME', 'Welkom bij de Serendipity import utility'); +@define('IMPORT_WHAT_CAN', 'Hier kunt u inzendingen uit andere weblog software importeren'); +@define('IMPORT_SELECT', 'Selecteer alstublieft uit welk type weblog u de gegevens wilt importeren'); +@define('IMPORT_PLEASE_ENTER', 'Voert u alstublieft de gegevens in die hieronder gevraagd worden'); +@define('IMPORT_NOW', 'Importeer nu!'); +@define('IMPORT_STARTING', 'Starten met importeren...'); +@define('IMPORT_FAILED', 'Importeren niet gelukt'); +@define('IMPORT_DONE', 'Importeren succesvol uitgevoerd'); +@define('IMPORT_WEBLOG_APP', 'Weblog applicatie'); +@define('EXPORT_FEED', 'Exporteer volledige RSS feed'); +@define('STATUS', 'Status na importeren'); +@define('IMPORT_GENERIC_RSS', 'Algemene RSS import'); +@define('ACTIVATE_AUTODISCOVERY', 'Verstuur trackbacks naar links gevonden in deze inzending'); +@define('WELCOME_TO_ADMIN', 'Welkom bij Serendipity Beheer.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Voert u alstublieft, hieronder, uw gegevens in.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s en PHP %s'); +@define('INSTALL_USEGZIP', 'Maak gebruik van gzip comprimeerde paginas'); +@define('INSTALL_USEGZIP_DESC', 'Om de verzending van paginas te versnellen, kunnen de paginas gecomprimeerd worden. Dit is alleen mogelijk als zijn/haar browser dit aan kan. Het word echter aangeraden'); +@define('INSTALL_SHOWFUTURE', 'Bekijk toekomstige inzendingen'); +@define('INSTALL_SHOWFUTURE_DESC', 'Wanneer dit is ingeschakeld zal het alle toekomstige inzendingen, reeds aanwezig in uw weblog, weergeven. Standaard staat deze ingesteld om de inzendingen pas te vertonen wanneer de publicatiedatum bereikt is.'); +@define('INSTALL_DBPERSISTENT', 'Gebruik altijd openstaande verbindingen'); +@define('INSTALL_DBPERSISTENT_DESC', 'Laat de verbinding met uw database openstaan, hierover kunt u meer lezen op deze pagina. Dit is normaliter niet aangeraden'); +@define('NO_IMAGES_FOUND', 'Geen afbeeldingen gevonden'); +@define('PERSONAL_SETTINGS', 'Personlijke instellingen'); +@define('REFERER', 'Referer'); +@define('NOT_FOUND', 'Niet gevonden'); +@define('WRITABLE', 'Beschrijfbaar'); +@define('NOT_WRITABLE', 'Niet beschrijfbaar'); +@define('PROBLEM_DIAGNOSTIC', 'Door een ernstig probleem, kun u niet door gaan met de installatie totdat u de hier bovenstaande fouten gecorrigeerd heeft'); +@define('SELECT_INSTALLATION_TYPE', 'Selecteer welk installatietype u wenst'); +@define('WELCOME_TO_INSTALLATION', 'Welkom bij de Serendipity Installatie'); +@define('FIRST_WE_TAKE_A_LOOK', 'Als eerste bekijken we uw huidige instellingen en zullen zo compabiliteitsproblemen opsporen'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Alles fouten worden weergeven in %s, aanbevelingen in %s en voltooide taken in %s'); +@define('RED', 'rood'); +@define('YELLOW', 'geel'); +@define('GREEN', 'groen'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation bericht'); +@define('RECOMMENDED', 'Aanbevolen'); +@define('ACTUAL', 'Eigenlijke'); +@define('PHPINI_CONFIGURATION', 'php.ini configuratie'); +@define('PHP_INSTALLATION', 'PHP installatie'); +@define('THEY_DO', 'positief'); +@define('THEY_DONT', 'negatief'); +@define('SIMPLE_INSTALLATION', 'Eenvoudige installatie'); +@define('EXPERT_INSTALLATION', 'Geavanceerde installatie'); +@define('COMPLETE_INSTALLATION', 'Complete installatie'); +@define('WONT_INSTALL_DB_AGAIN', 'zal de database niet opnieuw installeren'); +@define('CHECK_DATABASE_EXISTS', 'Controlleer de database op aanwezigheid van de nodige tabellen'); +@define('CREATING_PRIMARY_AUTHOR', 'Maak hoofdauteur \'%s\' aan'); +@define('SETTING_DEFAULT_TEMPLATE', 'Stel standaard template in'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Installeer standaard plugins'); +@define('SERENDIPITY_INSTALLED', 'Serendipity is met succes geïnstalleerd'); +@define('VISIT_BLOG_HERE', 'Bezoek uw weblog hier'); +@define('THANK_YOU_FOR_CHOOSING', 'Dank u voor het gebruiken van Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'Een fout is aangetroffen in de installatie'); +@define('OPERATING_SYSTEM', 'Besturingssysteem'); +@define('WEBSERVER_SAPI', 'Webserver SAPI'); +@define('TEMPLATE_SET', '\'%s\' is ingesteld als uw huidige template'); +@define('SEARCH_ERROR', 'De zoekfunctie werkte niet naar verwachting. Waarschuw de beheerder van dit weblog: dit komt mogelijk door het ontbreken van index keys in de database. Op MySQL systemen moet uw database useraccount deze bewerking kunnen uitvoeren:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
De foutmelding van de database is:
%s
'); +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Voer tekstopmaak uit (smilies, shortcut markups via *, /, _, ...). Met het uitschakelen van deze optie behoud u de HTML-code in the text.'); +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_no.inc.php b/lang/serendipity_lang_no.inc.php new file mode 100644 index 0000000..3b1e5c8 --- /dev/null +++ b/lang/serendipity_lang_no.inc.php @@ -0,0 +1,670 @@ + + +@define('LANG_CHARSET', 'ISO-8859-1'); +@define('DATE_LOCALES', 'norwegian, no, no_NO'); +@define('DATE_FORMAT_ENTRY', '%A d. %e. %B %Y'); +@define('DATE_FORMAT_SHORT', '%d.%m.%Y %H:%M'); +@define('WYSIWYG_LANG', 'no'); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Serendipity Administrasjonssuite'); +@define('HAVE_TO_BE_LOGGED_ON', 'Du må være logget inn for å kunne se denne siden'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Du har tastet inn feil brukernavn eller passord'); +@define('APPEARANCE', 'Utseende'); +@define('MANAGE_STYLES', 'Administrer temaer'); +@define('CONFIGURE_PLUGINS', 'Konfigurerer plugins'); +@define('CONFIGURATION', 'Konfigurasjon'); +@define('BACK_TO_BLOG', 'Tilbake til weblogg'); +@define('LOGIN', 'Logg inn'); +@define('LOGOUT', 'Logg ut'); +@define('LOGGEDOUT', 'Logget ut.'); +@define('CREATE', 'Opprett'); +@define('SAVE', 'Lagre'); +@define('NAME', 'Navn'); +@define('CREATE_NEW_CAT', 'Oppret ny kategori'); +@define('I_WANT_THUMB', 'Jeg vil bruke minibildet i min artikkel.'); +@define('I_WANT_BIG_IMAGE', 'Jeg vil bruke det originale bildet i min artikkel.'); +@define('I_WANT_NO_LINK', 'Vis bildet uten link'); +@define('I_WANT_IT_TO_LINK', 'Vis bildet med link'); +@define('BACK', 'Tilbake'); +@define('FORWARD', 'Frem'); +@define('ANONYMOUS', 'Anonym'); +@define('NEW_TRACKBACK_TO', 'Ny trackback opprettet til'); +@define('NEW_COMMENT_TO', 'Ny kommentar opprettet til'); +@define('RECENT', 'Nyere...'); +@define('OLDER', 'Eldre...'); +@define('DONE', 'Ferdig'); +@define('WELCOME_BACK', 'Velkommen tilbake,'); +@define('TITLE', 'Tittel'); +@define('DESCRIPTION', 'Beskrivelse'); +@define('PLACEMENT', 'Plassering'); +@define('DELETE', 'Slett'); +@define('UP', 'OPP'); +@define('DOWN', 'NED'); +@define('ENTRIES', 'artikler'); +@define('NEW_ENTRY', 'Ny artikkel'); +@define('EDIT_ENTRIES', 'Rediger artikler'); +@define('CATEGORIES', 'Kategorier'); +@define('WARNING_THIS_BLAHBLAH', "ADVARSEL:\\nDette kan ta lang tid hvis det er mange bilder uten minibilder."); +@define('CREATE_THUMBS', 'Lag minibilder på nytt'); +@define('MANAGE_IMAGES', 'Administrer bilder'); +@define('NAME', 'Navn'); +@define('EMAIL', 'Email'); +@define('HOMEPAGE', 'Hjemmeside'); +@define('COMMENT', 'Kommentar'); +@define('REMEMBER_INFO', 'Husk opplysninger?'); +@define('SUBMIT_COMMENT', 'Legg til kommentar'); +@define('NO_ENTRIES_TO_PRINT', 'Der er ingen artikler å vise'); +@define('COMMENTS', 'Kommentarer'); +@define('ADD_COMMENT', 'Legg til kommentar'); +@define('NO_COMMENTS', 'Ingen kommentarr'); +@define('POSTED_BY', 'Skrevet av'); +@define('ON', 'aktiv'); +@define('A_NEW_COMMENT_BLAHBLAH', 'En ny kommentar har blitt opprettet på din blog "%s", til artiklen med navnet "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'En ny trackback har blitt laget til din artikel ved navn "%s".'); +@define('NO_CATEGORY', 'Ingen kategori'); +@define('ENTRY_BODY', 'Artikkelindhold'); +@define('EXTENDED_BODY', 'Utvidet indhold'); +@define('CATEGORY', 'Kategori'); +@define('EDIT', 'Rediger'); +@define('NO_ENTRIES_BLAHBLAH', 'Ingen artikler ble funnet som inneholdt %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Ditt søk på %s retunerte %s resultater:'); +@define('SEARCH_TOO_SHORT', 'Ditt søk må være på mere enn 3 tegn'); +@define('IMAGE', 'Bilde'); +@define('ERROR_FILE_NOT_EXISTS', 'Feil: Det gamle filnavnet finnes ikke!'); +@define('ERROR_FILE_EXISTS', 'Feil: Det nye filnavnet brukes allerede, velg et andet!'); +@define('ERROR_SOMETHING', 'Fejl: Der gikk noe galt'); +@define('ADDING_IMAGE', 'Legg til et bilde...'); +@define('THUMB_CREATED_DONE', 'Minibilde er oprettet.
Utført.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Feil: Filen finnes allerede på din maskin!'); +@define('GO', 'Begynn!'); +@define('NEWSIZE', 'Ny størrelse: '); +@define('RESIZE_BLAHBLAH', 'Endre størrelse på %s

'); +@define('ORIGINAL_SIZE', 'Original størrelse: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Her kan du justere bildets størrelse. Hvis du vil bevare proporsjonene, behøver du bare taste en av verdiene og trykke på TAB-tasten. Jeg vil automatisk beregne den andre verdien:'); +@define('QUICKJUMP_CALENDAR', 'Hurtigkalender'); +@define('QUICKSEARCH', 'Søk'); +@define('SEARCH_FOR_ENTRY', 'Søk etter en artikel'); +@define('ARCHIVES', 'Arkiver'); +@define('BROWSE_ARCHIVES', 'Bla gjennom arkiv etter måneder'); +@define('TOP_REFERRER', 'Referanser'); +@define('SHOWS_TOP_SITES', 'Viser de sitene som oftest linker til din blog'); +@define('TOP_EXITS', 'Exit-sider'); +@define('SHOWS_TOP_EXIT', 'Viser de exit-sider det har blitt klikket flest ganger på'); +@define('SYNDICATION', 'Syndikering'); +@define('SHOWS_RSS_BLAHBLAH', 'Viser RSS syndikeringslinker'); +@define('ADVERTISES_BLAHBLAH', 'Reklamer for din blogs opprinnelse'); +@define('HTML_NUGGET', 'HTML Nugget'); +@define('HOLDS_A_BLAHBLAH', 'Indeholder en bit HTML i din sidebar'); +@define('TITLE_FOR_NUGGET', 'Tittel på din nugget'); +@define('THE_NUGGET', 'HTML-indholdet av din nugget'); +@define('SYNDICATE_THIS_BLOG', 'Syndiker denne bloggen'); +@define('YOU_CHOSE', 'Du valgte %s'); +@define('IMAGE_SIZE', 'Bildestørrelse'); +@define('IMAGE_AS_A_LINK', 'Sett inn bilde'); +@define('POWERED_BY', 'Drives av'); +@define('TRACKBACKS', 'Trackbacks'); +@define('TRACKBACK', 'Trackback'); +@define('NO_TRACKBACKS', 'Ingen Trackbacks'); +@define('TOPICS_OF', 'Emner av'); +@define('VIEW_FULL', 'Vis fullt'); +@define('VIEW_TOPICS', 'Vis temaer'); +@define('AT', 'kl'); +@define('SET_AS_TEMPLATE', 'Sett som mal'); +@define('IN', 'i'); +@define('EXCERPT', 'Utdrag'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Link til artikel'); +@define('LINK_TO_REMOTE_ENTRY', 'Link til ekstern artikel'); +@define('IP_ADDRESS', 'IP-adresse'); +@define('USER', 'Bruker'); +@define('THUMBNAIL_USING_OWN', 'Bruker %s i seg selv som minibilde, fordi det allerede er så lite.'); +@define('THUMBNAIL_FAILED_COPY', 'Ville gjerne ha brukt %s som minibilde i seg selv, men kunne ikke kopiere!'); +@define('AUTHOR', 'Forfatter'); +@define('LAST_UPDATED', 'Sist opdatert'); +@define('TRACKBACK_SPECIFIC', 'Trackback URI til denne artikel'); +@define('DIRECT_LINK', 'Direktelink til denne artikel'); +@define('COMMENT_ADDED', 'Din kommentar ble lagt til. '); +@define('COMMENT_ADDED_CLICK', 'Klik %her for å gå tilbake%s til kommentarene, og %sher for å lukke%s dette vinduet.'); +@define('COMMENT_NOT_ADDED', 'Din kommentar kunne ikke legges til fordi kommentarer til denne artikelen er blitt deaktivert.'); +@define('COMMENT_NOT_ADDED_CLICK', 'Klikk %sher for å gå tilbake%s til kommentarene, og %sher for å lukke%s dette vinduet. '); +@define('COMMENTS_DISABLE', 'Tillat ikke kommentarer til denne artikelen'); +@define('COMMENTS_ENABLE', 'Tillat kommentarer til denne artikelen'); +@define('COMMENTS_CLOSED', 'Forfatteren har valgt ikke å tillate kommentarer til denne artikelen'); +@define('EMPTY_COMMENT', 'Din kommentar indeholdt ikke noe, vennligst gå %stilbage%s og prøv igjen'); +@define('ENTRIES_FOR', 'Artikler fra %s'); +@define('DOCUMENT_NOT_FOUND', 'Dokumentet %s kunne ikke finnes.'); +@define('USERNAME', 'Brukernavn'); +@define('PASSWORD', 'Passord'); +@define('AUTOMATIC_LOGIN', 'Lagre oplysningerne'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity Installasjon'); +@define('LEFT', 'venstre'); +@define('RIGHT', 'høyre'); +@define('HIDDEN', 'skjult'); +@define('REMOVE_TICKED_PLUGINS', 'Fjern valgte plugins'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Lagre layout-endringene'); +@define('COMMENTS_FROM', 'Kommentar fra'); +@define('ERROR', 'Feil'); +@define('ENTRY_SAVED', 'Din artikkel ble lagret'); +@define('DELETE_SURE', 'Er du sikker på du vil slette #%s permanent?'); +@define('NOT_REALLY', 'Egentlig ikke...'); +@define('DUMP_IT', 'Kast den!'); +@define('RIP_ENTRY', 'Farvel artikel #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Kategori #%s ble slettet. Gamle artikler flyttet til kategori #%s'); +@define('CATEGORY_DELETED', 'Kategori #%s ble slettet.'); +@define('INVALID_CATEGORY', 'Ingen kategori ble valgt for sletting'); +@define('CATEGORY_SAVED', 'Kategori lagret'); +@define('SELECT_TEMPLATE', 'Velg den malen du ønsker å bruke til din blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Det var problemer under indsettelsen av artiklene!'); +@define('YES', 'Ja'); +@define('NO', 'Nei'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Sjekk & lagre'); +@define('DIRECTORY_WRITE_ERROR', 'Kan ikke skrive til biblioteket %s. Sjekk filrettighederne.'); +@define('DIRECTORY_CREATE_ERROR', 'Biblioteket %s eksisterer ikke og kunne ikke op1prettes. Vennligst opprett biblioteket manuelt'); +@define('DIRECTORY_RUN_CMD', ' -> Kjør %s %s'); +@define('CANT_EXECUTE_BINARY', 'Kan ikke eksekvere %s'); +@define('FILE_WRITE_ERROR', 'Kan ikke skrive til filen %s.'); +@define('FILE_CREATE_YOURSELF', 'Venligst opprett filen selv og sjekk dens rettigheter'); +@define('COPY_CODE_BELOW', '
* Kopier koden nedenunder og plasser den i %s i din %s mappe:

%s
' . "\n"); +@define('WWW_USER', 'Endre www til den bruker som apache kører som (fx. nobody).'); +@define('BROWSER_RELOAD', 'Når du har gjort dette, så tryk på browserens "oppdater"-knapp'); +@define('DIAGNOSTIC_ERROR', 'Vi har opdaget noen feil mens vi kørte noen diagnostikker på dine oppgitte informasjoner:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity er ennå ikke installert. Klikk her for å installere nå.'); +@define('INCLUDE_ERROR', 'serendipityfejl: Kunne ikke inkludere %s - Avbryter.'); +@define('DATABASE_ERROR', 'serendipityfejl: Kunne ikke oprette forbindelse til databasen - Avbryter.'); +@define('CREATE_DATABASE', 'Oppretter standarddatabase-setup...'); +@define('ATTEMPT_WRITE_FILE', 'Forsøker å skrive til %s ...'); +@define('WRITTEN_N_SAVED', 'Konfigurasjon skrevet & lagret'); +@define('IMAGE_ALIGNMENT', 'Bildejustering'); +@define('ENTER_NEW_NAME', 'Oppgi det nye navn for: '); +@define('RESIZING', 'Endre dimensjoner'); +@define('RESIZE_DONE', 'Ferdig (Endret %s bilder).'); +@define('SYNCING', 'Synkronisere databasen med bildemappen'); +@define('SYNC_DONE', 'Ferdig (Synkroniserte %s bilder).'); +@define('DELETE_IMAGE_FAIL' , 'Kunne ikke slette bildet %s'); +@define('DELETE_THUMBNAIL', 'Slettet bildet med navn %s'); +@define('FILE_NOT_FOUND', 'Kunne ikke finne filen ved navn %s, den er kanskje allerede slettet?'); +@define('ABORT_NOW', 'Avbryt nå'); +@define('REMOTE_FILE_NOT_FOUND', 'Filen kunne ikke finnes på serveren, er du sikker på at URL-en: %s er korrekt?'); +@define('FILE_FETCHED', '%s hentet: %s'); +@define('FILE_UPLOADED', 'Filen %s er lastet opp: %s'); +@define('WORD_OR', 'eller'); +@define('SCALING_IMAGE', 'Endre størrelsen på %s til %s x %s px'); +@define('KEEP_PROPORTIONS', 'Bevar forholdet'); +@define('REALLY_SCALE_IMAGE', 'Er du sikker på at du vil endre størrelsen på dette bildet? Det er ingen vei tilbake!'); +@define('TOGGLE_ALL', 'Vis/Skjul alle'); +@define('TOGGLE_OPTION', 'Vis/Skjul denne opsjonen'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Abonnér på denne artikkelen'); +@define('UNSUBSCRIBE_OK', "%s er ikke lenger abonnent på denne artikkelen"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Ny kommentar til abonnert artikel "%s"'); +@define('SUBSCRIPTION_MAIL', "Hej %s,\n\nEn ny kommentar er blitt lagt til en artikkel du abonnerer på hos \"%s\", ved navn \"%s\"\nNavnet på skribenten er: %s\n\nDu kan finne artikkelen her: %s\n\nDu kan stoppe ditt abonnement ved å klikke på denne linken: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Hei %s,\n\nEn ny trackback er laget til en artikkel du abonnerer på hos \"%s\", ved navn \"%s\"\nNavnet på skribenten er: %s\n\nDu kan finne artiklen her: %s\n\nDu kan stoppe ditt abonnement ved å klikke på denne linken: %s\n"); +@define('SIGNATURE', "\n-- \n%s bruker Serendipity.\nDen bedste blogg på dette, du kan også bruke det.\nKikk nærmere på for å finne mere informasjon."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91-feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0-feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0-feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0-kommentarer'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3-feed'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s-feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Feltet "Hovedredaktør"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Feltet "webmaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Bilde til RSS-feed'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Bildebredde'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Bildehøjde'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'Emailadressen til webmasteren, hvis tilgjengelig. (tom: skjult) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-mailadressen til redaktøren, hvis tilgjengelig. (tom: skjult) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL til et bilde i GIF/JPEG/PNG format, hvis tilgjengelig. (tom: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'i pixels, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'i pixels, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Feltet "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Antallet minutter din blog skal caches av eksterne sider/programmer (tom: skjult) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Feltet "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Skal "pubDate"-feltet være innkapslet til en RSS-kanal, for å vise datoen på den nyeste artikkelen?'); +@define('CONTENT', 'Innhold'); +@define('TYPE', 'Type'); +@define('DRAFT', 'Utkast'); +@define('PUBLISH', 'Publiser'); +@define('PREVIEW', 'Vis'); +@define('DATE', 'Dato'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Advarsel: Den datoen du tastet inn var ugyldig. Den skal tastes inn i følgende format: ÅÅÅÅ-MM-DD TT:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Viser listen over kategorier.'); +@define('ALL_AUTHORS', 'Alle forfattere'); +@define('CATEGORIES_TO_FETCH', 'Kategorier som skal hentes'); +@define('CATEGORIES_TO_FETCH_DESC', 'Hent kategorier fra en bestemt forfatter?'); +@define('PAGE_BROWSE_ENTRIES', 'Side %s av %s, i alt %s artikler'); +@define('PREVIOUS_PAGE', 'forrige side'); +@define('NEXT_PAGE', 'neste side'); +@define('ALL_CATEGORIES', 'Alle kategorier'); +@define('DO_MARKUP', 'Utført Markup-transformasjon'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Datoformat'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Formatet på artiklens faktiske dato, brug PHPs strftime()-variabler. (Standard: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Kunne ikke åpne malen, oppater Serendipity!'); +@define('ADVANCED_OPTIONS', 'Avanserte innstillinger'); +@define('EDIT_ENTRY', 'Rediger artikkel'); +@define('HTACCESS_ERROR', 'For å kunne sjekke din lokale webservers installasjon, må Serendipity være i stand til å skrive til filen ".htaccess". Dette var ikke mulig pga. feil rettigheter. Endre rettighetene slik:
  %s
og oppdater denne siden.'); +@define('SORT_ORDER', 'Sorter etter'); +@define('SORT_ORDER_NAME', 'Filnavn'); +@define('SORT_ORDER_EXTENSION', 'Filtype'); +@define('SORT_ORDER_SIZE', 'Filstørrelse'); +@define('SORT_ORDER_WIDTH', 'Bildebredde'); +@define('SORT_ORDER_HEIGHT', 'Bildehøyde'); +@define('SORT_ORDER_DATE', 'Upload-dato'); +@define('SORT_ORDER_ASC', 'Stigende'); +@define('SORT_ORDER_DESC', 'Fallende'); +@define('THUMBNAIL_SHORT', 'Mini'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Formater %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Starten på uken'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity har opdaget at din nåværende konfigurasjon passer til versjon %s. Serendipity selv er installert som version %s, Det er nødvendig å oppgradere! Klikk her!'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Velkommen til Serendipitys oppgraderingsscript.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Scriptet vil hjelpe deg med å oppgradere Serendipity %s.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Denne meldingen vises fordi Serendipity versjon %s er installert, men databasen er ennå ikke opgradert til denne versjonen.'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Databasen oppdateringer (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Følgende .sql-filer må kjøres før Serendipity igjen kan fungere normalt.'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Versjonsspesifikke oppgaver'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Ingen versjonsspesifikke oppgaver funnet'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Ønsker du at ovenstående opgaver utføres?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Nei, jeg utfører dem manuelt'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Ja takk!'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Det ser ut til at oppgradering ikke er nødvendig.'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Serendipity er oppgradert'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Du har ignorert en del av oppgraderingen. Vennligst undersøk hvorvidt databasen er korrekt opdatert, og planlagte opgaver utført'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Din Serendipity-installation er nå oppgradert til version %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Du kan vende tilbake til din blog ved å klikke %sher%s'); +@define('MANAGE_USERS', 'Håndter brukere'); +@define('CREATE_NEW_USER', 'Opprett ny bruker'); +@define('CREATE_NOT_AUTHORIZED', 'Du kan ikke redigere brukere med det samme brukernivå som deg selv'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Du kan ikke opprette brukere med et høyere brukernivå enn deg selv'); +@define('CREATED_USER', 'En ny bruker %s er opprettet'); +@define('MODIFIED_USER', 'Egenskapene for brukeren %s er endret'); +@define('USER_LEVEL', 'brukernivå'); +@define('DELETE_USER', 'Du er i ferd med å slette bruker #%d %s. Er du sikker? Dette vil forhindre visning av alle artikler skrevet av brukeren.'); +@define('DELETED_USER', 'Bruker #%d %s er slettet.'); +@define('LIMIT_TO_NUMBER', 'Hvor mange punkter skal vises?'); +@define('ENTRIES_PER_PAGE', 'artikler per side'); + +/* TRANSLATE */ +@define('PERMISSIONS', 'Rettigheter'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Databaseinnstillinger'); +@define('INSTALL_CAT_DB_DESC', 'Her kan du taste inn all databaseinformasjon'); +@define('INSTALL_DBTYPE', 'Databasetype'); +@define('INSTALL_DBTYPE_DESC', 'Databasetype'); +@define('INSTALL_DBHOST', 'Databaseserver'); +@define('INSTALL_DBHOST_DESC', 'Hostname til din databaseserver'); +@define('INSTALL_DBUSER', 'Databasebrukernavn'); +@define('INSTALL_DBUSER_DESC', 'Brukernavnet som er brukt til å koble til databasen din'); +@define('INSTALL_DBPASS', 'Databasepassord'); +@define('INSTALL_DBPASS_DESC', 'Passordet som passer til brukernavnet over'); +@define('INSTALL_DBNAME', 'Databasenavn'); +@define('INSTALL_DBNAME_DESC', 'Navnet på din database'); +@define('INSTALL_DBPREFIX', 'Databasetabell-prefiks'); +@define('INSTALL_DBPREFIX_DESC', 'Prefiks på tabellnavn, f.eks. serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Baner'); +@define('INSTALL_CAT_PATHS_DESC', 'Forskjellige baner til forskjellige essensielle mapper og filer. Glem ikke etterfølgende slasher på biblioteker!'); +@define('INSTALL_FULLPATH', 'Full bane'); +@define('INSTALL_FULLPATH_DESC', 'Den fulle og absolutte bane til din serendipity-installasjon'); +@define('INSTALL_UPLOADPATH', 'Upload-bane'); +@define('INSTALL_UPLOADPATH_DESC', 'Alle uploads blir plassert her, relativ til \'Full bane\' - typisk \'uploads/\''); +@define('INSTALL_RELPATH', 'Relativ bane'); +@define('INSTALL_RELPATH_DESC', 'Bane til Serendipity i henhold til din browser, typisk \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Relativ mal-bane'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Bane til mappen som inneholder dine maler - Relativ til \'relative bane\''); +@define('INSTALL_RELUPLOADPATH', 'Relativ upload-bane'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Bane til dine uploads i henhold til din browser - Relativ til \'relative bane\''); +@define('INSTALL_URL', 'URL til din blogg'); +@define('INSTALL_URL_DESC', 'Base-URL for din Serendipity-installasjon'); +@define('INSTALL_INDEXFILE', 'Index-fil'); +@define('INSTALL_INDEXFILE_DESC', 'Navnet på din Serendipity index-fil'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Generelle innstillinger'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Tilpass måten Serendipity oppfører seg på'); +@define('INSTALL_USERNAME', 'Admin-brukernavn'); +@define('INSTALL_USERNAME_DESC', 'Brukernavn til admin-login'); +@define('INSTALL_PASSWORD', 'Admin-passord'); +@define('INSTALL_PASSWORD_DESC', 'Passord til admin-login'); +@define('INSTALL_EMAIL', 'Admin-email'); +@define('INSTALL_EMAIL_DESC', 'E-mailadresse til eieren av bloggen'); +@define('INSTALL_SENDMAIL', 'Send e-mailer til admin?'); +@define('INSTALL_SENDMAIL_DESC', 'Vil du motta email når kommentare blir gitt til dine artikler?'); +@define('INSTALL_SUBSCRIBE', 'Tillat brukere å abonnere på artikler?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Tillat brukere å abonnere på en artikkel og dermed motte en mail når det oprettes nye kommentare på den artikkelen'); +@define('INSTALL_BLOGNAME', 'Navn på blogg'); +@define('INSTALL_BLOGNAME_DESC', 'Tittelen på din blogg'); +@define('INSTALL_BLOGDESC', 'Blogg-beskrivelse'); +@define('INSTALL_BLOGDESC_DESC', 'Beskrivelse av din blogg'); +@define('INSTALL_LANG', 'Språk'); +@define('INSTALL_LANG_DESC', 'Velg språket på din blogg'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Utseende og innstillinger'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Tilpass hvordan Serendipity ser ut og føles'); +@define('INSTALL_WYSIWYG', 'Bruk WYSIWYG-editor'); +@define('INSTALL_WYSIWYG_DESC', 'Vil du benytte WYSIWYG-editoren? (Virker med IE5+, delvis i Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Tving gjennom XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', 'Ønsker du å kreve overholdelse av XHTML 1.1 (kan skape problemer i 4.-generasjonsbrowsere)'); +@define('INSTALL_POPUP', 'Aktiver bruk av popup-vinduer'); +@define('INSTALL_POPUP_DESC', 'Vil du åpne kommentarer og trackbacks i et popupvindu?'); +@define('INSTALL_EMBED', 'Er Serendipity embedded?'); +@define('INSTALL_EMBED_DESC', 'Hvis du ønsker å kapsle Serendipity inn i en normal side, aktiver da dette direktivet for å ignorere headere og kun skrive ut innholdet. Du kan benytte indexFile-direktivet til å lage en wrapper-fil hvor du plasserer din normale hjemmesides headere. Konsulter README filen for mer informasjon!'); +@define('INSTALL_TOP_AS_LINKS', 'Vis topp utgangssider/referanser som links?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"no": Utgangssider og referanser blir vist som ren tekst for å forhindre Google-spam. "yes": Utgangssider og referanser blir vist som hyperlinker. "default": Bruk innstillinger fra global konfigurasjon (anbefalt).'); +@define('INSTALL_BLOCKREF', 'Blokkér referanser'); +@define('INSTALL_BLOCKREF_DESC', 'Er det noen spesielle hosts du ikke ønsker skal vises i referanselisten? Seprarer listen av hostnavn med \';\' og merk deg at disse er blokkert med substring-masker!'); +@define('INSTALL_REWRITE', 'URL-omskrivning'); +@define('INSTALL_REWRITE_DESC', 'Velg hvilken regel du ønsker å bruke når du genererer URL-er. Aktivering av omskrivningsregler vil gjøre URL-ene dine flotte og gjøre din side mer egnet for indeksering av roboter som google. Webserveren må enten støtte mod_rewrite eller "AllowOverride All" for ditt Serendipity-bibliotek. Standardindstillingen er automatisk beregnet'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Bildekonverterings-innstillinger'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Generell informasjon om hvordan Serendipity skal håndtere bilder'); +@define('INSTALL_IMAGEMAGICK', 'Bruk Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Har du ImageMagick installert og ønsker å bruke det til å endre størrelse på bilder?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Bane til convert binærfil'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Full bane og navn på din ImageMagick convert binærfil'); +@define('INSTALL_THUMBSUFFIX', 'Thumbnail-suffiks'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Thumbnails vil bli gitt navn etter følgende mønster: original.[suffix].ext'); +@define('INSTALL_THUMBWIDTH', 'Thumbnail-dimensjoner'); +@define('INSTALL_THUMBWIDTH_DESC', 'Statisk maksimalbredde på en auto-genereret thumbnail'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Dine personlige detaljer'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Endre dine personlige detaljer'); +@define('USERCONF_USERNAME', 'Ditt brukernavn'); +@define('USERCONF_USERNAME_DESC', 'Brukernavnet du vil bruke for å logge inn i bloggen'); +@define('USERCONF_PASSWORD', 'Ditt passord'); +@define('USERCONF_PASSWORD_DESC', 'Passordet du vil bruke for å logge inn i bloggen'); +@define('USERCONF_EMAIL', 'Din e-mailadresse'); +@define('USERCONF_EMAIL_DESC', 'Din personlige e-mailadresse'); +@define('USERCONF_SENDCOMMENTS', 'Send beskjeder om nye kommentarer?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Ønsker du å motta en mail når nye kommentarer blir lagt til dine artikler?'); +@define('USERCONF_SENDTRACKBACKS', 'Send bjeskeder om nye trackbacks?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Ønsker du å motta en mail når nye trackbacks blir lagt til dine artikler?'); +@define('USERCONF_ALLOWPUBLISH', 'Tillatelse: Publisere artikler?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Kan denne brukeren publisere artikler?'); + +@define('DIRECTORIES_AVAILABLE', 'I listen over tilgjengelige undermapper, kan du klikke på en ny mappe for å oprette en ny mappe innenfor den stukturen.'); +@define('ALL_DIRECTORIES', 'alle mapper'); +@define('MANAGE_DIRECTORIES', 'Håndter mapper'); +@define('DIRECTORY_CREATED', 'Mappen %s er oprettet.'); +@define('PARENT_DIRECTORY', 'Hovedmappe'); +@define('CONFIRM_DELETE_DIRECTORY', 'Er du sikker på du vil slette alt indholdet i mappen %s?'); +@define('ERROR_NO_DIRECTORY', 'Feil: Mappen %s eksisterer ikke'); +@define('CHECKING_DIRECTORY', 'Sjekker filer i mappen %s'); +@define('DELETING_FILE', 'Sletter fil %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Kunne ikke fjerne en ikke-tom mappe. Afkryss "tving gjennom sletting"-feltet hvis du vil slette disse og trykk deretter på Submit igjen. Eksisterende filer er:'); +@define('DIRECTORY_DELETE_FAILED', 'Sletting av mappe %s mislyktes. Sjekk rettigheter eller ovenstående beskjeder.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Mappen %s er slettet.'); +@define('SKIPPING_FILE_EXTENSION', 'Ignorerte filen: Manglende filtype %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Ignorerte fil: %s er ikke lesbar.'); +@define('FOUND_FILE', 'Fant ny/endret fil: %s.'); +@define('ALREADY_SUBCATEGORY', '%s er allerede en underkategori av %s.'); +@define('PARENT_CATEGORY', 'Hovedkategori'); +@define('IN_REPLY_TO', 'Som svar på'); +@define('TOP_LEVEL', 'Topnivå'); +@define('XML_IMAGE_TO_DISPLAY', 'XML-knapp'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Linker til XML-feeder vil bli vist med dette bildet. Etterlat tomt for standard, tast inn \'none\' for å deaktivere.'); +@define('SUCCESS', 'Suksess'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', '.'); +@define('POWERED_BY_SHOW_TEXT', 'Vis "Serendipity" som tekst'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Vil vise "Serendipity Weblog" som tekst'); +@define('POWERED_BY_SHOW_IMAGE', 'Vis "Serendipity" med en logo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Vis Serendipity-logoen'); +@define('SETTINGS_SAVED_AT', 'De nye innstillgene er lagret kl %s'); +@define('PLUGIN_ITEM_DISPLAY', 'Hvor skal enheten vises?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Kun udvidet artikkel'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Kun i oversikten'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Hele tiden'); +@define('RSS_IMPORT_CATEGORY', 'Bruk denne kategorien for kategoriløse artikler'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Det oppstod en ukjent feil, filen ble ikke lastet opp. Kanskje er din filstørrelse større end den maksimale størrelse tillatt av ditt serveroppsett. Spør din webtilbyder eller rediger din php.ini fil for å tillate uploads av større filer.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Kommentarer på denne artikkelen vil først bli vist når de er blitt godkjendt.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Du har følgende muligheter:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Advarsel: Denne kommentaren krever godkjennelse før den blir vist'); +@define('DELETE_COMMENT', 'Slett kommentar'); +@define('APPROVE_COMMENT', 'Godkjenn kommentar'); +@define('REQUIRES_REVIEW', 'Krever godkjennelse'); +@define('COMMENT_APPROVED', 'Kommentar #%s er godkjent'); +@define('COMMENT_DELETED', 'Kommentar #%s er slettet'); +@define('VIEW', 'Vis'); +@define('COMMENT_ALREADY_APPROVED', 'Kommentar #%s ser allerede ut til å være godkjent'); +@define('COMMENT_EDITED', 'Den valgte kommentar er redigert'); +@define('HIDE', 'Skjul'); +@define('VIEW_EXTENDED_ENTRY', 'Les resten av "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Det er ikke meningen at denne linken skal klikkes. Den innholder trackback-URI-en for denne postingen. Du kan bruke denne URI-en til å sende ping- og trackbacks fra din egen blog til denne posten. For å kopiere linken, høyreklikk og velg "Kopier snarvei" i Internet Explorer eller "Copy Link Location" i Mozilla.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Advarsel: Denne trackbacken trenger godkjennelse før den blir vist.'); +@define('DELETE_TRACKBACK', 'Slett trackback'); +@define('APPROVE_TRACKBACK', 'Godkjenn trackback'); +@define('TRACKBACK_APPROVED', 'Trackback #%s har blitt godkjent'); +@define('TRACKBACK_DELETED', 'Trackback #%s har blitt slettet'); +@define('COMMENTS_MODERATE', 'Kommentarer og trackback til denne posten krever moderasjon.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Bruk https ved innlogging'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Peker login-linken til en https-adresse. Webserveren din må støtte dette!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Gjøre eksterne lenker klikkbare?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": Usjekkede eksterne lenker (topp utgangssider, referanser, brukerkommentarer) er ikke vist - vist som ren tekst hvor mulig, for å forhindre Google-spam (anbefalt). "yes": Usjekkede eksterne lenker blir vist som hyperlenker. Kan bli overstyrt i sidebar plugin-konfigurasjon!'); +@define('PAGE_BROWSE_COMMENTS', 'Side %s av %s, totalt %s kommentarer'); +@define('FILTERS', 'Filtere'); +@define('FIND_ENTRIES', 'Finn poster'); +@define('FIND_COMMENTS', 'Finn kommentarer'); +@define('FIND_MEDIA', 'Finn media'); +@define('FILTER_DIRECTORY', 'Katalog'); +@define('SORT_BY', 'Sorter på'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Ingen Trackback sendt: Kunne ikke åpne tilkobling til %s på port %d'); +@define('MEDIA', 'Media'); +@define('MEDIA_LIBRARY', 'Media-bibliotek'); +@define('ADD_MEDIA', 'Legg til media'); +@define('ENTER_MEDIA_URL', 'Oppgi en URL til en fil som skal hentes:'); +@define('ENTER_MEDIA_UPLOAD', 'Velg en fil du ønsker å laste opp:'); +@define('SAVE_FILE_AS', 'Lagre filen som:'); +@define('STORE_IN_DIRECTORY', 'Lagre i følgende katalog: '); +@define('MEDIA_RENAME', 'Gi denne filen nytt navn'); +@define('IMAGE_RESIZE', 'Endre størrelsen på dette bildet'); +@define('MEDIA_DELETE', 'Slett denne filen'); +@define('FILES_PER_PAGE', 'Antall filer per side'); +@define('CLICK_FILE_TO_INSERT', 'Klikk på filen du ønsker å sette inn:'); +@define('SELECT_FILE', 'Velg fil å sette inn'); +@define('MEDIA_FULLSIZE', 'Full størrelse'); +@define('CALENDAR_BOW_DESC', 'Ukedagen som skal være starten på uken. Standard er mandag'); +@define('SUPERUSER', 'Blogg-administrasjon'); +@define('ALLOWS_YOU_BLAHBLAH', 'Legger en link til blogg-administrasjonen i sidebaren.'); + +@define('CALENDAR', 'Kalender'); +@define('SUPERUSER_OPEN_ADMIN', 'Åpne administrasjon'); +@define('SUPERUSER_OPEN_LOGIN', 'Åpne login-skjerm'); +@define('INVERT_SELECTIONS', 'Inverter valgene'); +@define('COMMENTS_DELETE_CONFIRM', 'Er du sikker på at du ønsker å slette de valgte kommentarene?'); +@define('COMMENT_DELETE_CONFIRM', 'Er du sikker på at du ønsker å slette kommentar #%d, skrevet av %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Slett valgte kommentarer'); +@define('VIEW_COMMENT', 'Se kommentar'); +@define('VIEW_ENTRY', 'Se posting'); +@define('DELETE_FILE', 'Slettet filen kalt %s'); +@define('ABOUT_TO_DELETE_FILE', 'Du er i ferd med å slette %s
Hvis du bruker denne filen i noen av postene dine vil dette forårsake døde lenker eller bilder
Er du sikker på at du vil gå videre?

'); +@define('TRACKBACK_SENDING', 'Sender trackback til URI %s...'); +@define('TRACKBACK_SENT', 'Trackback suksess'); +@define('TRACKBACK_FAILED', 'Trackback slo feil: %s'); +@define('TRACKBACK_NOT_FOUND', 'Fant ingen trackback-URI.'); +@define('TRACKBACK_URI_MISMATCH', 'Den autofunnede trackback-URI-en stemmer ikke overens med vår mål-URI.'); +@define('TRACKBACK_CHECKING', 'Sjekker %s for mulige trackbacks...'); +@define('TRACKBACK_NO_DATA', 'Mål inneholdt ingen data'); +@define('TRACKBACK_SIZE', 'Mål-URI oversteg maksimum filstørrelse på %s bytes.'); +@define('VIEWMODE_THREADED', 'Bytt til trådet visning'); +@define('COMMENTS_VIEWMODE_THREADED', 'Trådet'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Lineær'); +@define('DISPLAY_COMMENTS_AS', 'Vis kommentarer som'); +@define('SIDEBAR_PLUGINS', 'Sidebar-plugins'); +@define('EVENT_PLUGINS', 'Hendelses-lugins'); +@define('ADD_MEDIA_BLAHBLAH', 'Legg til en fil til ditt mediabibliotek:

Her kan du laste opp mediafiler, eller be meg om å hente dem fra en adresse på nettet! Hvis du ikke har et passende bilde, søk etter bilder på Google som passer til tankene dine. Resultatene er ofte nyttige og morsomme :)

Velg metode:
'); +@define('COMMENTS_FILTER_SHOW', 'Show'); // Translate +@define('COMMENTS_FILTER_ALL', 'All'); // Translate +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Only approved'); // Translate +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Pending approval'); // Translate +@define('RSS_IMPORT_BODYONLY', 'Put all imported text in the "body" section and do not split up into "extended entry" section.'); // Translate +@define('SYNDICATION_PLUGIN_FULLFEED', 'Show full articles with extended body inside RSS feed'); // Translate +@define('MT_DATA_FILE', 'Movable Type data file'); // Translate +@define('FORCE', 'Force'); // Translate +@define('CREATE_AUTHOR', 'Create author \'%s\'.'); // Translate +@define('CREATE_CATEGORY', 'Create category \'%s\'.'); // Translate +@define('MYSQL_REQUIRED', 'You must have the MySQL extension in order to perform this action.'); // Translate +@define('COULDNT_CONNECT', 'Could not connect to MySQL database: %s.'); // Translate +@define('COULDNT_SELECT_DB', 'Could not select database: %s.'); // Translate +@define('COULDNT_SELECT_USER_INFO', 'Could not select user information: %s.'); // Translate +@define('COULDNT_SELECT_CATEGORY_INFO', 'Could not select category information: %s.'); // Translate +@define('COULDNT_SELECT_ENTRY_INFO', 'Could not select entry information: %s.'); // Translate +@define('COULDNT_SELECT_COMMENT_INFO', 'Could not select comment information: %s.'); // Translate +@define('WEEK', 'Week'); // Translate +@define('WEEKS', 'Weeks'); // Translate +@define('MONTHS', 'Months'); // Translate +@define('DAYS', 'Days'); // Translate +@define('ARCHIVE_FREQUENCY', 'Calendar item frequency'); // Translate +@define('ARCHIVE_FREQUENCY_DESC', 'The calendar interval to use between each item in the list'); // Translate +@define('ARCHIVE_COUNT', 'Number of items in the list'); // Translate +@define('ARCHIVE_COUNT_DESC', 'The total number of months, weeks or days to display'); // Translate +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Below is a list of installed plugins'); // Translate +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); // Translate +@define('EVENT_PLUGIN', 'event plugin'); // Translate +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Click here to install a new %s'); // Translate +@define('VERSION', 'version'); // Translate +@define('INSTALL', 'Install'); // Translate +@define('ALREADY_INSTALLED', 'Already installed'); // Translate +@define('SELECT_A_PLUGIN_TO_ADD', 'Select the plugin which you wish to install'); // Translate +@define('INSTALL_OFFSET', 'Server time Offset'); // Translate +@define('STICKY_POSTINGS', 'Sticky Postings'); // Translate +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); // Translate +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); // Translate +@define('IMPORT_ENTRIES', 'Import data'); // Translate +@define('EXPORT_ENTRIES', 'Export entries'); // Translate +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); // Translate +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); // Translate +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); // Translate +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); // Translate +@define('IMPORT_NOW', 'Import now!'); // Translate +@define('IMPORT_STARTING', 'Starting import procedure...'); // Translate +@define('IMPORT_FAILED', 'Import failed'); // Translate +@define('IMPORT_DONE', 'Import successfully completed'); // Translate +@define('IMPORT_WEBLOG_APP', 'Weblog application'); // Translate +@define('EXPORT_FEED', 'Export full RSS feed'); // Translate +@define('STATUS', 'Status after import'); // Translate +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); // Translate +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); // Translate +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); // Translate +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); // Translate +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); // Translate +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); // Translate +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); // Translate +@define('INSTALL_SHOWFUTURE', 'Show future entries'); // Translate +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); // Translate +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); // Translate +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); // Translate +@define('NO_IMAGES_FOUND', 'No images found'); // Translate +@define('PERSONAL_SETTINGS', 'Personal Settings'); // Translate +@define('REFERER', 'Referer'); // Translate +@define('NOT_FOUND', 'Not found'); // Translate +@define('NOT_WRITABLE', 'Not writable'); // Translate +@define('WRITABLE', 'Writable'); // Translate +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); // Translate +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); // Translate +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); // Translate +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); // Translate +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); // Translate +@define('RED', 'red'); // Translate +@define('YELLOW', 'yellow'); // Translate +@define('GREEN', 'green'); // Translate +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); // Translate +@define('RECOMMENDED', 'Recommended'); // Translate +@define('ACTUAL', 'Actual'); // Translate +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); // Translate +@define('PHP_INSTALLATION', 'PHP installation'); // Translate +@define('THEY_DO', 'they do'); // Translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', 'Simple installation'); // Translate +@define('EXPERT_INSTALLATION', 'Expert installation'); // Translate +@define('COMPLETE_INSTALLATION', 'Complete installation'); // Translate +@define('WONT_INSTALL_DB_AGAIN', 'won\'t install the database again'); // Translate +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); // Translate +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); // Translate +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); // Translate +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); // Translate +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); // Translate +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); // Translate +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); // Translate +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); // Translate +@define('OPERATING_SYSTEM', 'Operating system'); // Translate +@define('WEBSERVER_SAPI', 'Webserver SAPI'); // Translate +@define('IMAGE_ROTATE_LEFT', 'Rotate image 90 degrees counter-clockwise'); // Translate +@define('IMAGE_ROTATE_RIGHT', 'Rotate image 90 degrees clockwise'); // Translate +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); // Translate +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); // Translate +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Tilføy markup-transformasjoner på teksten (smilies, shortcut markups via *, /, _, ...). Hvis du slår dette av vil all HTML-kode i teksten bli beholdt.'); +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +?> \ No newline at end of file diff --git a/lang/serendipity_lang_pt.inc.php b/lang/serendipity_lang_pt.inc.php new file mode 100644 index 0000000..35b5819 --- /dev/null +++ b/lang/serendipity_lang_pt.inc.php @@ -0,0 +1,671 @@ + + +@define('LANG_CHARSET', 'ISO-8859-1'); +@define('DATE_LOCALES', 'portuguese brazilian, pt, pt_BR'); +@define('DATE_FORMAT_ENTRY', '%A, %e de %B de %Y'); +@define('WYSIWYG_LANG', 'pt_br'); +@define('LANG_DIRECTION', 'ltr'); + +@define('SERENDIPITY_ADMIN_SUITE', 'Painel de Administração do Serendipity'); +@define('HAVE_TO_BE_LOGGED_ON', 'Você deve entrar no sistema para ver esta página'); +@define('WRONG_USERNAME_OR_PASSWORD', 'Você deve ter fornecido nome de usuário ou senha inválidos'); +@define('APPEARANCE', 'Aparência'); +@define('MANAGE_STYLES', 'Gerenciar estilos'); +@define('CONFIGURE_PLUGINS', 'Configurar Plugins'); +@define('CONFIGURATION', 'Configuração'); +@define('BACK_TO_BLOG', 'De volta ao Weblog'); +@define('LOGIN', 'Login'); +@define('LOGOUT', 'Logout'); +@define('LOGGEDOUT', 'Logged out.'); +@define('CREATE', 'Criar'); +@define('SAVE', 'Salvar'); +@define('NAME', 'Nome'); +@define('CREATE_NEW_CAT', 'Criar nova categoria'); +@define('I_WANT_THUMB', 'Quero usar miniaturas em meu artigo.'); +@define('I_WANT_BIG_IMAGE', 'Quero usar a maior imagem em meu artigo.'); +@define('I_WANT_NO_LINK', ' Quero exibi-la como imagem'); +@define('I_WANT_IT_TO_LINK', 'Quero exibi-la como um link para esta URL:'); +@define('BACK', 'Volta'); +@define('FORWARD', 'Encaminha'); +@define('ANONYMOUS', 'Anônimo'); +@define('NEW_TRACKBACK_TO', 'Novo trackback feito para'); +@define('NEW_COMMENT_TO', 'Novo comentário enviado para'); +@define('RECENT', 'Recente...'); +@define('OLDER', 'Antigos...'); +@define('DONE', 'Pronto'); +@define('WELCOME_BACK', 'Bem-vindo de volta,'); +@define('TITLE', 'Título'); +@define('DESCRIPTION', 'Descrição'); +@define('PLACEMENT', 'Localização'); +@define('DELETE', 'Excluir'); +@define('SAVE', 'Salvar'); +@define('UP', 'Acima'); +@define('DOWN', 'Abaixo'); +@define('ENTRIES', 'Artigos:'); +@define('NEW_ENTRY', 'Novo artigo'); +@define('EDIT_ENTRIES', 'Editar artigos'); +@define('CATEGORIES', 'Categorias'); +@define('WARNING_THIS_BLAHBLAH', "ATENÇÃO:\\nIsso pode levar muito tempo se existirem muitas imagens sem miniaturas."); +@define('CREATE_THUMBS', 'Reconstruir Miniaturas'); +@define('MANAGE_IMAGES', 'Gerenciar imagens'); +@define('NAME', 'Nome'); +@define('EMAIL', 'E-mail'); +@define('HOMEPAGE', 'Página pessoal'); +@define('COMMENT', 'Comentário'); +@define('REMEMBER_INFO', 'Relembrar Informações? '); +@define('SUBMIT_COMMENT', 'Enviar Comentário'); +@define('NO_ENTRIES_TO_PRINT', 'Nenhum artigo para imprimir'); +@define('COMMENTS', 'Comentários'); +@define('ADD_COMMENT', 'Adicionar Comentários'); +@define('NO_COMMENTS', 'Nenhum cmentários'); +@define('POSTED_BY', 'Enviado por'); +@define('ON', 'em'); +@define('A_NEW_COMMENT_BLAHBLAH', 'Um novo comentário foi enviado para o seu Blog "%s", no artigo entitulada como "%s".'); +@define('A_NEW_TRACKBACK_BLAHBLAH', 'Um novo trackback foi feito para o seu Blog "%s", no artigo entitulada como "%s".'); +@define('NO_CATEGORY', 'Nenhuma categoria'); +@define('ENTRY_BODY', 'Corpo do artigo'); +@define('EXTENDED_BODY', 'Extensão do corpo do artigo'); +@define('CATEGORY', 'Categoria:'); +@define('EDIT', 'Editar'); +@define('NO_ENTRIES_BLAHBLAH', 'Nenhum artigo encontrada para a consulta %s' . "\n"); +@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Sua busca para %s retornou %s resultados:'); +@define('SEARCH_TOO_SHORT', 'Sua consulta deve ter no mínimo 3 caracteres'); +@define('IMAGE', 'Imagem'); +@define('ERROR_FILE_NOT_EXISTS', 'Erro: O nome de arquivo antigo não existe!'); +@define('ERROR_FILE_EXISTS', 'Erro: O novo nome de arquivo já existe, escolha outro!'); +@define('ERROR_SOMETHING', 'Erro: Problema desconhecido.'); +@define('ADDING_IMAGE', 'Adicionando imagem...'); +@define('THUMB_CREATED_DONE', 'Miniatura criada.
Pronto.'); +@define('ERROR_FILE_EXISTS_ALREADY', 'Erro: Arquivo já existe em sua máquina!'); +@define('GO', 'Vai!'); +@define('NEWSIZE', 'Novo tamanho: '); +@define('RESIZE_BLAHBLAH', 'Redimensionar %s

'); +@define('ORIGINAL_SIZE', 'Tamanho original: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Aqui você pode ajustar o novo tamanho das imagens. Se pretende manter as proporções, preencha apenas um valor e pressione a tecla TAB que automaticamente será calculado o novo tamanho de modo que as proporções não fiquem bagunçadas:'); +@define('QUICKJUMP_CALENDAR', 'Calendário de acesso rápido'); +@define('QUICKSEARCH', 'Pesquisa rápida'); +@define('SEARCH_FOR_ENTRY', 'Procure por um artigo'); +@define('ARCHIVES', 'Arquivos'); +@define('BROWSE_ARCHIVES', 'Navegar nos arquivos por mês'); +@define('TOP_REFERRER', 'Maiores Referências'); +@define('SHOWS_TOP_SITES', 'Exibe os links de entrada mais utilizados para entrar no seu blog'); +@define('TOP_EXITS', 'Maiores Saídas'); +@define('SHOWS_TOP_EXIT', 'Exibe os links de saída mais requisitados de seu blog'); +@define('SYNDICATION', 'Sindicalização'); +@define('SHOWS_RSS_BLAHBLAH', 'Shows RSS syndication links'); +@define('ADVERTISES_BLAHBLAH', 'Adverte da origem do seu blog'); +@define('HTML_NUGGET', 'Fragmento de HTML'); +@define('HOLDS_A_BLAHBLAH', 'Apresenta um fragmento de HTML à sua barra lateral'); +@define('TITLE_FOR_NUGGET', 'Título para o fragmento de HTML'); +@define('THE_NUGGET', 'Fragmento de HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Sindicalizar esse Blog'); +@define('YOU_CHOSE', 'Sua escolha %s'); +@define('IMAGE_SIZE', 'Tamanho da imagem'); +@define('IMAGE_AS_A_LINK', 'Inserção de imagem'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', 'Trackbacks'); +@define('TRACKBACK', 'Trackback'); +@define('NO_TRACKBACKS', 'Nenhum Trackbacks'); +@define('TOPICS_OF', 'Tópicos de'); +@define('VIEW_FULL', 'ver tudo'); +@define('VIEW_TOPICS', 'ver tópicos'); +@define('AT', 'em'); +@define('SET_AS_TEMPLATE', 'Atribuir como template'); +@define('IN', 'no'); +@define('EXCERPT', 'Segmento'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Link para o artigo'); +@define('LINK_TO_REMOTE_ENTRY', 'Link para artigo remoto'); +@define('IP_ADDRESS', 'Endereço IP'); +@define('USER', 'Usuário'); +@define('THUMBNAIL_USING_OWN', 'Usando %s como sua própria miniatura devido ao seu pequeno tamanho.'); +@define('THUMBNAIL_FAILED_COPY', 'A tentativa de usar %s como sua própria miniatura falhou devido à um erro na cópia!'); +@define('AUTHOR', 'Autor'); +@define('LAST_UPDATED', 'Última atualização'); +@define('TRACKBACK_SPECIFIC', 'URI específica do trackback para este artigo'); +@define('DIRECT_LINK', 'Link direto para este artigo'); +@define('COMMENT_ADDED', 'Seu comentário foi adicionado corretamente. '); +@define('COMMENT_ADDED_CLICK', 'Clique %saqui para retornar%s aos comentários, ou %saqui para fechar%s esta janela.'); +@define('COMMENT_NOT_ADDED', 'Seus comentários não foram adicionados, porque comentários para este artigo foram desabilitadas. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Clique %saqui para retornar%s aos comentários, ou %saqui para fechar%s esta janela.'); +@define('COMMENTS_DISABLE', 'Não se permite comentários para este artigo'); +@define('COMMENTS_ENABLE', 'Comentários para este artigo são permitidos'); +@define('COMMENTS_CLOSED', 'O autor não autorizou comentários para este artigo'); +@define('EMPTY_COMMENT', 'Seu comentário está vazio, por favor, %svolte%s e tente novamente'); +@define('ENTRIES_FOR', 'Artigos para %s'); +@define('DOCUMENT_NOT_FOUND', 'O documento %s não foi encontrado.'); +@define('USERNAME', 'Usuário'); +@define('PASSWORD', 'Senha'); +@define('AUTOMATIC_LOGIN', 'Salvar informações'); +@define('SERENDIPITY_INSTALLATION', 'Instalação do Serendipity'); +@define('LEFT', 'esquerda'); +@define('RIGHT', 'direita'); +@define('HIDDEN', 'oculto'); +@define('REMOVE_TICKED_PLUGINS', 'Remover plugins marcados'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Salvar modificações ao layout'); +@define('COMMENTS_FROM', 'Comentários de'); +@define('ERROR', 'Erro'); +@define('ENTRY_SAVED', 'Artigo salvo'); +@define('DELETE_SURE', 'Tem certeza que deseja excluir #%s definitivamente?'); +@define('NOT_REALLY', 'Não mesmo...'); +@define('DUMP_IT', 'Suma com ele!'); +@define('RIP_ENTRY', 'Até nunca mais artigo #%s'); +@define('CATEGORY_DELETED', 'Categoria #%s excluída. Os artigos antigos foram movidos para a categoria #%s'); +@define('INVALID_CATEGORY', 'Nenhuma categoria fornecida para exclusão'); +@define('CATEGORY_SAVED', 'Categoria salva'); +@define('SELECT_TEMPLATE', 'Selecione o template desejado para o seu Blog'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Artigos não adicionados!'); +@define('YES', 'Sim'); +@define('NO', 'Não'); +@define('USE_DEFAULT', 'Default'); +@define('CHECK_N_SAVE', 'Verificar & salvar'); +@define('DIRECTORY_WRITE_ERROR', 'Não foi possível escrever no diretório %s. Verifique as permissões.'); +@define('DIRECTORY_CREATE_ERROR', 'O Diretório %s não existe e não pode ser criado. Tente criá-lo manualmente'); +@define('DIRECTORY_RUN_CMD', ' -> execute %s %s'); +@define('CANT_EXECUTE_BINARY', 'Não pôde executar o binário %s'); +@define('FILE_WRITE_ERROR', 'Não foi possível editar o arquivo %s.'); +@define('FILE_CREATE_YOURSELF', 'Por favor, crie você mesmo o arquivo ou verifique suas permissões'); +@define('COPY_CODE_BELOW', '
* Copie o código abaixo e o coloque em %s no seu %s diretório:

%s
' . "\n"); +@define('WWW_USER', 'Altere www para o usuário com o qual o apache é executado (ex.: nobody).'); +@define('BROWSER_RELOAD', 'Uma vez feito isso, pressione o botão "atualizar" ("reload") do seu navegador.'); +@define('DIAGNOSTIC_ERROR', 'Detectamos alguns erros quando verificamos as informações fornecidas por você:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity ainda não está instalado. Por favor instale-o agora.'); +@define('INCLUDE_ERROR', 'erro do serendipity: não foi possível incluir %s - abortando.'); +@define('DATABASE_ERROR', 'erro do serendipity: não foi possível conectar ao banco de dados - abortando.'); +@define('CREATE_DATABASE', 'Criando a instalação padrão do banco de dados...'); +@define('ATTEMPT_WRITE_FILE', 'Tentando editar o arquivo %s...'); +@define('WRITTEN_N_SAVED', 'Configuração escrita & salva'); +@define('IMAGE_ALIGNMENT', 'Alinhamento de imagem'); +@define('ENTER_NEW_NAME', 'Informe o novo nome para: '); +@define('RESIZING', 'Redimensionando'); +@define('RESIZE_DONE', 'Pronto (%s imagens redimensionadas).'); +@define('SYNCING', 'Sincronizando o banco de dados com o diretório de imagens'); +@define('SYNC_DONE', 'Pronto (%s imagens sincronizadas).'); +@define('DELETE_IMAGE_FAIL' , 'Não foi possível excluir a imagem %s'); +@define('DELETE_THUMBNAIL', 'Excluir a miniatura da imagem entitulada %s'); +@define('FILE_NOT_FOUND', 'Não foi possível localizar o arquivo entitulado %s, será que foi excluído?'); +@define('ABORT_NOW', 'Cancelar agora'); +@define('REMOTE_FILE_NOT_FOUND', 'O arquivo não foi localizado no servidor, tem certeza sobre a URL: %s está correta?'); +@define('FILE_FETCHED', '%s buscado como %s'); +@define('FILE_UPLOADED', 'O arquivo %s foi transferido corretamente: %s'); +@define('WORD_OR', 'Ou'); +@define('SCALING_IMAGE', 'Redimensionando %s para %s x %s px'); +@define('KEEP_PROPORTIONS', 'Manter proporções'); +@define('REALLY_SCALE_IMAGE', 'Quer mesmo redimensionar a imagem? Não haverá volta!!'); +@define('TOGGLE_ALL', 'Alternar para expandir tudo'); +@define('TOGGLE_OPTION', 'Opção para alternar'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Inscrever-se para este artigo'); +@define('UNSUBSCRIBE_OK', "%s teve a inscrição cancelada para este artigo"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Novo comentário para o artigo inscrita"%s"'); +@define('SUBSCRIPTION_MAIL', "Oi %s,\n\nUm novo comentário foi feito num artigo que você está monitorando em \"%s\", entitulada \"%s\"\nQuem enviou o comentário foi: %s\n\nO artigo à qual nos referimos pode ser encontrada em: %s\n\nVocê pode cancelar sua inscrição clicando neste link: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Oi %s,\n\nUm novo trackback foi adicionado num artigo que você está monitorando em \"%s\", entitulada \"%s\"\nQuem enviou o comentário foi: %s\n\nO artigo à qual nos referimos pode ser encontrada em: %s\n\nVocê pode cancelar sua inscrição clicando neste link: %s\n"); +@define('SIGNATURE', "\n-- \n%s faz uso do Serendipity.\nO melhor Blog que tem por aí, e você também pode usá-lo.\nDê uma olhada em para descobrir como."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comments'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Campo "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Campo "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Imagem para o RSS feed'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Largura da imagem'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Altura da imagem'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-Mail do webmaster, se disponível. (vazio: oculto) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-Mail do editor, se disponível. (vazio: oculto) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL de uma imagem no formato GIF/JPEG/PNG, se disponível. (vazio: logotipo do serendipity)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'em pixels, max. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'em pixels, max. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Campo "ttl" (tempo de vida)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Quantidade de minutos depois do qual seu blog não deverá ser mais "cacheados" por sites/aplicações (vazio: oculto) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Campo "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'O campo "pubDate" deve ser empacotado para o canal RSS, para mostrar a data do último artigo?'); +@define('CONTENT', 'Conteúdo'); +@define('TYPE', 'Tipo'); +@define('DRAFT', 'Rascunho'); +@define('PUBLISH', 'Publicar'); +@define('PREVIEW', 'Pré-visualização'); +@define('DATE', 'Data'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'Atenção: A data que você especificou é inválida. Ela deve ser fornecida no formato DD/MM/AAAA HH:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Exibe a lista de categorias.'); +@define('ALL_AUTHORS', 'Todos autores'); +@define('CATEGORIES_TO_FETCH', 'Categorias para trazer'); +@define('CATEGORIES_TO_FETCH_DESC', 'Trazer categorias de qual autor?'); +@define('PAGE_BROWSE_ENTRIES', 'Página %s de %s, totalizando %s artigos'); +@define('PREVIOUS_PAGE', 'página anterior'); +@define('NEXT_PAGE', 'próxima página'); +@define('ALL_CATEGORIES', 'Todas as categorias'); +@define('DO_MARKUP', 'Executar trasnformações de marcação'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Formatação de data'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Formato da data atual do artigo, usando a mesma formatação da função strftime() do PHP. (Padrão: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Não foi possível abrir o arquivo de template, por favor atualize o serendipity!'); +@define('ADVANCED_OPTIONS', 'Opções avançadas'); +@define('EDIT_ENTRY', 'Editar artigo'); +@define('HTACCESS_ERROR', 'Para checar a intalação do servidor web, serendipity precisa ter poder criar o arquivo ".htaccess". Isso não foi possível devido a erros de permissões. Por favor, ajuste as permissões para isso:
  %s
e recarregue esta página.'); +@define('SIDEBAR_PLUGINS', 'Plugins da barra lateral'); +@define('EVENT_PLUGINS', 'Plugins de eventos'); +@define('SORT_ORDER', 'Ordenação'); +@define('SORT_ORDER_NAME', 'Nome do arquivo'); +@define('SORT_ORDER_EXTENSION', 'Extensão do arquivo'); +@define('SORT_ORDER_SIZE', 'Tamanho do arquivo'); +@define('SORT_ORDER_WIDTH', 'Largura da imagem'); +@define('SORT_ORDER_HEIGHT', 'Altura da imagem'); +@define('SORT_ORDER_DATE', 'Data de transferência'); +@define('SORT_ORDER_ASC', 'Ascendente'); +@define('SORT_ORDER_DESC', 'Descendente'); +@define('THUMBNAIL_SHORT', 'Miniatura'); +@define('ORIGINAL_SHORT', 'Orig.'); +@define('APPLY_MARKUP_TO', 'Aplicar marcação para %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Começo da semana'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity detectou que sua configuração está instalada com a versão %s, entretanto serendipity está instalado na versão %s, você precisa atualizar o serendipity! Clique aqui'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Oi, e bem-vindo ao agente de atualização do Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Estou aqui para ajudá-lo a atualizar a instalação %s do seu Serendipity.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Você enxerga esta mensagem porque acabou de instalar o Serendipity %s, mas ainda não atualizou a instalação do banco de dados para compatibilizar com esta versão'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Atualização do banco de dados (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Encontrei os seguintes arquivos .sql u]que precisam ser executados antes que você prossiga com a utilização normal do Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Tarefas específicas da versão'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Nenhuma tarefa específica da versão foi encontrada'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Quer realizar as tarefas acima?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Não, eu as executarei manualmente'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Por favor, faça isso'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Parece que que você não precisa executar nenhuma atualização'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Considere a atualização do Serendipity'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Você ignorou a fase de atualização do Serendipity, certifique-se de que o banco de dados está instalado corretamente e que as funções necessárias foram executadas'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'A sua instalação do Serendipity foi atualizada para a versão %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Você pode retornar ao seu blog clicando %saqui%s'); + +@define('MANAGE_USERS', 'Gerenciar usuários'); +@define('CREATE_NEW_USER', 'Criar novo usuário'); +@define('CREATE_NOT_AUTHORIZED', 'Você não pode modificar usuários que tenham o mesmo nível que o seu'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Você não pode criar usuários com um nível maior que o seu'); +@define('CREATED_USER', 'Um novo usuário %s foi criado'); +@define('MODIFIED_USER', 'As propriedades do usuário %s foram alteradas'); +@define('USER_LEVEL', 'Nível do usuário'); +@define('DELETE_USER', 'Você está prestes a excluir o usuário #%d %s. Tem certeza disso? Isso fará com que os artigos escritos por ele não sejam mais exibidos.'); +@define('DELETED_USER', 'Usuário #%d %s excluído.'); +@define('LIMIT_TO_NUMBER', 'Quantos itens devem ser exibidos?'); +@define('ENTRIES_PER_PAGE', 'artigos por página'); +@define('XML_IMAGE_TO_DISPLAY', 'Botão XML'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Links para XML Feeds serão exibidos por esta imagem. Deixe em branco para padrão, digite \'none\' para desabilitar.'); + +@define('DIRECTORIES_AVAILABLE', 'Na lista de subdiretórios disponíveis você pode clicar em qualquer nome de diretório para criar um novo diretório dentro daquela estrutura.'); +@define('ALL_DIRECTORIES', 'todos os diretórios'); +@define('MANAGE_DIRECTORIES', 'Gerenciar diretórios'); +@define('DIRECTORY_CREATED', 'Diretório %s foi criado.'); +@define('PARENT_DIRECTORY', 'Diretório superior'); +@define('CONFIRM_DELETE_DIRECTORY', 'Tem certeza que quer excluir todo o conteúdo do diretório %s?'); +@define('ERROR_NO_DIRECTORY', 'Erro: Diretório %s não existe'); +@define('CHECKING_DIRECTORY', 'Verificando arquivos no diretório %s'); +@define('DELETING_FILE', 'Excluindo arquivo %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Não foi possível remover um diretório que não esteja vazio. Marque a opção "forçar exclusão" se deseja remover seus arquivos também, e envie o comando novamente. Os arquivos existenntes são:'); +@define('DIRECTORY_DELETE_FAILED', 'A exclusão do diretório %s falhou. Verifique permissões ou as mensagem acima.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Diretório %s excluído corretamente.'); +@define('SKIPPING_FILE_EXTENSION', 'Ignorando arquivo: Faltando extensão em %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Ignorando arquivo: %s ilegível.'); +@define('FOUND_FILE', 'Encontrado arquivo novo/modificado: %s.'); +@define('ALREADY_SUBCATEGORY', '%s já é uma subcategoria de %s.'); +@define('PARENT_CATEGORY', 'Categoria superior'); +@define('IN_REPLY_TO', 'Em reposta à'); +@define('TOP_LEVEL', 'Nível máximo'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'Permissões'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Configurações de banco de dados'); +@define('INSTALL_CAT_DB_DESC', 'Aqui você pode inserir todas as informações do seu banco de dados. O Serendipity precisa dessas informações para funcionar.'); +@define('INSTALL_DBTYPE', 'Tipo de banco de dados'); +@define('INSTALL_DBTYPE_DESC', 'Tipo de banco de dados'); +@define('INSTALL_DBHOST', 'Servidor de banco de dados'); +@define('INSTALL_DBHOST_DESC', 'Endereço/Nome do seu servidor de banco de dados'); +@define('INSTALL_DBUSER', 'Usuário de banco de dados'); +@define('INSTALL_DBUSER_DESC', 'O nome de usuário que conecta ao banco'); +@define('INSTALL_DBPASS', 'Senha do banco de dados'); +@define('INSTALL_DBPASS_DESC', 'A senha correspondente ao usuário acima'); +@define('INSTALL_DBNAME', 'Nome do banco de dados'); +@define('INSTALL_DBNAME_DESC', 'O nome do banco de dados'); +@define('INSTALL_DBPREFIX', 'Prefixo para as tabelas do banco de dados'); +@define('INSTALL_DBPREFIX_DESC', 'Prefixo utilizado para nomear as tabelas, ex.: serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Caminhos'); +@define('INSTALL_CAT_PATHS_DESC', 'Os vários caminhos para pastas e arquivos essênciais. Não se esqueça de terminar com barras para os diretórios'); +@define('INSTALL_FULLPATH', 'Caminho completo'); +@define('INSTALL_FULLPATH_DESC', 'O caminho completo e absoluto para a sua instalação do serendipity'); +@define('INSTALL_UPLOADPATH', 'Caminho para o Upload'); +@define('INSTALL_UPLOADPATH_DESC', 'Todos os arquivos transferidos irão parar aí, relativo ao \'Caminho completo\' - geralmente \'uploads/\''); +@define('INSTALL_RELPATH', 'Caminho relativo'); +@define('INSTALL_RELPATH_DESC', 'Caminho para o serendipity em seu navegador, geralmente \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Caminho relativo do template'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Caminho para o diretório onde estão os seus templates - Relativo ao \'caminho relativo\''); +@define('INSTALL_RELUPLOADPATH', 'Caminho relativo do Upload'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Caminho para o \'uploads\' em seu navegador - Relativo ao \'caminho relativo\''); +@define('INSTALL_URL', 'URL do blog'); +@define('INSTALL_URL_DESC', 'URL base para a instalação do serendipity'); +@define('INSTALL_INDEXFILE', 'Arquivo inicial'); +@define('INSTALL_INDEXFILE_DESC', 'Nome do arquivo inicial do serendipity'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Configurações gerais'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Padroniza como o Serendipity deve se comportar'); +@define('INSTALL_USERNAME', 'Usuário do administrador'); +@define('INSTALL_USERNAME_DESC', 'Nome de usuário para o login do administrador'); +@define('INSTALL_PASSWORD', 'Senha do administrador'); +@define('INSTALL_PASSWORD_DESC', 'Senha para o login do administrador'); +@define('INSTALL_EMAIL', 'E-mail do administrador'); +@define('INSTALL_EMAIL_DESC', 'E-mail do administrador do blog'); +@define('INSTALL_SENDMAIL', 'Enviar e-mails ao administrador?'); +@define('INSTALL_SENDMAIL_DESC', 'Você deseja receber notificações via e-mail quando novos comentários forem incluídos em seus artigos?'); +@define('INSTALL_SUBSCRIBE', 'Permitir que usuários se inscrevam nos artigos?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Permitir que usuários se inscrevam nos artigos e com isso, recebam notificações via e-mail quando novos comentários forem adicionados?'); +@define('INSTALL_BLOGNAME', 'Nome do Blog'); +@define('INSTALL_BLOGNAME_DESC', 'Título do seu Blog'); +@define('INSTALL_BLOGDESC', 'Descrição do Blog'); +@define('INSTALL_BLOGDESC_DESC', 'Descrição'); +@define('INSTALL_LANG', 'Idioma'); +@define('INSTALL_LANG_DESC', 'Selecione o idioma para o seu blog'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Aparência e opções'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Padroniza como o Serendipity é exibido'); +@define('INSTALL_WYSIWYG', 'Usar editor WYSIWYG'); +@define('INSTALL_WYSIWYG_DESC', 'Você quer usar o editor WYSIWYG? (Funciona no IE5+ e parcialmente no Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Forçar adequação ao XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', 'Quer forçar uma adequação ao padrão XHTML 1.1 (pode causar problemas de exibição nos navegadores de 4ª geração (4.x))'); +@define('INSTALL_POPUP', 'Habilitar o uso de janelas popups'); +@define('INSTALL_POPUP_DESC', 'Você quer que o weblog utilize janelas popups para comentários, trackbacks e etc?'); +@define('INSTALL_EMBED', 'O serendipity está integrado?'); +@define('INSTALL_EMBED_DESC', 'Se você quer empacotar o serendipity em um website, mude para verdadeiro para descartar quaisquer cabeçalhos e apenas imprimir o conteúdo. Você pode fazer uso da opção \'Arquivo inicial\' para usar uma classe mais abrangente onde você colocaria os cabeçalhos normais de sua página. Veja o arquivo README para mais informações!'); +@define('INSTALL_BLOCKREF', 'Referências bloqueadas'); +@define('INSTALL_BLOCKREF_DESC', 'Existem servidores especiais que você não gostaria de listar na sua lista de referências? Separe a lista dos servidores com \';\' e note que o servidor será bloqueado por uma busca parcial em sua string!'); +@define('INSTALL_REWRITE', 'Rescrita de URL'); +@define('INSTALL_REWRITE_DESC', 'Selecione as regras que você gostaria de usar na geração de URLs. A habilitação da rescrita de URL criará URLS bem formatadas para o seu blog e o deixará melhor indexável para bots como o do google. O servidor web precisa dar suporte ou ao mod_rewrite ou ao "AllowOverride All" para o diretório do seu serendipity. A configuração padrão é auto detectada'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Configurações da conversão de imagens'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Informações gerais sobre como o serendipity deve lidar com imagens'); +@define('INSTALL_IMAGEMAGICK', 'Usar Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Você tem o \'image magick\' instalado e quer utilizá-lo para redimensionar imagens?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Caminho para o executável do conversor'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Caminho completo e nome do executável do image magick'); +@define('INSTALL_THUMBSUFFIX', 'Sufixo das miniaturas'); +@define('INSTALL_THUMBSUFFIX_DESC', 'As miniaturas serão nomeadas com o seguinte formato: original.[sufixo].ext'); +@define('INSTALL_THUMBWIDTH', 'Dimensão das miniaturas '); +@define('INSTALL_THUMBWIDTH_DESC', 'Largura máxima estática das miniaturas geradas automaticamente'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Detalhes pessoais'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Altere os seus detalhes pessoais'); +@define('USERCONF_USERNAME', 'Seu nome de usuário'); +@define('USERCONF_USERNAME_DESC', 'O nome de usuário que você usa para se identificar no blog'); +@define('USERCONF_PASSWORD', 'Sua senha'); +@define('USERCONF_PASSWORD_DESC', 'A senha que você quer usar para se identificar no blog'); +@define('USERCONF_EMAIL', 'Seu endereço de e-mail'); +@define('USERCONF_EMAIL_DESC', 'Seu endereço de e-mail pessoal'); +@define('USERCONF_SENDCOMMENTS', 'Enviar notificação dos comentários?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Quer receber e-mails quando comentários forem enviados para os seus artigos?'); +@define('USERCONF_SENDTRACKBACKS', 'Enviar notificação de trackbacks?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Quer receber e-mails quando trackbacks forem enviados para os seus artigos?'); +@define('USERCONF_ALLOWPUBLISH', 'Direitos: Publicação de artigos?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Este usuário está autorizado a publicar artigos?'); +@define('SUCCESS', 'Sucesso'); +@define('POWERED_BY_SHOW_TEXT', 'Exibir "Serendipity" como texto'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Exibirá o "Serendipity Weblog" como texto'); +@define('POWERED_BY_SHOW_IMAGE', 'Exibir "Serendipity" como um logotipo'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Exibe o logotipo do Serendipity'); + +@define('SETTINGS_SAVED_AT', 'As novas configurações foram salvas em %s'); +@define('PLUGIN_ITEM_DISPLAY', 'Onde o item deve ser exibido?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Apenas artigo extendido'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Página de visão geral apenas'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'Todas as vezes'); +@define('RSS_IMPORT_CATEGORY', 'Utilize essa categoria para artigos que não encontrem uma categoria no Serendipity'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'Ocorreu um erro desconhecido, o arquivo não foi transferido. Talvez o tamanho do arquivo seja maior que o permitido pelo seu servidor. Verifique com o seu servidor de internet, ou edite o php.ini para permitir transferência de arquivos de maior tamanho.'); +@define('COMMENTS_WILL_BE_MODERATED', 'Comentários enviados estarão sujeitos a moderação antes de serem exibidos.'); +@define('YOU_HAVE_THESE_OPTIONS', 'Você possui as seguintes opções disponíveis'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Atenção: Esse comentário precisa de aprovação antes que seja exibido'); +@define('DELETE_COMMENT', 'Excluir comentário'); +@define('APPROVE_COMMENT', 'Aprovar comentário'); +@define('REQUIRES_REVIEW', 'Requer revisão'); +@define('COMMENT_APPROVED', 'Comentário #%s foi aprovado corretamente'); +@define('COMMENT_DELETED', 'Comentário #%s foi excluído corretamente'); +@define('VIEW', 'Exibir'); +@define('COMMENT_ALREADY_APPROVED', 'Comentário #%s parece já ter sido aprovado'); +@define('COMMENT_EDITED', 'O comentário selecionado foi editado'); +@define('HIDE', 'Ocultar'); +@define('VIEW_EXTENDED_ENTRY', 'Continuar lendo "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Esse link não deve ser clicado. Ele contém a URI de trackback para este artigo. Você pode usar esse URI para enviar ping- & trackbacks do seu próprio weblog para esse artigo. Para copiar o link, clique com o botão direito e selecione "Copiar Atalho" no Internet Explorer ou "Copiar localização do link" no Mozilla.'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Atenção: Esse trackback precisa de aprovação antes que seja exibido'); +@define('DELETE_TRACKBACK', 'Excluir trackback'); +@define('APPROVE_TRACKBACK', 'Aprovar trackback'); +@define('TRACKBACK_APPROVED', 'O trackback #%s foi aprovado corretamente'); +@define('TRACKBACK_DELETED', 'O trackback #%s foi excluído corretamente'); +@define('COMMENTS_MODERATE', 'Comentários & trackbacks para este artigo requerem moderação'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Usar https para login'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Permitir o link de login aponte para uma link https. seu servidor web precisa ter suporte a isso!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Tornar clicáveis os links externos?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"não": Links externos não marcados (Maiores saídas, Maiores referências, Comentários de usuários) não são exibidos como puro texto para evitar spam do google (recomendado). "sim": Links externos não marcados são exibidos como links. Podem ser sobrescritos pela configuração da barra lateral!'); +@define('PAGE_BROWSE_COMMENTS', 'Página %s de %s, totlizando %s comentários'); +@define('FILTERS', 'Filtros'); +@define('FIND_ENTRIES', 'Encontrar artigos'); +@define('FIND_COMMENTS', 'Encontrar comentários'); +@define('FIND_MEDIA', 'Encontrar mídia'); +@define('FILTER_DIRECTORY', 'Diretório'); +@define('SORT_BY', 'Ordenar por'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Nenhum trackback enviado: Não foi possível abrir conexão para %s na porta %d'); +@define('MEDIA', 'Mídia'); +@define('MEDIA_LIBRARY', 'Biblioteca de mídia'); +@define('ADD_MEDIA', 'Adicionar mídia'); +@define('ENTER_MEDIA_URL', 'Entre com a URL de um arquivo para buscá-lo:'); +@define('ENTER_MEDIA_UPLOAD', 'Selecione o arquivo que deseja transferir:'); +@define('SAVE_FILE_AS', 'Salvar arquivo como:'); +@define('STORE_IN_DIRECTORY', 'Guardar no seguinte diretório: '); +@define('MEDIA_RENAME', 'Renomear esse arquivo'); +@define('IMAGE_RESIZE', 'Redimensionar essa imagem'); +@define('MEDIA_DELETE', 'Excluir esse arquivo'); +@define('FILES_PER_PAGE', 'Arquivos por página'); +@define('CLICK_FILE_TO_INSERT', 'Clique no arquivo que deseja inserir:'); +@define('SELECT_FILE', 'Selecione arquivo para inserir'); +@define('MEDIA_FULLSIZE', 'Tamanho total'); +@define('CALENDAR_BOW_DESC', 'Dia da semana que deve ser considerado o início da semana. Padrão é segunda-feira'); +@define('SUPERUSER', 'Administração do weblog'); +@define('ALLOWS_YOU_BLAHBLAH', 'Provê um link para a administração do weblog na barra lateral '); +@define('CALENDAR', 'Calendário'); +@define('SUPERUSER_OPEN_ADMIN', 'Abrir administração'); +@define('SUPERUSER_OPEN_LOGIN', 'Abrir tela de login'); +@define('INVERT_SELECTIONS', 'Inverter Seleção'); +@define('COMMENTS_DELETE_CONFIRM', 'Tem certeza de que deseja excluir os comentários selecionados?'); +@define('COMMENT_DELETE_CONFIRM', 'Tem certeza de que deseja excluir o comentário #%d, escrito por %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Excluir comentários selecionados'); +@define('VIEW_COMMENT', 'Exibir comentário'); +@define('VIEW_ENTRY', 'Exibir artigo'); +@define('DELETE_FILE', 'Excluir o campo entitulado %s'); +@define('ABOUT_TO_DELETE_FILE', 'Você está prestes a excluir %s
Se estiver utilizando esse arquivo em algum dos seus artigos, vai resultar em links ou imagens perdidas
Deseja realmente prosseguir com a exclusão?

'); +@define('TRACKBACK_SENDING', 'Enviando trackback para a URI %s...'); +@define('TRACKBACK_SENT', 'Trackback enviada com sucesso'); +@define('TRACKBACK_FAILED', 'Trackback falhou: %s'); +@define('TRACKBACK_NOT_FOUND', 'Nenhum URI de trackback foi encontrado.'); +@define('TRACKBACK_URI_MISMATCH', 'A URI de trackback descoberta não com é semelhante à URI alvo.'); +@define('TRACKBACK_CHECKING', 'Checando %s por possíveis trackbacks...'); +@define('TRACKBACK_NO_DATA', 'O alvo não contém dados'); +@define('TRACKBACK_SIZE', 'URI alvo excedeu o tamanho máximo de %s bytes para um arquivo.'); +@define('VIEWMODE_THREADED', 'Alternar para exibição por discussão'); +@define('COMMENTS_VIEWMODE_THREADED', 'Discussão'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Sequencial'); +@define('DISPLAY_COMMENTS_AS', 'Exibir comentários como'); +@define('DATE_FORMAT_SHORT', '%d/%m/%Y %H:%M'); +@define('NUMBER_FORMAT_DECIMALS', '2'); +@define('NUMBER_FORMAT_DECPOINT', ','); +@define('NUMBER_FORMAT_THOUSANDS', '.'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Categoria #%s excluída. Os artigos antigos foram movidos para a categoria #%s'); +@define('INSTALL_TOP_AS_LINKS', 'Exibir maiores saídas/referências como links?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"não": Saídas e Referências são exibidas como puro texto para prevenir spam do google. "sim": Saídas e Refrências são exibidas como links. "padrão": Usa o valor definido na configuração global (recomendado).'); +@define('ADD_MEDIA_BLAHBLAH', 'Adiciona um arquivo para o seu repositório de mídia:

Aqui você pode transferir arquivos de mídia, ou oriente-me para pegá-lo em algum lugar na web! Se não possuir uma imagem apropriada, procure no google alguma imagem que tenha relação com o assunto, os resultados são geralmente úteis e divertidos :)

Selecione o método:
'); +@define('COMMENTS_FILTER_SHOW', 'Show'); // Translate +@define('COMMENTS_FILTER_ALL', 'All'); // Translate +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Only approved'); // Translate +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Pending approval'); // Translate +@define('RSS_IMPORT_BODYONLY', 'Put all imported text in the "body" section and do not split up into "extended entry" section.'); // Translate +@define('SYNDICATION_PLUGIN_FULLFEED', 'Show full articles with extended body inside RSS feed'); // Translate +@define('MT_DATA_FILE', 'Movable Type data file'); // Translate +@define('FORCE', 'Force'); // Translate +@define('CREATE_AUTHOR', 'Create author \'%s\'.'); // Translate +@define('CREATE_CATEGORY', 'Create category \'%s\'.'); // Translate +@define('MYSQL_REQUIRED', 'You must have the MySQL extension in order to perform this action.'); // Translate +@define('COULDNT_CONNECT', 'Could not connect to MySQL database: %s.'); // Translate +@define('COULDNT_SELECT_DB', 'Could not select database: %s.'); // Translate +@define('COULDNT_SELECT_USER_INFO', 'Could not select user information: %s.'); // Translate +@define('COULDNT_SELECT_CATEGORY_INFO', 'Could not select category information: %s.'); // Translate +@define('COULDNT_SELECT_ENTRY_INFO', 'Could not select entry information: %s.'); // Translate +@define('COULDNT_SELECT_COMMENT_INFO', 'Could not select comment information: %s.'); // Translate +@define('WEEK', 'Week'); // Translate +@define('WEEKS', 'Weeks'); // Translate +@define('MONTHS', 'Months'); // Translate +@define('DAYS', 'Days'); // Translate +@define('ARCHIVE_FREQUENCY', 'Calendar item frequency'); // Translate +@define('ARCHIVE_FREQUENCY_DESC', 'The calendar interval to use between each item in the list'); // Translate +@define('ARCHIVE_COUNT', 'Number of items in the list'); // Translate +@define('ARCHIVE_COUNT_DESC', 'The total number of months, weeks or days to display'); // Translate +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Below is a list of installed plugins'); // Translate +@define('SIDEBAR_PLUGIN', 'sidebar plugin'); // Translate +@define('EVENT_PLUGIN', 'event plugin'); // Translate +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Click here to install a new %s'); // Translate +@define('VERSION', 'version'); // Translate +@define('INSTALL', 'Install'); // Translate +@define('ALREADY_INSTALLED', 'Already installed'); // Translate +@define('SELECT_A_PLUGIN_TO_ADD', 'Select the plugin which you wish to install'); // Translate +@define('INSTALL_OFFSET', 'Server time Offset'); // Translate +@define('STICKY_POSTINGS', 'Sticky Postings'); // Translate +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); // Translate +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); // Translate +@define('IMPORT_ENTRIES', 'Import data'); // Translate +@define('EXPORT_ENTRIES', 'Export entries'); // Translate +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); // Translate +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); // Translate +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); // Translate +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); // Translate +@define('IMPORT_NOW', 'Import now!'); // Translate +@define('IMPORT_STARTING', 'Starting import procedure...'); // Translate +@define('IMPORT_FAILED', 'Import failed'); // Translate +@define('IMPORT_DONE', 'Import successfully completed'); // Translate +@define('IMPORT_WEBLOG_APP', 'Weblog application'); // Translate +@define('EXPORT_FEED', 'Export full RSS feed'); // Translate +@define('STATUS', 'Status after import'); // Translate +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); // Translate +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); // Translate +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); // Translate +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); // Translate +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); // Translate +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); // Translate +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); // Translate +@define('INSTALL_SHOWFUTURE', 'Show future entries'); // Translate +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); // Translate +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); // Translate +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); // Translate +@define('NO_IMAGES_FOUND', 'No images found'); // Translate +@define('PERSONAL_SETTINGS', 'Personal Settings'); // Translate +@define('REFERER', 'Referer'); // Translate +@define('NOT_FOUND', 'Not found'); // Translate +@define('NOT_WRITABLE', 'Not writable'); // Translate +@define('WRITABLE', 'Writable'); // Translate +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); // Translate +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); // Translate +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); // Translate +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); // Translate +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); // Translate +@define('RED', 'red'); // Translate +@define('YELLOW', 'yellow'); // Translate +@define('GREEN', 'green'); // Translate +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); // Translate +@define('RECOMMENDED', 'Recommended'); // Translate +@define('ACTUAL', 'Actual'); // Translate +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); // Translate +@define('PHP_INSTALLATION', 'PHP installation'); // Translate +@define('THEY_DO', 'they do'); // Translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', 'Simple installation'); // Translate +@define('EXPERT_INSTALLATION', 'Expert installation'); // Translate +@define('COMPLETE_INSTALLATION', 'Complete installation'); // Translate +@define('WONT_INSTALL_DB_AGAIN', 'won\'t install the database again'); // Translate +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); // Translate +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); // Translate +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); // Translate +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); // Translate +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); // Translate +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); // Translate +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); // Translate +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); // Translate +@define('OPERATING_SYSTEM', 'Operating system'); // Translate +@define('WEBSERVER_SAPI', 'Webserver SAPI'); // Translate +@define('IMAGE_ROTATE_LEFT', 'Rotate image 90 degrees counter-clockwise'); // Translate +@define('IMAGE_ROTATE_RIGHT', 'Rotate image 90 degrees clockwise'); // Translate +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); // Translate +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); // Translate +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Apply markup transformations to the text (smilies, shortcut markups via *, /, _, ...). Disabling this will preserve any HTML-code in the text.'); // Translate +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_ru.inc.php b/lang/serendipity_lang_ru.inc.php new file mode 100644 index 0000000..af8f265 --- /dev/null +++ b/lang/serendipity_lang_ru.inc.php @@ -0,0 +1,671 @@ +Изменить размеры %s

'); +@define('ORIGINAL_SIZE', 'Оригинальный размер: %sx%s pixel'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

Здесь вы можете изменить размер изображения. Если вы хотите изменить размеры пропорционально, просто введите значение в одном из двух полей, и нажмите клавишу TAB - второе поле будет заполнено автоматически с учётом пропорций изображения.

'); +@define('QUICKJUMP_CALENDAR', 'Календарь'); +@define('QUICKSEARCH', 'Быстрый поиск'); +@define('SEARCH_FOR_ENTRY', 'Поиск по записям'); +@define('ARCHIVES', 'Архивы'); +@define('BROWSE_ARCHIVES', 'Просмотр архивов по месяцам'); +@define('TOP_REFERRER', 'Откуда пришли'); +@define('SHOWS_TOP_SITES', 'Показывает сайты, которые ссылались на ваш блог чаще всего'); +@define('TOP_EXITS', 'Куда ушли'); +@define('SHOWS_TOP_EXIT', 'Показывает сайты, куда читатели вашего блога уходили чаще всего'); +@define('SYNDICATION', 'Синхронизация'); +@define('SHOWS_RSS_BLAHBLAH', 'Показывает ссылки на RSS-ленты для аггрегации вашего блога'); +@define('ADVERTISES_BLAHBLAH', 'Рекламирует происхождение вашего блога (ссылка на сайт Serendipity)'); +@define('HTML_NUGGET', 'Фрагмент HTML'); +@define('HOLDS_A_BLAHBLAH', 'Добавляет фрагмент HTML кода в вашу боковую панель'); +@define('TITLE_FOR_NUGGET', 'Заголовок вашего фрагмента'); +@define('THE_NUGGET', 'Фрагмент HTML!'); +@define('SYNDICATE_THIS_BLOG', 'Новостные ленты'); +@define('YOU_CHOSE', 'Вы выбрали %s'); +@define('IMAGE_ROTATE_LEFT', 'Повернуть изображение на 90 градусов против часовой стрелки'); +@define('IMAGE_ROTATE_RIGHT', 'Повернуть изображение на 90 градусов по часовой стрелке'); +@define('IMAGE_SIZE', 'Размер изображения'); +@define('IMAGE_AS_A_LINK', 'Вставка изображения'); +@define('POWERED_BY', 'Сделано с помощью'); +@define('TRACKBACKS', 'Обратные ссылки'); +@define('TRACKBACK', 'Обратная ссылка'); +@define('NO_TRACKBACKS', 'Нет обратных ссылок'); +@define('TOPICS_OF', 'Заголовки'); +@define('VIEW_FULL', 'полный просмотр'); +@define('VIEW_TOPICS', 'посмотр заголовков'); +@define('AT', 'в'); +@define('SET_AS_TEMPLATE', 'Использовать этот стиль'); +@define('IN', 'в категории'); +@define('EXCERPT', 'Выборка'); +@define('TRACKED', 'Tracked'); +@define('LINK_TO_ENTRY', 'Ссылка на запись'); +@define('LINK_TO_REMOTE_ENTRY', 'Ссылка на удалённую (remote) запись'); +@define('IP_ADDRESS', 'IP-адрес'); +@define('USER', 'Пользователь'); +@define('THUMBNAIL_USING_OWN', '%s будет своим собственным тамбнэйлом, так как размеры изображения уже достаточно малы.'); +@define('THUMBNAIL_FAILED_COPY', 'Хотелось использовать %s как его собственный тамбнэйл, но не удалось скопировать файл!'); +@define('AUTHOR', 'Автор'); +@define('LAST_UPDATED', 'Последнее обновление'); +@define('TRACKBACK_SPECIFIC', 'URI этой записи для создания обратных ссылок (trackback)'); +@define('DIRECT_LINK', 'Прямая ссылка на эту запись'); +@define('COMMENT_ADDED', 'Ваш комментарий был успешно добавлен. '); +@define('COMMENT_ADDED_CLICK', 'Кликните %sздесь, чтобы вернуться%s к комментариям, и %sздесь, чтобы закрыть%s это окно.'); +@define('COMMENT_NOT_ADDED', 'Ваш комментарий не смог быть добавлен, потому что эту запись запрещено комментировать. '); +@define('COMMENT_NOT_ADDED_CLICK', 'Кликните %sздесь, чтобы вернуться%s к комментариям, и %sздесь, чтобы закрыть%s это окно.'); +@define('COMMENTS_DISABLE', 'Запретить добавление комментариев к этой записи'); +@define('COMMENTS_ENABLE', 'Разрешить добавление комментариев к этой записи'); +@define('COMMENTS_CLOSED', 'Автор не разрешил комментировать эту запись'); +@define('EMPTY_COMMENT', 'Ваш комментарий ничего не содержал? Пожалуйста %sвернитесь%s и попытайтесь снова'); +@define('ENTRIES_FOR', 'Записи для %s'); +@define('DOCUMENT_NOT_FOUND', 'Документ %s не найден.'); +@define('USERNAME', 'Имя пользователя'); +@define('PASSWORD', 'Пароль'); +@define('AUTOMATIC_LOGIN', 'Запомнить эту информацию'); +@define('SERENDIPITY_INSTALLATION', 'Установка Serendipity'); +@define('LEFT', 'слева'); +@define('RIGHT', 'справа'); +@define('HIDDEN', 'спрятан'); +@define('REMOVE_TICKED_PLUGINS', 'Убрать выделенные плагины'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Сохранить изменения'); +@define('COMMENTS_FROM', 'Комментарии от'); +@define('ERROR', 'Ошибка'); +@define('ENTRY_SAVED', 'Ваша запись была сохранена'); +@define('DELETE_SURE', 'Вы уверены, что хотите удалить полностью #%s?'); +@define('NOT_REALLY', 'Не уверен...'); +@define('DUMP_IT', 'Уверен!'); +@define('RIP_ENTRY', 'Запись #%s удалена'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Категория #%s удалена. Старые записи перемещены в категорию #%s'); +@define('CATEGORY_DELETED', 'Категория #%s удалена.'); +@define('CATEGORY_REMAINING', 'Удалить эту категорию и переместить её записи в следующую категорию: %s'); +@define('INVALID_CATEGORY', 'Не было указано категории для удаления'); +@define('CATEGORY_SAVED', 'Данные о категории сохранены'); +@define('SELECT_TEMPLATE', 'Выберите стиль, который вы хотите использовать для вашего блога'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'Записи не были добавлены!'); +@define('MT_DATA_FILE', 'Файл данных Movable Type'); +@define('FORCE', 'Принудить'); +@define('CREATE_AUTHOR', 'Создать автора \'%s\'.'); +@define('CREATE_CATEGORY', 'Создать категорию \'%s\'.'); +@define('MYSQL_REQUIRED', 'Вы должны иметь поддержку MySQL чтобы выполнить это действие.'); +@define('COULDNT_CONNECT', 'Не удалось подключиться к базе данных MySQL : %s.'); +@define('COULDNT_SELECT_DB', 'Не удалось выбрать базу данных: %s.'); +@define('COULDNT_SELECT_USER_INFO', 'Не удалось выбрать информацию о пользователе: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', 'Не удалось выбрать информацию о категории: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', 'Не удалось выбрать информацию о записи: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', 'Не удалось выбрать информацию о комментарии: %s.'); +@define('YES', 'Да'); +@define('NO', 'Нет'); +@define('USE_DEFAULT', 'По умолчанию'); +@define('CHECK_N_SAVE', 'Проверить & сохранить'); +@define('DIRECTORY_WRITE_ERROR', 'Не могу записать в каталог %s. Проверьте права доступа к каталогу.'); +@define('DIRECTORY_CREATE_ERROR', 'Каталог %s не существует и не может быть создан. Пожалуйста, создайте его вручную.'); +@define('DIRECTORY_RUN_CMD', ' -> run %s %s'); +@define('CANT_EXECUTE_BINARY', 'Невозможно запустить файл %s'); +@define('FILE_WRITE_ERROR', 'Невозможна запись в файл %s.'); +@define('FILE_CREATE_YOURSELF', 'Пожалуйста создайте файл вручную или проверьте права доступа'); +@define('COPY_CODE_BELOW', '
* Просто скопируйте код ниже и поместите его в %s в вашей папке %s:
%s
' . "\n"); +@define('WWW_USER', 'Изменить www на имя пользователя, под которым запущен apache (например, nobody).'); +@define('BROWSER_RELOAD', 'После того, как вы это сделаете, нажмите кнопку "reload" вашего браузера.'); +@define('DIAGNOSTIC_ERROR', 'Мы обнаружили несколько ошибок, пока проверяли введённую вами информацию:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity ещё не установлен. Пожалуйста проведите установку прямо сейчас.'); +@define('INCLUDE_ERROR', 'Ошибка serendipity: невозможно включить файл %s - прекращение работы.'); +@define('DATABASE_ERROR', 'Ошибка serendipity: невозможно подключиться к базе данных - прекращение работы.'); +@define('CREATE_DATABASE', 'Создание настроек базы данных по умолчанию...'); +@define('ATTEMPT_WRITE_FILE', 'Попытка записать файл %s...'); +@define('WRITTEN_N_SAVED', 'Конфигурация записана & сохранена'); +@define('IMAGE_ALIGNMENT', 'Выравнивание изображения'); +@define('ENTER_NEW_NAME', 'Введите новое имя для: '); +@define('RESIZING', 'Изменение размеров'); +@define('RESIZE_DONE', 'Готово! (Изменено изображений: %s).'); +@define('SYNCING', 'Синхронизация базы данных с каталогом изображений'); +@define('SYNC_DONE', 'Готово! (Синхронизировано изображений: %s).'); +@define('FILE_NOT_FOUND', 'Невозможно найти файл %s, может быть он уже был удалён?'); +@define('ABORT_NOW', 'Отмена'); +@define('REMOTE_FILE_NOT_FOUND', 'Файл не был найден на удалённом сервере. Вы уверены, что эта ссылка верна? URL: %s'); +@define('FILE_FETCHED', '%s скачан и сохранён как %s'); +@define('FILE_UPLOADED', 'Файл %s успешно загружен на сервер как %s'); +@define('WORD_OR', 'Или'); +@define('SCALING_IMAGE', 'Изменение размеров %s на %s x %s точек'); +@define('KEEP_PROPORTIONS', 'Сохранить пропорции'); +@define('REALLY_SCALE_IMAGE', 'Вы уверены, что хотите изменить размеры изображения? Эта операция необратима!'); +@define('TOGGLE_ALL', 'Раскрыть все разделы'); +@define('TOGGLE_OPTION', 'Перключить опцию'); +@define('SUBSCRIBE_TO_THIS_ENTRY', 'Подписаться на эту запись'); +@define('UNSUBSCRIBE_OK', "%s теперь отписан от этой записи"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'Новый комментарий к записи, на которую вы подписаны - "%s"'); +@define('SUBSCRIPTION_MAIL', "Добрый день %s,\n\nНовый комментарий был добавлен к записи, за которой вы следите на \"%s\", запись под названием \"%s\"\nИмя автора: %s\n\nВы можете найти запись здесь: %s\n\nВы можете отписаться от записи, проследовав по этой ссылке: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "Добрый день %s,\n\nНовая обратная ссылка была добавлена к записи, за который вы следите на \"%s\", запись под названием \"%s\"\nИмя автора: %s\n\nВы можете найти запись здесь: %s\n\nВы можете отписаться от записи, проследовав по этой ссылке: %s\n"); +@define('SIGNATURE', "\n-- \n%s работает на движке Serendipity.\nЛучший блог, какой можно найти, и вы тоже можете им воспользоваться.\nЗагляните на чтобы узнать больше."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 - комментарии'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Поле "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Поле "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'Изображение для RSS-ленты'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'Ширина изображения'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'Высота изображения'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'E-Mail адрес веб-мастера, если таковой есть. (пустое поле будет скрыто) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', 'E-Mail адрес главного редактора, если таковой есть. (пустое поле будет скрыто) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'URL изображения в формате GIF/JPEG/PNG, если можно. (пустое поле означает serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'в пикселях, макс. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'в пикселях, макс. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Поле "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', 'Количество минут после которых ваш блог не должен оставаться в кэше внешних сайтов или приложений (пустое поле будет скрыто) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Поле "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Должно ли поле "pubDate" быть встроено в RSS-канал, чтобы показать дату последней записи?'); +@define('CONTENT', 'Содержимое'); +@define('TYPE', 'Тип'); +@define('DRAFT', 'Черновик'); +@define('PUBLISH', 'Опубликовать'); +@define('PREVIEW', 'Предварительный просмотр'); +@define('DATE', 'Дата'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); +@define('DATE_INVALID', 'Внимание: Дата, указанная вами, неверна. Она должна быть указана в формате YYYY-MM-DD HH:MM.'); +@define('CATEGORY_PLUGIN_DESC', 'Показывает список категорий.'); +@define('ALL_AUTHORS', 'Все авторы'); +@define('CATEGORIES_TO_FETCH', 'Категории для получения'); +@define('CATEGORIES_TO_FETCH_DESC', 'Получить категории какого автора?'); +@define('PAGE_BROWSE_ENTRIES', 'Страница %s из %s, всего записей: %s'); +@define('PREVIOUS_PAGE', 'предыдущая страница'); +@define('NEXT_PAGE', 'следующая страница'); +@define('ALL_CATEGORIES', 'Все категории'); +@define('DO_MARKUP', 'Произвести трансформации разметок'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'Формат даты'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'Формат даты записи, с использованием переменных PHP-функции strftime(). (По умолчанию: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'Невозможно открыть файл шаблона, пожалуйста обновите serendipity!'); +@define('ADVANCED_OPTIONS', 'Дополнительные опции'); +@define('EDIT_ENTRY', 'Редактировать запись'); +@define('HTACCESS_ERROR', 'Чтобы проверить настройки вашего веб-сервера, serendipity необходимо иметь права записи в файл ".htaccess". Эта операция не удалась из-за недостаточных прав доступа к файлу. Пожалуйста, измените эти права командой типа:
  %s
и перегрузите эту страницу.'); +@define('SIDEBAR_PLUGINS', 'Плагины боковых панелей'); +@define('EVENT_PLUGINS', 'Event-плагины'); +@define('SORT_ORDER', 'Порядок сортировки'); +@define('SORT_ORDER_NAME', 'По имени файла'); +@define('SORT_ORDER_EXTENSION', 'По расширению файла'); +@define('SORT_ORDER_SIZE', 'По размеру файла'); +@define('SORT_ORDER_WIDTH', 'По ширине изображения'); +@define('SORT_ORDER_HEIGHT', 'По высоте изображения'); +@define('SORT_ORDER_DATE', 'По дате загрузки'); +@define('SORT_ORDER_ASC', 'По возрастанию'); +@define('SORT_ORDER_DESC', 'По убыванию'); +@define('THUMBNAIL_SHORT', 'Тамбнэйл'); +@define('ORIGINAL_SHORT', 'Оригинал'); +@define('APPLY_MARKUP_TO', 'Apply markup to %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Начало недели'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity обнаружил, что ваша конфигурация установлена для версии %s, в то время как сами файлы движка serendipity соответствуют версии %s, вам нужен апгрейд! Нажмите здесь чтобы продолжить'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'Привет, и добро пожаловать в агента обновления Serendipity.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', 'Я был создан чтобы помочь вам обновить ваш веблог Serendipity %s.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Вы видите это сообщение потому что вы только что установили Serendipity %s, но не обновили вашу базу данных чтобы соответствовать этой версии'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', 'Обновления базы данных (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'Я нашёл следующие .sql файлы, которые должны быть выполнены перед тем, как вы сможете продолжить работу с Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'Специфичные для этой версии действия'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'Не было найдено действий, специфичных для этой версии'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'Вы хотите, чтобы я произвёл эти действия прямо сейчас?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'Нет, я произведу их самостоятельно и вручную'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Да, пожалуйста'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Похоже на то, что вам не нужно производить никаких обновлений'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', 'Считайте ваш движок Serendipity обновлённым'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'Вы проигнорировали этап автоматического обновления Serendipity, пожалуйста проследите чтбы ваша база данных была корректно обновлена и указанные действия произведены вручную'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'Ваш движок Serendipity теперь обновлён до версии %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Вы можете вернуться к вашему блогу кликнув %sздесь%s'); +@define('MANAGE_USERS', 'Работа с пользователями'); +@define('CREATE_NEW_USER', 'Создать нового пользователя'); +@define('CREATE_NOT_AUTHORIZED', 'Вы не можете редактировать пользователей того же уровня доступа, что и ваш собственный'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Вы не можете создать пользователей с уровнем доступа выше вашего собственного'); +@define('CREATED_USER', 'Новый пользователь %s был успешно создан'); +@define('MODIFIED_USER', 'Свойства пользователя %s были изменены'); +@define('USER_LEVEL', 'Userlevel'); +@define('DELETE_USER', 'Вы собираетесь удалить пользователя #%d %s. Вы уверены? Эта операция запретит отображение любых добавленных им записей.'); +@define('DELETED_USER', 'Пользователь #%d %s удалён.'); +@define('LIMIT_TO_NUMBER', 'Сколько заметок должно быть показано?'); +@define('ENTRIES_PER_PAGE', 'записей на странице'); +@define('XML_IMAGE_TO_DISPLAY', 'Кпонка XML'); +@define('XML_IMAGE_TO_DISPLAY_DESC', 'Ссылки на XML фиды будут отмечены этим изображением. Оставьте поле пустым для картинки по умолчанию, или введите \'none\' чтобы не показывать кнопки вообще.'); + +@define('DIRECTORIES_AVAILABLE', 'В списке доступных каталогов вы можете кликнуть на любой каталог, чтобы создать в нём новый подкаталог.'); +@define('ALL_DIRECTORIES', 'все каталоги'); +@define('MANAGE_DIRECTORIES', 'Работа с каталогами'); +@define('DIRECTORY_CREATED', 'Каталог %s был успешно создан.'); +@define('PARENT_DIRECTORY', 'Главный каталог'); +@define('CONFIRM_DELETE_DIRECTORY', 'Вы уверены, что хотите удалить все содержимое каталога %s?'); +@define('ERROR_NO_DIRECTORY', 'Ошибка: Каталог %s не существует'); +@define('CHECKING_DIRECTORY', 'Проверка файлов в каталоге %s'); +@define('DELETING_FILE', 'Удаление файла %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', 'Не удалось удалить не пустой каталог. Поставьте галочку "Принудительное удаление", если вы хотиле удалить все файлы из этого каталога, и попробуйте удалить каталог снова. В каталоге найдены файлы:'); +@define('DIRECTORY_DELETE_FAILED', 'Не удалось удалить каталог %s. Проверьте права доступа или сообщения об ошибках выше.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Каталог %s успешно удалён.'); +@define('SKIPPING_FILE_EXTENSION', 'Пропускаем файл: Нет расшерения у файла %s.'); +@define('SKIPPING_FILE_UNREADABLE', 'Пропускаем файл: %s - не читается.'); +@define('FOUND_FILE', 'Найден новый/изменённый файл: %s.'); +@define('ALREADY_SUBCATEGORY', '%s уже является подкатегорией %s.'); +@define('PARENT_CATEGORY', 'Главная категория'); +@define('IN_REPLY_TO', 'В ответ на'); +@define('TOP_LEVEL', 'Верхний уровень'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', 'лента %s'); +@define('PERMISSIONS', 'Права доступа'); +@define('SETTINGS_SAVED_AT', 'Новые настройки были сохранены в %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', 'Настройки базы данных'); +@define('INSTALL_CAT_DB_DESC', 'Здесь вы можете ввести всю информацию о вашей базе данных. Serendipity необходимы эти настройки чтобы нормально функционировать'); +@define('INSTALL_DBTYPE', 'Тип базы данных'); +@define('INSTALL_DBTYPE_DESC', 'Тип вашей базы данных'); +@define('INSTALL_DBHOST', 'Хост базы данных'); +@define('INSTALL_DBHOST_DESC', 'Имя сервера с вашей базой данных'); +@define('INSTALL_DBUSER', 'Пользователь базы данных'); +@define('INSTALL_DBUSER_DESC', 'Имя пользователя, используемое чтобы подключиться к вашей базе данных'); +@define('INSTALL_DBPASS', 'Пароль базы данных'); +@define('INSTALL_DBPASS_DESC', 'Пароль для указанного выше имени пользователя'); +@define('INSTALL_DBNAME', 'Имя базы данных'); +@define('INSTALL_DBNAME_DESC', 'Название вашей базы данных'); +@define('INSTALL_DBPREFIX', 'Префикс таблиц'); +@define('INSTALL_DBPREFIX_DESC', 'Префикс таблиц в вашей базе даынных, например serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', 'Пути'); +@define('INSTALL_CAT_PATHS_DESC', 'Различные пути к необходимым каталогам и файлам. Не забывайте слэши в конце путей к каталогам!'); +@define('INSTALL_FULLPATH', 'Полный путь'); +@define('INSTALL_FULLPATH_DESC', 'Полный и абсолютный путь к каталогу serendipity'); +@define('INSTALL_UPLOADPATH', 'Путь для аплоадов'); +@define('INSTALL_UPLOADPATH_DESC', 'Все загруженные на сервер файлы будут помещены в этто каталог, обычно он указывается относительно полного пути - чаще всего, \'uploads/\''); +@define('INSTALL_RELPATH', 'Относительный путь'); +@define('INSTALL_RELPATH_DESC', 'Путь к serendipity для вашего браузера, обычно \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Относительный путь к шаблонам'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Пусть к каталогу с шаблонами - с учётом \'относительному пути\''); +@define('INSTALL_RELUPLOADPATH', 'Относительный путь аплоадов'); +@define('INSTALL_RELUPLOADPATH_DESC', 'Путь к вашим загрузка для браузеров - с учётом \'относительного пути\''); +@define('INSTALL_URL', 'URL вашего блога'); +@define('INSTALL_URL_DESC', 'Основной URL вашего блога'); +@define('INSTALL_INDEXFILE', 'Индекс-файл'); +@define('INSTALL_INDEXFILE_DESC', 'Имя индекс-файла вашего блога'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Общие настройки'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Влияют на поведение вашего блога Serendipity'); +@define('INSTALL_USERNAME', 'Имя администратора'); +@define('INSTALL_USERNAME_DESC', 'Имя пользовтеля для администратора блога'); +@define('INSTALL_PASSWORD', 'Пароль администратора'); +@define('INSTALL_PASSWORD_DESC', 'Пароль для указанного выше имени администратора'); +@define('INSTALL_EMAIL', 'Email администратора'); +@define('INSTALL_EMAIL_DESC', 'Email для администратора блога'); +@define('INSTALL_SENDMAIL', 'Посылать почту администратору'); +@define('INSTALL_SENDMAIL_DESC', 'Хотите ли вы получать письма когда к вашим заметкам добавляются комментарии?'); +@define('INSTALL_SUBSCRIBE', 'Позволять пользователям подписываться на ваши записи?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Могут ли пользователи подписываться на записи и таким образом получать уведомления по почте когда к этим записям добавляются комментарии'); +@define('INSTALL_BLOGNAME', 'Имя блога'); +@define('INSTALL_BLOGNAME_DESC', 'Название вашего блога'); +@define('INSTALL_BLOGDESC', 'Описание блога'); +@define('INSTALL_BLOGDESC_DESC', 'Краткое (в одну строку) описание вашего блога'); +@define('INSTALL_LANG', 'Язык'); +@define('INSTALL_LANG_DESC', 'Выберите язык интерфейса для вашего блога'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Внешний вид и опции'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Изменить настройки интерфейса Serendipity'); +@define('INSTALL_WYSIWYG', 'Использовать WYSIWYG-редактор'); +@define('INSTALL_WYSIWYG_DESC', 'Желаете ли вы использовать WYSIWYG-редактор? (Работает в IE5+, частично в Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Следить за соответствием XHTML 1.1'); +@define('INSTALL_XHTML11_DESC', 'Вы хотите включить принудительное соответствие стандарту XHTML 1.1? (может вызвать проблемы на старых браузерах 4го поколения)'); +@define('INSTALL_POPUP', 'Разрешить использование выскакивающих окон'); +@define('INSTALL_POPUP_DESC', 'Хотите ли вы использовать выскакивающие окна для комментариев, обратных ссылок, и т.д.?'); +@define('INSTALL_EMBED', 'Встроен ли ваш serendipity?'); +@define('INSTALL_EMBED_DESC', 'Если вы хотите встроить ваш блог serendipity в обычную страницу, установите этот параметр в true чтобы не выводить никаких заголовков, и лишь печатать содержимое блога. Вы можете использовать опцию индексного файла (indexFile) чтобы использовать другую страницу как главную и содержащую заголовки. Пожалуйста, прочитайте файл README чтобы узнать больше!'); +@define('INSTALL_TOP_AS_LINKS', 'Показывать адреса как ссылки?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"нет": Все адреса веб-сайтов показаны как обычный текст чтобы избежать google спама. "да": Все адреса веб-сайтов показаны как гипер-ссылки. "По умолчанию": Использовать настройки глобальной конфигурации (рекомендуется).'); +@define('INSTALL_BLOCKREF', 'Блокированные сайты'); +@define('INSTALL_BLOCKREF_DESC', 'Есть ли какие-то сайты, которые вы не хотите отображать в списке тех, откуда к вам пришли? Разделяйте элементы списка знаком \';\' и имейте в виду, что сайты блокируются по совпадению строк!'); +@define('INSTALL_REWRITE', 'Генерация URLов'); +@define('INSTALL_REWRITE_DESC', 'Выберите, какими правилами вы хотите пользоваться при генерации URLов. Включение этой опции позволит вам иметь красивые ссылки на вашем блоге и также сделает ваш блог более доступным для индексации поисковыми машинами вроде google. Ваш веб-сервер должен либо поддерживать mod_rewrite, либо содержать "AllowOverride All" для вашего каталога serendipity dir. Значение по умолчанию определяется автоматически'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'Настройки конвертации изображений'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'Общие настройки о том, как Serendipity должен работать с изображениями'); +@define('INSTALL_IMAGEMAGICK', 'Использование Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Если у вас есть установленный пакет image magick, хотите ли вы его использовать для изменения размеров изображений?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Путь к файлу convert'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'Полный путь и имя утилиты convert из пакета image magick'); +@define('INSTALL_THUMBSUFFIX', 'Суффикс тамбнэйлов'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Тамбнэйлы будут создаваться в соответствии с форматом: original.[suffix].ext'); +@define('INSTALL_THUMBWIDTH', 'Размеры тамбнэйлов'); +@define('INSTALL_THUMBWIDTH_DESC', 'Максимальная ширина автоматически создаваемых тамбнэйлов'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', 'Личные настройки'); +@define('USERCONF_CAT_PERSONAL_DESC', 'Изменение ваших личных настроек'); +@define('USERCONF_USERNAME', 'Имя пользователя'); +@define('USERCONF_USERNAME_DESC', 'Имя пользователя, которое вы используете чтобы заходить на блог'); +@define('USERCONF_PASSWORD', 'Ваш пароль'); +@define('USERCONF_PASSWORD_DESC', 'Пароль, который вы хотите использовать при авторизации'); +@define('USERCONF_EMAIL', 'Ваш адрес e-mail'); +@define('USERCONF_EMAIL_DESC', 'Адрес вашей электронной почты'); +@define('USERCONF_SENDCOMMENTS', 'Посылать уведомления о комментария?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'Желаете ли вы получать уведомления, когда к вашим записям добавляются новые комментарии?'); +@define('USERCONF_SENDTRACKBACKS', 'Посылать уведомления об обратных ссылках?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'Желаете ли вы получать уведомления об обратных ссылках на ваши записи?'); +@define('USERCONF_ALLOWPUBLISH', 'Права доступа: Добавление записей?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'Разрешено ли этому пользователю публиковать записи?'); +@define('SUCCESS', 'Успешно!'); +@define('POWERED_BY_SHOW_TEXT', 'Показывать "Serendipity" как текст'); +@define('POWERED_BY_SHOW_TEXT_DESC', 'Покажет слова "Веблог Serendipity" как текст'); +@define('POWERED_BY_SHOW_IMAGE', 'Показывать "Serendipity" и лого'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Показывает логотип Serendipity и ссылку'); +@define('PLUGIN_ITEM_DISPLAY', 'Где должен быть показан этот объект?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Только в расширенном тексте записи'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Только на странице обзора'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'В обоих случаях'); +@define('RSS_IMPORT_CATEGORY', 'Использовать эту категорию для импортированных записей с несуществующими в вашей базе категориями'); + +@define('COMMENTS_WILL_BE_MODERATED', 'Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.'); +@define('YOU_HAVE_THESE_OPTIONS', 'У вас есть следующие варианты:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'Внимание: этот комментарий нуждается в подтверждении автором записи, прежде чем он может быть показан'); +@define('DELETE_COMMENT', 'Удалить комментарий'); +@define('APPROVE_COMMENT', 'Подтвердить комментарий'); +@define('REQUIRES_REVIEW', 'Требует обзора (review)'); +@define('COMMENT_APPROVED', 'Комментарий #%s был успешно подтверждён'); +@define('COMMENT_DELETED', 'Комментарий #%s был успешно удалён'); +@define('COMMENTS_MODERATE', 'Комментарии и обратные ссылки к этой записи требуют модерации'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'Внимание: эта обратная ссылка нуждается в подтверждении, прежде чем она сможет быть показана'); +@define('DELETE_TRACKBACK', 'Удалить обратную ссылку'); +@define('APPROVE_TRACKBACK', 'Подвердить обратную ссылку'); +@define('TRACKBACK_APPROVED', 'Обратная ссылка #%s была успешно подтверждена'); +@define('TRACKBACK_DELETED', 'Обратная ссылка #%s была успешно удалена'); +@define('VIEW', 'Просмотреть'); +@define('COMMENT_ALREADY_APPROVED', 'Похоже, что комментарий #%s уже был подтверждён автором записи'); +@define('COMMENT_EDITED', 'Выбранный комментарий был отредактирован'); +@define('HIDE', 'Спрятать'); +@define('VIEW_EXTENDED_ENTRY', 'Продолжить чтение "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Эта ссылка не предназначена для того, чтобы её кликали. Она содержит специальный URI для обратных ссылок. Вы можете использовать этот URI для проверки и создания обратных ссылок на эту запись. Чтобы скопировать ссылку, нажмите на ней правую кнопку мышки и выберите "Copy Shortcut" в Internet Explorer или "Copy Link Location" в Mozilla.'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Использовать https для входа в систему'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Позволяет ссылке на страницу входа в систему указывать на https-ресурс. Ваш веб-сервер должен поддерживать https чтобы эта опция могла работать!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Показывать внешние сайты как гиперссылки?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"no": Внешние сайты (Куда Ушли, Откуда Пришли, комментарии пользователей) не показываются, или показываются как обычный текст, где это возможно, чтобы предотвратить google-спам (рекомендуется). "yes": Внешние сайты показаны как гиперссылки. Эта опция может быть отменена конфигурацией плагина для боковых панелей!'); +@define('PAGE_BROWSE_COMMENTS', 'Страница %s из %s, всего комментариев: %s'); +@define('FILTERS', 'Фильтры'); +@define('FIND_ENTRIES', 'Найти записи'); +@define('FIND_COMMENTS', 'Найти комментарии'); +@define('FIND_MEDIA', 'Найти файлы'); +@define('FILTER_DIRECTORY', 'Каталог'); +@define('SORT_BY', 'Упорядочить по'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'Не была послана обратная ссылка: невозможно создать соединение к %s через порт %d'); +@define('MEDIA', 'Медиа-файлы'); +@define('MEDIA_LIBRARY', 'Библиотека файлов'); +@define('ADD_MEDIA', 'Добавить медиа-файл'); +@define('ENTER_MEDIA_URL', 'Введите URL файла,
который нужно скачать:'); +@define('ENTER_MEDIA_UPLOAD', 'Выберите файл, который
вы хотите загрузить на сервер:'); +@define('SAVE_FILE_AS', 'Сохранить этот файл как:'); +@define('STORE_IN_DIRECTORY', 'Сохранить в следующем каталоге: '); +@define('ADD_MEDIA_BLAHBLAH', 'Добавление файла в вашу медиа-коллекцию:

Здесь вы можете загрузить на сервер ваши медиа-файлы, или указать, откуда их можно скачать в сети! Если у вас нет подходящих изображений, поищите с помощью google, что-нибудь да найдётся,очень часто результаты полезны и забавны :)

Выберите способ:
'); +@define('MEDIA_RENAME', 'Переименовать этот файл'); +@define('IMAGE_RESIZE', 'Изменить размер этого изображения'); +@define('MEDIA_DELETE', 'Удалить этот файл'); +@define('FILES_PER_PAGE', 'Файлов на странице'); +@define('CLICK_FILE_TO_INSERT', 'Кликните на файл, который вы хотите вставить:'); +@define('SELECT_FILE', 'Выберите файл для вставки'); +@define('MEDIA_FULLSIZE', 'Полный размер'); +@define('CALENDAR_BOW_DESC', 'День недели, который должен считаться началом недели. По умолчанию это понедельник.'); +@define('SUPERUSER', 'Администрирование'); +@define('ALLOWS_YOU_BLAHBLAH', 'Ссылка в вашей боковой панели на главную страницу администрирования вашего блога'); +@define('CALENDAR', 'Календарь'); +@define('SUPERUSER_OPEN_ADMIN', 'Перейти к администрированию'); +@define('SUPERUSER_OPEN_LOGIN', 'Войти в систему'); +@define('INVERT_SELECTIONS', 'Инвертировать отмеченное'); +@define('COMMENTS_DELETE_CONFIRM', 'Вы уверены, что хотите удалить отмеченные комментарии?'); +@define('COMMENT_DELETE_CONFIRM', 'Вы уверены, что хотите удалить комментарий #%d, созданный %s?'); +@define('DELETE_SELECTED_COMMENTS', 'Удалить отмеченные комментарии'); +@define('VIEW_COMMENT', 'Просмотреть комментарий'); +@define('VIEW_ENTRY', 'Просмотреть запись'); +@define('DELETE_FILE_FAIL', 'Не удалось удалить файл %s'); +@define('DELETE_THUMBNAIL', 'Удалён файл с тамбнэйлом %s'); +@define('DELETE_FILE', 'Удалён файл %s'); +@define('ABOUT_TO_DELETE_FILE', 'Вы собираетесь удалить %s
Если вы используете этот файл в каких-то ваших записях, это действие сделает ссылки или изображения в них недоступными.
Вы уверены, что хотите продолжить?

'); +@define('TRACKBACK_SENDING', 'Отправка обратной ссылки на URI %s...'); +@define('TRACKBACK_SENT', 'Отправка обратной ссылки прошла успешно'); +@define('TRACKBACK_FAILED', 'Отправка обратной ссылки не удалась: %s'); +@define('TRACKBACK_NOT_FOUND', 'Не было найдено URI для обратной ссылки.'); +@define('TRACKBACK_URI_MISMATCH', 'Автоматически найденный URI обратной ссылки не совпадает с URI, на который вы ссылаетесь.'); +@define('TRACKBACK_CHECKING', 'Проверка %s на возможные обратные ссылки...'); +@define('TRACKBACK_NO_DATA', 'Указанная страница не содержит данных'); +@define('TRACKBACK_SIZE', 'Указанный URI превзошёл максимальный размер файла %s байт.'); +@define('COMMENTS_VIEWMODE_THREADED', 'Древовидной структурой'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Как список'); +@define('DISPLAY_COMMENTS_AS', 'Показывать комментарии'); +@define('COMMENTS_FILTER_SHOW', 'Показывать'); +@define('COMMENTS_FILTER_ALL', 'Все'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Только подтверждённые'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Ожидающие подтверждения'); +@define('RSS_IMPORT_BODYONLY', 'Поместить весь импортированный текст в раздел "текст записи" и не создавать раздел "дополнительный текст записи".'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'Показывать полные записи с дополнительным текстом записи в RSS-лентах'); +@define('WEEK', 'Неделя'); +@define('WEEKS', 'Недели'); +@define('MONTHS', 'Месяцы'); +@define('DAYS', 'Дни'); +@define('ARCHIVE_FREQUENCY', 'Частота разделов архива'); +@define('ARCHIVE_FREQUENCY_DESC', 'Календарный интервал для создания списка архивных разделов'); +@define('ARCHIVE_COUNT', 'Количество архивных разделов в списке'); +@define('ARCHIVE_COUNT_DESC', 'Количество месяцев, недель или дней, архивы которых отображать'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'Ниже приведён список установленных плагинов'); +@define('SIDEBAR_PLUGIN', 'плагин боковых панелей'); +@define('EVENT_PLUGIN', 'event-плагин'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'Нажмите здесь чтобы установить новый %s'); +@define('VERSION', 'версия'); +@define('INSTALL', 'Установить'); +@define('ALREADY_INSTALLED', 'Уже установлен'); +@define('SELECT_A_PLUGIN_TO_ADD', 'Выберите плагин для добавления'); +@define('INSTALL_OFFSET', 'Смещение времени на сервере'); +@define('STICKY_POSTINGS', 'Закреплённые записи'); +@define('INSTALL_FETCHLIMIT', 'Записи, которые всегда следует отображать на главной странице'); +@define('INSTALL_FETCHLIMIT_DESC', 'Количество записей для показа на каждой странице frontend\'а'); +@define('IMPORT_ENTRIES', 'Импортировать записи'); +@define('EXPORT_ENTRIES', 'Экспортировать записи'); +@define('IMPORT_WELCOME', 'Добро пожаловать в утилиту импорта данных Serendipity'); +@define('IMPORT_WHAT_CAN', 'Здесь вы сможете импортировать в вашу базу данных записи из других блогов и приложений'); +@define('IMPORT_SELECT', 'Пожалуйста выберите программное обеспечение, из которого вы хотели бы импортировать данные'); +@define('IMPORT_PLEASE_ENTER', 'Пожалуйста введите запрашиваемые ниже данные'); +@define('IMPORT_NOW', 'Начать импорт!'); +@define('IMPORT_STARTING', 'Запуск процедуры импортирования...'); +@define('IMPORT_FAILED', 'Импорт данных не удался'); +@define('IMPORT_DONE', 'Импорт данных успешно завершён'); +@define('IMPORT_WEBLOG_APP', 'Приложение'); +@define('EXPORT_FEED', 'Экспортировать полную RSS-ленту'); +@define('STATUS', 'Статус после импорта'); +@define('IMPORT_GENERIC_RSS', 'Обычный импорт RSS'); +@define('ACTIVATE_AUTODISCOVERY', 'Посылать обратные ссылки на гиперссылки, найденные в записи'); +@define('WELCOME_TO_ADMIN', 'Добро пожаловать в раздел администрирования Serendipity.'); +@define('PLEASE_ENTER_CREDENTIALS', 'Пожалуйста введите ваши имя пользователя и пароль.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Сделано с помощью Serendipity %s и PHP %s'); +@define('INSTALL_USEGZIP', 'Использовать страницы, сжатые с помощью gzip'); +@define('INSTALL_USEGZIP_DESC', 'Чтобы ускорить доставку страниц, мы можем сжимать страницы во время отправки их к посетителю, если его браузер поддерживает такое сжатие. Это рекомендуемая опция.'); +@define('INSTALL_SHOWFUTURE', 'Показывать записи с будущими датами'); +@define('INSTALL_SHOWFUTURE_DESC', 'Если включена, эта опция покажет все записи с будущими датами публикации. По умолчанию такие записи скрыты до тех пор, пока не наступит указанная дата публикации.'); +@define('INSTALL_DBPERSISTENT', 'Использовать persistent-соединения'); +@define('INSTALL_DBPERSISTENT_DESC', 'Разрешить использование persistent-соединений к базе данных, больше информации об этом можно получить здесь. Обычно, эта опция не рекомендуется'); +@define('NO_IMAGES_FOUND', 'Не было найдено изображений'); +@define('PERSONAL_SETTINGS', 'Личные настройки'); +@define('REFERER', 'Referer'); +@define('NOT_FOUND', 'Не найден'); +@define('WRITABLE', 'Есть доступ для записи'); +@define('NOT_WRITABLE', 'Нет доступа для записи'); +@define('PROBLEM_DIAGNOSTIC', 'Из-за проблем, найденных во время диагностики, вы не можете продолжать установку, пока указанные выше ошибки не будут исправлены'); +@define('SELECT_INSTALLATION_TYPE', 'Выберите, какой тип инсталляции вы хотите использовать'); +@define('WELCOME_TO_INSTALLATION', 'Добро пожаловать в установку Serendipity'); +@define('FIRST_WE_TAKE_A_LOOK', 'Сначала мы проведём анализ вашей текущей версии и попытаемся найти проблемы совместимости'); +@define('ERRORS_ARE_DISPLAYED_IN', 'Ошибки обозначены как %s, рекомендации как %s, а успешно пройденные проверки - как %s'); +@define('RED', 'красный'); +@define('YELLOW', 'жёлтый'); +@define('GREEN', 'зелёный'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s - пред-установочный отчёт'); +@define('RECOMMENDED', 'Рекомендуется'); +@define('ACTUAL', 'На самом деле'); +@define('PHPINI_CONFIGURATION', 'конфигурация php.ini'); +@define('PHP_INSTALLATION', 'инсталляция PHP'); +@define('THEY_DO', 'they do'); +@define('THEY_DONT', 'they don\'t'); +@define('SIMPLE_INSTALLATION', 'Простая установка'); +@define('EXPERT_INSTALLATION', 'Продвинутая установка'); +@define('COMPLETE_INSTALLATION', 'Полная установка'); +@define('WONT_INSTALL_DB_AGAIN', 'не устанавливать базу данных снова'); +@define('CHECK_DATABASE_EXISTS', 'Проверка, существует ли уже база данных. Если вы увидите ошибку запроса к базе данных ниже, не обращайте внимания...'); +@define('CREATING_PRIMARY_AUTHOR', 'Создание основного автора \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', 'Установка шаблона по умолчанию'); +@define('INSTALLING_DEFAULT_PLUGINS', 'Установка плагинов по умолчанию'); +@define('SERENDIPITY_INSTALLED', '%sSerendipity был успешно установлен на вашей системе.%s Пожалуйста запомните ваш пароль: "%s", ваше имя пользователя - "%s".%sВы можете найти ваш новый PHP блог вот тут'); +@define('VISIT_BLOG_HERE', 'Перейти на ваш новый блог'); +@define('THANK_YOU_FOR_CHOOSING', 'Спасибо за ваш выбор Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', 'Во время установки была обнаружена ошибка'); +@define('OPERATING_SYSTEM', 'Операционная система'); +@define('WEBSERVER_SAPI', 'SAPI веб-сервера'); +@define('TEMPLATE_SET', '\'%s\' был установлен вашим шаблоном по умолчанию'); +@define('SEARCH_ERROR', 'Функция поиска не работает как ожидается. Свяжитесь с администратором этого блога: это может происходить из-за отсутствующих индексов в вашей базе данных. На MySQL системах ваш аккаунт базы данных должен иметь привилегии, чтобы выполнить следующий запрос:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
Собственно ошибка, полученная от базы данных, была следующая:
%s
'); + +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Apply markup transformations to the text (smilies, shortcut markups via *, /, _, ...). Disabling this will preserve any HTML-code in the text.'); // Translate +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_tn.inc.php b/lang/serendipity_lang_tn.inc.php new file mode 100644 index 0000000..7ebe642 --- /dev/null +++ b/lang/serendipity_lang_tn.inc.php @@ -0,0 +1,669 @@ +完成.'); +@define('ERROR_FILE_EXISTS_ALREADY', '錯誤: 檔案已存在!'); +@define('ERROR_UNKNOWN_NOUPLOAD', '未知的錯誤發生, 檔案還沒上傳. 也許你的檔案大於限制的大小. 請詢問您的 ISP 或修改您的 php.ini 檔.'); +@define('GO', '繼續!'); +@define('NEWSIZE', '新大小: '); +@define('RESIZE_BLAHBLAH', '重設大小 %s

'); +@define('ORIGINAL_SIZE', '原有的大小: %sx%s 像素'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

在這裡您可以修改圖片大小. 如果您要修改成相同的圖片比例, 您只需要輸入一個數值然後按 TAB -- 系統會自動幫您計算比例以免出錯

'); +@define('QUICKJUMP_CALENDAR', '日曆快速跳躍'); +@define('QUICKSEARCH', '快速搜尋'); +@define('SEARCH_FOR_ENTRY', '搜尋文章'); +@define('ARCHIVES', '保存文庫'); +@define('BROWSE_ARCHIVES', '以月份瀏覽保存文庫'); +@define('TOP_REFERRER', '主要來源'); +@define('SHOWS_TOP_SITES', '顯示連結到您的網誌的網站'); +@define('TOP_EXITS', '主要出源'); +@define('SHOWS_TOP_EXIT', '顯示您的網誌的主要出源'); +@define('SYNDICATION', '文章同步'); +@define('SHOWS_RSS_BLAHBLAH', '顯示 RSS 同步連結'); +@define('ADVERTISES_BLAHBLAH', '宣傳您的網誌'); +@define('HTML_NUGGET', 'HTML 訊息'); +@define('HOLDS_A_BLAHBLAH', '顯示 HTML 訊息到側列'); +@define('TITLE_FOR_NUGGET', '訊息的標題'); +@define('THE_NUGGET', 'HTML 訊息!'); +@define('SYNDICATE_THIS_BLOG', '同步這個網誌'); +@define('YOU_CHOSE', '您選擇 %s'); +@define('IMAGE_SIZE', '圖片大小'); +@define('IMAGE_AS_A_LINK', '輸入圖片'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', '引用'); +@define('TRACKBACK', '引用'); +@define('NO_TRACKBACKS', '沒有引用'); +@define('TOPICS_OF', '主題'); +@define('VIEW_FULL', '瀏覽全部'); +@define('VIEW_TOPICS', '瀏覽主題'); +@define('AT', '在'); +@define('SET_AS_TEMPLATE', '使用佈景'); +@define('IN', '在'); +@define('EXCERPT', '摘要'); +@define('TRACKED', '引用'); +@define('LINK_TO_ENTRY', '連結到文章'); +@define('LINK_TO_REMOTE_ENTRY', '連結到遠端文章'); +@define('IP_ADDRESS', 'IP 位址'); +@define('USER', '作者'); +@define('THUMBNAIL_USING_OWN', '使用 %s 當它的縮圖尺寸因為圖片已經很小了.'); +@define('THUMBNAIL_FAILED_COPY', '使用 %s 當它的縮圖, 但是無法複製!'); +@define('AUTHOR', '發佈者'); +@define('LAST_UPDATED', '最後更新'); +@define('TRACKBACK_SPECIFIC', '引用此文章特定的 URI (網址)'); +@define('DIRECT_LINK', '直接的文章連結'); +@define('COMMENT_ADDED', '您的迴響已成功增入. '); +@define('COMMENT_ADDED_CLICK', '點 %s這裡返回%s 到迴響, 和點 %s這裡關閉%s 這個視窗.'); +@define('COMMENT_NOT_ADDED', '您的迴響不能增入因為此篇文章不允許迴響. '); +@define('COMMENT_NOT_ADDED_CLICK', '點 %s這裡返回%s 到迴響, 和點 %s這裡關閉%s 這個視窗.'); +@define('COMMENTS_DISABLE', '不允許迴響到這篇文章'); +@define('COMMENTS_ENABLE', '允許迴響到這篇文章'); +@define('COMMENTS_CLOSED', '作者不允許迴響到這篇文章'); +@define('EMPTY_COMMENT', '您的迴響沒有任何訊息, 請 %s返回%s 重試'); +@define('ENTRIES_FOR', '文章給 %s'); +@define('DOCUMENT_NOT_FOUND', '找不到此篇文件 %s.'); +@define('USERNAME', '帳號'); +@define('PASSWORD', '密碼'); +@define('AUTOMATIC_LOGIN', '自動登入'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity 安裝程式'); +@define('LEFT', 'å·¦'); +@define('RIGHT', '右'); +@define('HIDDEN', '隱藏'); +@define('REMOVE_TICKED_PLUGINS', '移除勾選的外掛'); +@define('SAVE_CHANGES_TO_LAYOUT', '儲存外觀配置'); +@define('COMMENTS_FROM', '迴響來源'); +@define('ERROR', '錯誤'); +@define('ENTRY_SAVED', '您的文章已儲存'); +@define('DELETE_SURE', '確定要刪除 #%s 嗎?'); +@define('NOT_REALLY', '算了...'); +@define('DUMP_IT', '刪除吧!'); +@define('RIP_ENTRY', 'R.I.P. 文章 #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', '類別 #%s 已刪除. 舊文章已被移動到類別 #%s'); +@define('CATEGORY_DELETED', '類別 #%s 已刪除.'); +@define('INVALID_CATEGORY', '沒有提供刪除的類別'); +@define('CATEGORY_SAVED', '類別已儲存'); +@define('SELECT_TEMPLATE', '請選擇網誌的佈景'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', '沒有完成增入文章!'); +@define('MT_DATA_FILE', 'Movable Type 資料檔'); +@define('FORCE', '強制'); +@define('CREATE_AUTHOR', '新增作者 \'%s\'.'); +@define('CREATE_CATEGORY', '新增類別 \'%s\'.'); +@define('MYSQL_REQUIRED', '您必須要有 MySQL 的擴充功能才能執行這個動作.'); +@define('COULDNT_CONNECT', '不能聯結到 MySQL 資料庫: %s.'); +@define('COULDNT_SELECT_DB', '不能選擇資料庫: %s.'); +@define('COULDNT_SELECT_USER_INFO', '不能選擇使用者的資料: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', '不能選擇類別的資料: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', '不能選擇文章的資料: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', '不能選擇迴響的資料: %s.'); +@define('YES', '是'); +@define('NO', '否'); +@define('USE_DEFAULT', '預設'); +@define('CHECK_N_SAVE', '儲存'); +@define('DIRECTORY_WRITE_ERROR', '不能讀寫檔案夾 %s. 請檢查權限.'); +@define('DIRECTORY_CREATE_ERROR', '檔案夾 %s 不存在也無法建立. 請自己建立這個檔案夾'); +@define('DIRECTORY_RUN_CMD', ' -> run %s %s'); +@define('CANT_EXECUTE_BINARY', '無法執行 %s 資源檔案'); +@define('FILE_WRITE_ERROR', '無法讀寫檔案 %s.'); +@define('FILE_CREATE_YOURSELF', '請自己建立這個檔案或檢查權限'); +@define('COPY_CODE_BELOW', '
* 請複製下面的代碼然後放入 %s 到您的 %s 檔案夾:
%s
' . "\n"); +@define('WWW_USER', '請改變 www 到使用者的 Apache (i.e. nobody).'); +@define('BROWSER_RELOAD', '完成之後, 重新刷新您的瀏覽器.'); +@define('DIAGNOSTIC_ERROR', '系統偵測到一些錯誤:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity 還沒安裝完成. 請按 安裝.'); +@define('INCLUDE_ERROR', 'serendipity 錯誤: 無法包括 %s - 退出.'); +@define('DATABASE_ERROR', 'serendipity 錯誤: 無法連結到資料庫 - 退出.'); +@define('CHECK_DATABASE_EXISTS', '檢查資料庫是否存在. 如果您看到資料庫查詢錯誤, 請不用管它...'); +@define('CREATE_DATABASE', '建立預設資料庫設定...'); +@define('ATTEMPT_WRITE_FILE', '讀寫 %s 檔案...'); +@define('SERENDIPITY_INSTALLED', '%sSerendipity 已安裝完成.%s 請記得您的密碼: "%s", 您的帳號是 "%s".%s您現在可以到新建立的 網誌'); +@define('WRITTEN_N_SAVED', '儲存完畢'); +@define('IMAGE_ALIGNMENT', '圖片對齊'); +@define('ENTER_NEW_NAME', '輸入新名稱給: '); +@define('RESIZING', '重設大小'); +@define('RESIZE_DONE', '完成 (重設 %s 個圖片).'); +@define('SYNCING', '進行資料庫和圖片檔案夾同步化'); +@define('SYNC_DONE', '完成 (同步了 %s 個圖片).'); +@define('FILE_NOT_FOUND', '找不到檔案名稱 %s, 也許已經被刪除了?'); +@define('ABORT_NOW', '放棄'); +@define('REMOTE_FILE_NOT_FOUND', '檔案不在遠端主機內, 您確定這個 URL: %s 是正確的嗎?'); +@define('FILE_FETCHED', '%s 取回為 %s'); +@define('FILE_UPLOADED', '檔案 %s 上傳為 %s'); +@define('WORD_OR', '或'); +@define('SCALING_IMAGE', '縮放 %s 到 %s x %s px'); +@define('KEEP_PROPORTIONS', '維持比例'); +@define('REALLY_SCALE_IMAGE', '確定要縮放圖片嗎? 這個動作不能復原!'); +@define('TOGGLE_ALL', '切換展開'); +@define('TOGGLE_OPTION', '切換選項'); +@define('SUBSCRIBE_TO_THIS_ENTRY', '訂閱這篇文章'); +@define('UNSUBSCRIBE_OK', "%s 已取消訂閱這篇文章"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', '新迴響到訂閱的文章 "%s"'); +@define('SUBSCRIPTION_MAIL', "您好 %s,\n\n您訂閱的文章有了新的迴響在 \"%s\", 標題是 \"%s\"\n迴響的發表者是: %s\n\n您可以在這找到此文章: %s\n\n您可以點這個連結取消訂閱: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "您好 %s,\n\n您訂閱的文章有了新的引用在 \"%s\", 標題是 \"%s\"\n引用的作者是: %s\n\n您可以在這找到此文章: %s\n\n您可以點這個連結取消訂閱: %s\n"); +@define('SIGNATURE', "\n-- \n%s is powered by Serendipity.\nThe best blog around, you can use it too.\nCheck out to find out how."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comments'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', '欄位 "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', '欄位 "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'RSS feed 的圖片'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', '圖片寬度'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', '圖片高度'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', '管理員的電子郵件, 如果有. (空白: 隱藏) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', '作者的電子郵件, 如果有. (空白: 隱藏) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', '圖片的位址 URL, 以 GIF/JPEG/PNG 格式, 如果有. (空白: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', '像素, 最大. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', '像素, 最大. 400'); +@define('SYNDICATION_PLUGIN_TTL', '欄位 "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', '過幾分鐘後您的文章不會被外來的網站或程式儲存到快取記憶裡 (空白: 隱藏) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', '欄位 "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', '"pubDate"-欄位需要內嵌到RSS-頻道, 以顯示最後文章的日期嗎?'); +@define('CONTENT', '內容'); +@define('TYPE', '類型'); +@define('DRAFT', '草稿'); +@define('PUBLISH', '公開'); +@define('PREVIEW', '預覽'); +@define('DATE', '日期'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', '警告: 您提供的日期不正確. 它必須是 YYYY-MM-DD HH:MM 格式.'); +@define('CATEGORY_PLUGIN_DESC', '顯示類別清單.'); +@define('ALL_AUTHORS', '全部作者'); +@define('CATEGORIES_TO_FETCH', '顯示類別'); +@define('CATEGORIES_TO_FETCH_DESC', '顯示哪位作者的類別?'); +@define('PAGE_BROWSE_ENTRIES', '頁數 %s 共 %s, 總共 %s 篇文章'); +@define('PREVIOUS_PAGE', '上一頁'); +@define('NEXT_PAGE', '下一頁'); +@define('ALL_CATEGORIES', '全部類別'); +@define('DO_MARKUP', '執行標記轉換'); +@define('GENERAL_PLUGIN_DATEFORMAT', '日期格式化'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', '文章的日期格式, 使用 PHP 的 strftime() 變數. (預設: "%s")'); +@define('ERROR_TEMPLATE_FILE', '無法開啟佈景檔案, 請更新 serendipity!'); +@define('ADVANCED_OPTIONS', '進階選項'); +@define('EDIT_ENTRY', '編輯文章'); +@define('HTACCESS_ERROR', '要檢查您的主機安裝設定, serendipity 需要讀寫檔案 ".htaccess". 但是因為權限錯誤, 沒有辦法為您檢查. 請改變檔案權限像這樣:
  %s
然後重新刷新這個網頁.'); +@define('SIDEBAR_PLUGINS', '側列外掛'); +@define('EVENT_PLUGINS', '事件外掛'); +@define('SORT_ORDER', '排序'); +@define('SORT_ORDER_NAME', '檔案名稱'); +@define('SORT_ORDER_EXTENSION', '副檔名'); +@define('SORT_ORDER_SIZE', '檔案大小'); +@define('SORT_ORDER_WIDTH', '圖片寬度'); +@define('SORT_ORDER_HEIGHT', '圖片長度'); +@define('SORT_ORDER_DATE', '上傳日期'); +@define('SORT_ORDER_ASC', '遞增排序'); +@define('SORT_ORDER_DESC', '遞減排序'); +@define('THUMBNAIL_SHORT', '縮圖'); +@define('ORIGINAL_SHORT', '原始'); +@define('APPLY_MARKUP_TO', '套用標記到 %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', '一週的第一天'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity 偵測到您的配置版本是 %s, 但是 Serendipity 本身的安裝版本是 %s, 請更新您的程式版本! 更新'); +@define('SERENDIPITY_UPGRADER_WELCOME', '您好, 歡迎來到 Serendipity 的更新系統.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', '更新系統會幫您更新到 Serendipity 版本 %s.'); +@define('SERENDIPITY_UPGRADER_WHY', '您看到這個訊息是因為您安裝了 Serendipity 版本 %s, 但是您沒有更新資料庫'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', '資料庫更新 (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', '系統找到以下的 .sql 檔, 那些檔案必須先執行才能繼續安裝 Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', '特定的版本任務'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', '沒有特定的版本任務'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', '確定要執行上面的任務嗎?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', '我自己執行'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', '請幫我執行'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', '您不需要進行任何更新'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', '假裝 Serendipity 更新完成吧'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', '您略過了更新任務, 請確定資料庫已安裝完成, 和其他的任務安裝無誤'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', '您的 Serendipity 以更新至版本 %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', '您可以點 %s這裡%s 返回網誌首頁'); +@define('MANAGE_USERS', '管理作者'); +@define('CREATE_NEW_USER', '新增作者'); +@define('CREATE_NOT_AUTHORIZED', '您不能修改跟您相同權限的作者'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', '您不能新增比您高權限的作者'); +@define('CREATED_USER', '新作者 %s 已經新增'); +@define('MODIFIED_USER', '作者 %s 的資料已經更改'); +@define('USER_LEVEL', '作者權限'); +@define('DELETE_USER', '您要刪除這個作者 #%d %s. 確定嗎? 這會在主頁隱藏他所寫的任何文章.'); +@define('DELETED_USER', '作者 #%d %s 已被刪除.'); +@define('LIMIT_TO_NUMBER', '要顯示多少項目?'); +@define('ENTRIES_PER_PAGE', '每頁顯示的文章'); +@define('XML_IMAGE_TO_DISPLAY', 'XML 按鈕'); +@define('XML_IMAGE_TO_DISPLAY_DESC','連結到 XML Feeds 的都會用這個圖片表示. 不填寫將會使用預設的圖片, 或輸入 \'none\' 關閉這個功能.'); + +@define('DIRECTORIES_AVAILABLE', '您可以在子目錄內點任何目錄來建立新的目錄.'); +@define('ALL_DIRECTORIES', '全部目綠'); +@define('MANAGE_DIRECTORIES', '管理目錄'); +@define('DIRECTORY_CREATED', '目錄 %s 已經新增.'); +@define('PARENT_DIRECTORY', '母目錄'); +@define('CONFIRM_DELETE_DIRECTORY', '確定要刪除這個目錄內的全部內容嗎 %s?'); +@define('ERROR_NO_DIRECTORY', '錯誤: 目錄 %s 不存在'); +@define('CHECKING_DIRECTORY', '檢查此目錄的檔案 %s'); +@define('DELETING_FILE', '刪除檔案 %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', '不能移除未清空的目錄. 勾選 "強制刪除" 核取方塊如果您要移除這些檔案, 然後在繼續. 存在的檔案是:'); +@define('DIRECTORY_DELETE_FAILED', '不能刪除目錄 %s. 請檢查權限或看上面的訊息.'); +@define('DIRECTORY_DELETE_SUCCESS', '目錄 %s 成功刪除.'); +@define('SKIPPING_FILE_EXTENSION', '略過檔案: 沒有 %s 的副檔名.'); +@define('SKIPPING_FILE_UNREADABLE', '略過檔案: %s 不能讀取.'); +@define('FOUND_FILE', '找到 新/修改 過的檔案: %s.'); +@define('ALREADY_SUBCATEGORY', '%s 已經是此類別的子類別 %s.'); +@define('PARENT_CATEGORY', '母類別'); +@define('IN_REPLY_TO', '回覆到'); +@define('TOP_LEVEL', '最高層'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', '權限'); +@define('SETTINGS_SAVED_AT', '新設定已經被儲存到 %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', '資料庫設定'); +@define('INSTALL_CAT_DB_DESC', '您可以在這輸入全部的資料庫資料. Serendipity 需要這些資料才能正常運作'); +@define('INSTALL_DBTYPE', '資料庫類型'); +@define('INSTALL_DBTYPE_DESC', '資料庫類型'); +@define('INSTALL_DBHOST', '資料庫主機'); +@define('INSTALL_DBHOST_DESC', '資料庫主機名稱'); +@define('INSTALL_DBUSER', '資料庫帳號'); +@define('INSTALL_DBUSER_DESC', '登入資料庫的帳號'); +@define('INSTALL_DBPASS', '資料庫密碼'); +@define('INSTALL_DBPASS_DESC', '您的資料庫密碼'); +@define('INSTALL_DBNAME', '資料庫名稱'); +@define('INSTALL_DBNAME_DESC', '資料庫名稱'); +@define('INSTALL_DBPREFIX', '資料表前置名稱'); +@define('INSTALL_DBPREFIX_DESC', '資料表的前置名稱, 例如 serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', '路徑設定'); +@define('INSTALL_CAT_PATHS_DESC', '給檔案夾的路徑. 不要忘了最後的斜線!'); +@define('INSTALL_FULLPATH', '完全路徑'); +@define('INSTALL_FULLPATH_DESC', '您的 Serendipity 安裝的完全路徑和絕對路徑'); +@define('INSTALL_UPLOADPATH', '上傳路徑'); +@define('INSTALL_UPLOADPATH_DESC', '全部的上傳檔案會存到這裡, 以 \'完全路徑\' 表示的相對路徑 - 例如 \'uploads/\''); +@define('INSTALL_RELPATH', '相對路徑'); +@define('INSTALL_RELPATH_DESC', '給瀏覽器的路徑, 例如 \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', '相對的佈景路徑'); +@define('INSTALL_RELTEMPLPATH_DESC', '您放佈景的路徑 - 以 \'相對路徑\' 表示的相對路徑'); +@define('INSTALL_RELUPLOADPATH', '相對的上傳路徑'); +@define('INSTALL_RELUPLOADPATH_DESC', '給瀏覽器上傳檔案的路徑 - 以 \'相對路徑\' 表示的相對路徑'); +@define('INSTALL_URL', '網誌 URL'); +@define('INSTALL_URL_DESC', '您的 Serendipity 安裝的基本 URL'); +@define('INSTALL_INDEXFILE', 'Index 檔案'); +@define('INSTALL_INDEXFILE_DESC', 'Serendipity 的 index 檔案'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', '一般設定'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Serendipity 的一般設定'); +@define('INSTALL_USERNAME', '管理員帳號'); +@define('INSTALL_USERNAME_DESC', '管理員的登入名稱'); +@define('INSTALL_PASSWORD', '管理員密碼'); +@define('INSTALL_PASSWORD_DESC', '管理員的登入密碼'); +@define('INSTALL_EMAIL', '電子郵件'); +@define('INSTALL_EMAIL_DESC', '管理員的電子郵件'); +@define('INSTALL_SENDMAIL', '寄送電子郵件給管理員?'); +@define('INSTALL_SENDMAIL_DESC', '當有人發佈迴響到您的文章時要收到電子郵件通知嗎?'); +@define('INSTALL_SUBSCRIBE', '允許使用者訂閱文章?'); +@define('INSTALL_SUBSCRIBE_DESC', '您可以允許使用者收到電子郵件通知, 當有迴響發佈時她們會收到通知.'); +@define('INSTALL_BLOGNAME', '網誌名稱'); +@define('INSTALL_BLOGNAME_DESC', '您的網誌標題'); +@define('INSTALL_BLOGDESC', '網誌簡介'); +@define('INSTALL_BLOGDESC_DESC', '介紹您的網誌'); +@define('INSTALL_LANG', '語系'); +@define('INSTALL_LANG_DESC', '網誌使用的語系'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', '外觀及選項設定'); +@define('INSTALL_CAT_DISPLAY_DESC', '讓您設定 Serendipity 的外觀和其他設定'); +@define('INSTALL_WYSIWYG', '使用 WYSIWYG 編輯器'); +@define('INSTALL_WYSIWYG_DESC', '您要使用 WYSIWYG 編輯器嗎? (可在 IE5+ 使用, 某些部分可使用於 Mozilla 1.3+)'); +@define('INSTALL_XHTML11', '強制符合 XHTML 1.1 要求'); +@define('INSTALL_XHTML11_DESC', '您可以讓您的網誌強制符合 XHTML 1.1 的要求 (對舊的瀏覽器可能會有 後台/前台 的問題)'); +@define('INSTALL_POPUP', '使用彈出視窗'); +@define('INSTALL_POPUP_DESC', '您要在迴響, 引用等地方使用彈出視窗嗎?'); +@define('INSTALL_EMBED', '使用內嵌功能?'); +@define('INSTALL_EMBED_DESC', '如果你要將 Serendipity 以內嵌的方式放到網頁內, 選擇 是 會讓您捨棄任何標題然後只顯示網誌內容. 您可以用 indexFile 設定來使用包裝函式類別以便您放入網頁標題. 詳情請查詢 README 檔案!'); +@define('INSTALL_TOP_AS_LINKS', '以連結顯示 主要出源/主要來源?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"否": 出源和來源將用文字顯示以避免 google 的廣告. "是": 出源和來源將用連結顯示. "預設": 用全區裡面的設定 (建議).'); +@define('INSTALL_BLOCKREF', '阻擋來源'); +@define('INSTALL_BLOCKREF_DESC', '有任何特殊的主機您不想在來源裡顯示嗎? 用 \';\' 來分開主機名稱, 注意主機是以子字串方式阻擋!'); +@define('INSTALL_REWRITE', 'URL Rewriting'); +@define('INSTALL_REWRITE_DESC', '請選擇您想用的 URL Rewriting 方式. 開啟 rewrite 規則會以比較清楚的方式顯示 URL, 以便搜尋網站能正確的登入您的文章. 您的主機必須支援 mod_rewrite 或 "AllowOverride All" 到您的 Serendipity 檔案夾. 預設的設定是系統自動幫您偵測的'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', '圖片轉換設定'); +@define('INSTALL_CAT_IMAGECONV_DESC', '請設定 Serendipity 設定圖片轉換的方式'); +@define('INSTALL_IMAGEMAGICK', '使用 Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', '如果有安裝 image magick, 您要用它來改變圖片大小嗎?'); +@define('INSTALL_IMAGEMAGICKPATH', '轉換程式路徑'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'image magick 轉換程式的完全路徑和名稱'); +@define('INSTALL_THUMBSUFFIX', '縮圖後置字元'); +@define('INSTALL_THUMBSUFFIX_DESC', '縮圖會以下面的格式重新命名: original.[後置字元].ext'); +@define('INSTALL_THUMBWIDTH', '縮圖尺度'); +@define('INSTALL_THUMBWIDTH_DESC', '自動建立縮圖的最大寬度'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', '個人資料設定'); +@define('USERCONF_CAT_PERSONAL_DESC', '改變您的個人資料'); +@define('USERCONF_USERNAME', '您的帳號'); +@define('USERCONF_USERNAME_DESC', '您登入網誌的名稱'); +@define('USERCONF_PASSWORD', '您的密碼'); +@define('USERCONF_PASSWORD_DESC', '您登入網誌的密碼'); +@define('USERCONF_EMAIL', '您的電子郵件'); +@define('USERCONF_EMAIL_DESC', '您使用的電子郵件'); +@define('USERCONF_SENDCOMMENTS', '寄送迴響通知?'); +@define('USERCONF_SENDCOMMENTS_DESC', '當有新迴響到您的文章時要通知您嗎?'); +@define('USERCONF_SENDTRACKBACKS', '寄送引用通知?'); +@define('USERCONF_SENDTRACKBACKS_DESC', '當有新引用到您的文章時要通知您嗎?'); +@define('USERCONF_ALLOWPUBLISH', '權限: 可發佈文章?'); +@define('USERCONF_ALLOWPUBLISH_DESC', '允許這位作者發佈文章嗎?'); +@define('SUCCESS', '完成'); +@define('POWERED_BY_SHOW_TEXT', '以文字顯示 "Serendipity"'); +@define('POWERED_BY_SHOW_TEXT_DESC', '將用文字顯示 "Serendipity Weblog"'); +@define('POWERED_BY_SHOW_IMAGE', '以 logo 顯示 "Serendipity"'); +@define('POWERED_BY_SHOW_IMAGE_DESC', '顯示 Serendipity 的 logo'); +@define('PLUGIN_ITEM_DISPLAY', '該項目的顯示位址?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', '只在副內容顯示'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', '只在概觀內顯示'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', '永遠顯示'); + +@define('COMMENTS_WILL_BE_MODERATED', '發佈的迴響將需要管理員的審核.'); +@define('YOU_HAVE_THESE_OPTIONS', '您有以下選擇:'); +@define('THIS_COMMENT_NEEDS_REVIEW', '警告: 這個迴響須審核才會顯示'); +@define('DELETE_COMMENT', '刪除迴響'); +@define('APPROVE_COMMENT', '認可迴響'); +@define('REQUIRES_REVIEW', '需要審核'); +@define('COMMENT_APPROVED', '迴響 #%s 已經通過審核'); +@define('COMMENT_DELETED', '迴響 #%s 已經成功刪除'); +@define('COMMENTS_MODERATE', '迴響和引用到這個文章需要管理員的審核'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', '警告: 這個引用需要管理員的審核才會顯示'); +@define('DELETE_TRACKBACK', '刪除引用'); +@define('APPROVE_TRACKBACK', '認可引用'); +@define('TRACKBACK_APPROVED', '引用 #%s 已經通過審核'); +@define('TRACKBACK_DELETED', '引用 #%s 已經成功刪除'); +@define('VIEW', '瀏覽'); +@define('COMMENT_ALREADY_APPROVED', '迴響 #%s 已經通過審核'); +@define('COMMENT_EDITED', '文章已被編輯'); +@define('HIDE', '隱藏'); +@define('VIEW_EXTENDED_ENTRY', '繼續閱讀 "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', '這個連結不是用來點的. 它包含了這個文章的引用 URI. 您可以從您的網誌內用這個 URI 來傳送 ping 和引用到這個文章. 如果要複製這個連結, 在連結上點右鍵然後選擇 "複製連結" (IE) 或 "複製連結位址" (Mozilla).'); +@define('PLUGIN_SUPERUSER_HTTPS', '用 https 登入'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', '讓登入連結連到 https 網址. 您的主機必須支援這項功能!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', '讓外來連結以連結顯示?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"否": 外來連結 (主要出源, 主要來源, 迴響) 都不會以文字顯示以避免 google 廣告 (建議使用). "是": 外來連結將以超連結的方式顯示. 可以在側列外掛蓋過此設定!'); +@define('PAGE_BROWSE_COMMENTS', '頁數 %s 共 %s, 總共 %s 個迴響'); +@define('FILTERS', '過濾'); +@define('FIND_ENTRIES', '搜尋文章'); +@define('FIND_COMMENTS', '搜尋迴響'); +@define('FIND_MEDIA', '搜尋媒體'); +@define('FILTER_DIRECTORY', '目錄'); +@define('SORT_BY', '排序'); +@define('TRACKBACK_COULD_NOT_CONNECT', '沒有送出引用: 無法開啟線路到 %s 用連接埠 %d'); +@define('MEDIA', '媒體'); +@define('MEDIA_LIBRARY', '媒體存庫'); +@define('ADD_MEDIA', '新增媒體'); +@define('ENTER_MEDIA_URL', '請輸入檔案的 URL:'); +@define('ENTER_MEDIA_UPLOAD', '請選擇要上傳的檔案:'); +@define('SAVE_FILE_AS', '儲存檔案:'); +@define('STORE_IN_DIRECTORY', '儲存到以下目錄: '); +@define('ADD_MEDIA_BLAHBLAH', '新增檔案到媒體存庫:

您可以在這上傳媒體檔, 或告訴系統到哪尋找! 如果您沒有想要的圖片, 您可以到 google尋找圖片.

選擇方式:
'); +@define('MEDIA_RENAME', '更改檔案名稱'); +@define('IMAGE_RESIZE', '更改圖片尺寸'); +@define('MEDIA_DELETE', '刪除這個檔案'); +@define('FILES_PER_PAGE', '每頁顯示的檔案數'); +@define('CLICK_FILE_TO_INSERT', '點選您要輸入的檔案:'); +@define('SELECT_FILE', '選擇要輸入的檔案'); +@define('MEDIA_FULLSIZE', '完整尺寸'); +@define('CALENDAR_BOW_DESC', '一個禮拜的第一天. 預設是星期一'); +@define('SUPERUSER', '網誌管理'); +@define('ALLOWS_YOU_BLAHBLAH', '在側列提供連結到網誌管理'); +@define('CALENDAR', '日曆'); +@define('SUPERUSER_OPEN_ADMIN', '開啟管理頁面'); +@define('SUPERUSER_OPEN_LOGIN', '開啟登入頁面'); +@define('INVERT_SELECTIONS', '顛倒勾選'); +@define('COMMENTS_DELETE_CONFIRM', '確定要刪除勾選的迴響嗎?'); +@define('COMMENT_DELETE_CONFIRM', '確定要刪除迴響 #%d, 發佈者是 %s?'); +@define('DELETE_SELECTED_COMMENTS', '刪除勾選的迴響'); +@define('VIEW_COMMENT', '瀏覽迴響'); +@define('VIEW_ENTRY', '瀏覽文章'); +@define('DELETE_FILE_FAIL' , '無法刪除檔案 %s'); +@define('DELETE_THUMBNAIL', '刪除了圖片縮圖 %s'); +@define('DELETE_FILE', '刪除了檔案 %s'); +@define('ABOUT_TO_DELETE_FILE', '您將刪除檔案 %s
如果您有在其他的文章內使用這個檔案, 那個連結或圖片將會無效
確定要繼續嗎?

'); +@define('TRACKBACK_SENDING', '傳送引用到 URI %s...'); +@define('TRACKBACK_SENT', '引用完成'); +@define('TRACKBACK_FAILED', '引用錯誤: %s'); +@define('TRACKBACK_NOT_FOUND', '找不到引用的URI.'); +@define('TRACKBACK_URI_MISMATCH', '自動搜尋的引用跟引用目標不相同.'); +@define('TRACKBACK_CHECKING', '搜尋 %s 的引用...'); +@define('TRACKBACK_NO_DATA', '目標沒有任何資料'); +@define('TRACKBACK_SIZE', '目標 URI 超出了允許的 %s bytes 檔案大小.'); +@define('COMMENTS_VIEWMODE_THREADED', '分線程'); +@define('COMMENTS_VIEWMODE_LINEAR', '直線程'); +@define('DISPLAY_COMMENTS_AS', '迴響顯示方式'); +@define('COMMENTS_FILTER_SHOW', '顯示'); +@define('COMMENTS_FILTER_ALL', '全部'); +@define('COMMENTS_FILTER_APPROVED_ONLY', '顯示審核迴響'); +@define('COMMENTS_FILTER_NEED_APPROVAL', '顯示等待審核'); +@define('RSS_IMPORT_BODYONLY', '將輸入的文字放到主內容, 將不拆開過長的文章到副內容地區.'); +@define('SYNDICATION_PLUGIN_FULLFEED', '在 RSS feed 裡顯示全部的文章'); +@define('WEEK', '週'); +@define('WEEKS', '週'); +@define('MONTHS', '月'); +@define('DAYS', '日'); +@define('ARCHIVE_FREQUENCY', '保存文庫的項目頻率'); +@define('ARCHIVE_FREQUENCY_DESC', '保存文庫使用的項目清單間隔'); +@define('ARCHIVE_COUNT', '保存文庫的項目數'); +@define('ARCHIVE_COUNT_DESC', '顯示的月, 週, 或日'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', '下面是安裝好的外掛'); +@define('SIDEBAR_PLUGIN', '側列外掛'); +@define('EVENT_PLUGIN', '事件外掛'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', '點這裡安裝新 %s'); +@define('VERSION', '版本'); +@define('INSTALL', '安裝'); +@define('ALREADY_INSTALLED', '已經安裝'); +@define('SELECT_A_PLUGIN_TO_ADD', '請選擇要安裝的外掛'); +@define('RSS_IMPORT_CATEGORY', '用這個類別給不相同的輸入文章'); + +@define('INSTALL_OFFSET', '主機時區'); +@define('STICKY_POSTINGS', '頂置文章'); +@define('INSTALL_FETCHLIMIT', '在主頁顯示的文章'); +@define('INSTALL_FETCHLIMIT_DESC', '主頁顯示的文章數'); +@define('IMPORT_ENTRIES', '輸入資料'); +@define('EXPORT_ENTRIES', '輸出資料'); +@define('IMPORT_WELCOME', '歡迎來到 Serendipity 的輸入工具'); +@define('IMPORT_WHAT_CAN', '在這裡您可以輸入在其他網路網誌程式裡的文章'); +@define('IMPORT_SELECT', '請選擇輸入文章的網誌程式'); +@define('IMPORT_PLEASE_ENTER', '請輸入資料'); +@define('IMPORT_NOW', '開始輸入!'); +@define('IMPORT_STARTING', '開始輸入程序...'); +@define('IMPORT_FAILED', '輸入失敗'); +@define('IMPORT_DONE', '完成輸入'); +@define('IMPORT_WEBLOG_APP', '網誌程式'); +@define('EXPORT_FEED', '輸出完整的 RSS'); +@define('STATUS', '輸入後的狀態'); +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); +@define('ACTIVATE_AUTODISCOVERY', '傳送在文章內找到的引用連結'); +@define('WELCOME_TO_ADMIN', '歡迎到 Serendipity 管理介面.'); +@define('PLEASE_ENTER_CREDENTIALS', '請輸入您的資料.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); +@define('INSTALL_USEGZIP', '使用 gzip 壓縮網頁'); +@define('INSTALL_USEGZIP_DESC', '為了能讓網頁更快速的顯示, 我們會將網頁壓縮然後顯示訪客, 如果訪客使用的瀏覽器支援壓縮網頁. 建議使用'); +@define('INSTALL_SHOWFUTURE', '顯示未來文章'); +@define('INSTALL_SHOWFUTURE_DESC', '如果開啟, 您的網誌將會顯示所有的未來文章. 預設的設定是將未來文章隱藏, 然後發佈日期到時自動顯示.'); +@define('INSTALL_DBPERSISTENT', '使用持續連線'); +@define('INSTALL_DBPERSISTENT_DESC', '對資料庫使用持續連線, 詳情請到 這裡. 通常並不建議使用'); +@define('NO_IMAGES_FOUND', '找不到圖片'); +@define('PERSONAL_SETTINGS', '個人設定'); +@define('REFERER', '來源'); +@define('NOT_FOUND', '找不到'); +@define('NOT_WRITABLE', '不可讀寫'); +@define('WRITABLE', '可讀寫'); +@define('PROBLEM_DIAGNOSTIC', '因為上面出現的問題, 您必須將錯誤解決才能繼續安裝'); +@define('SELECT_INSTALLATION_TYPE', '請選擇安裝類型'); +@define('WELCOME_TO_INSTALLATION', '歡迎到 Serendipity 安裝程式'); +@define('FIRST_WE_TAKE_A_LOOK', '首先安裝程式會檢查您的主機設定以避免出現錯誤'); +@define('ERRORS_ARE_DISPLAYED_IN', '錯誤顯示 %s, 建議 %s 完成無誤 %s'); +@define('RED', '紅'); +@define('YELLOW', '黃'); +@define('GREEN', '綠'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s 安裝前報告'); +@define('RECOMMENDED', '建議'); +@define('ACTUAL', '實際'); +@define('PHPINI_CONFIGURATION', 'php.ini 設定'); +@define('PHP_INSTALLATION', 'PHP 安裝'); +@define('THEY_DO', 'they do'); // translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', '簡單安裝'); +@define('EXPERT_INSTALLATION', '專門安裝'); +@define('COMPLETE_INSTALLATION', '完整安裝'); +@define('WONT_INSTALL_DB_AGAIN', '不會重新安裝資料庫'); +@define('CHECK_DATABASE_EXISTS', '檢查是否資料庫和資料表已經存在'); +@define('CREATING_PRIMARY_AUTHOR', '建立主要作者 \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', '設定預設佈景'); +@define('INSTALLING_DEFAULT_PLUGINS', '安裝預設外掛'); +@define('SERENDIPITY_INSTALLED', 'Serendipity 已完成安裝'); +@define('VISIT_BLOG_HERE', '參觀您的網路日誌'); +@define('THANK_YOU_FOR_CHOOSING', '感謝您選擇 Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', '安裝時發生錯誤'); +@define('OPERATING_SYSTEM', '作業系統'); +@define('WEBSERVER_SAPI', '主機 SAPI'); +@define('TEMPLATE_SET', '\'%s\' 已被設定為您的主要佈景'); +@define('SEARCH_ERROR', '搜尋功能發生錯誤. 告知管理員: 發生這個錯誤可能因為資料庫沒有正確的 index keys. 如果使用 MySQL, 您的帳號必須有可執行:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
的權限. 資料庫顯示的錯誤是:
%s
'); +@define('EDIT_THIS_CAT', '編輯 "%s"'); +@define('CATEGORY_REMAINING', '刪除這個類別然後將裡面的文章移到這個類別'); +@define('CATEGORY_INDEX', '下面是可移動到的類別'); +@define('NO_CATEGORIES', '沒有類別'); +@define('RESET_DATE', '重設日期'); +@define('RESET_DATE_DESC', '點這裡重設日期'); +@define('PROBLEM_PERMISSIONS_HOWTO', '權限可以用下面的 Shell 命令來執行: `%s` 然後執行在要改權限的檔案夾,或用 FTP 軟體'); +@define('WARNING_TEMPLATE_DEPRECATED', '警告: 您目前使用的佈景是用舊的方法製作,請盡快更新'); +@define('ENTRY_PUBLISHED_FUTURE', '這篇文章還未公開。'); +@define('ENTRIES_BY', '作者 %s'); +@define('PREVIOUS', '上一頁'); +@define('NEXT', '下一頁'); +@define('APPROVE', '認可'); +@define('DO_MARKUP_DESCRIPTION', '套用自動格式化到文章內 (表情圖案, 符號 *, /, _, ...)。關閉這項功能將會保存任何文章內出現的 HTML 碼。'); +@define('CATEGORY_ALREADY_EXIST', '類別 "%s" 已經存在'); +@define('IMPORT_NOTES', '注意:'); +@define('ERROR_FILE_FORBIDDEN', '您不能上傳此類檔案'); +@define('ADMIN', '管理介面'); +@define('ADMIN_FRONTPAGE', '管理首頁'); +@define('QUOTE', '引言'); +@define('IFRAME_SAVE', 'Serendipity 正在儲存您的文章,建立引用和執行 XML-RPC calls,請稍待..'); +@define('IFRAME_SAVE_DRAFT', '文章草稿已被儲存'); +@define('IFRAME_PREVIEW', 'Serendipity 正在建立您的預覽文章...'); +@define('IFRAME_WARNING', '您的瀏覽器不支援 iframes. 請打開 serendipity_config.inc.php 檔案然後設定 $serendipity[\'use_iframe\'] 變數至 FALSE.'); +@define('NONE', '沒有'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', '新文章將使用預設設定'); +@define('UPGRADE', '更新'); +@define('UPGRADE_TO_VERSION', '更新至版本 %s'); +@define('DELETE_DIRECTORY', '刪除目錄'); +@define('DELETE_DIRECTORY_DESC', '您將刪除目錄內的媒體檔案,注意檔案也許出現在其他文章內。'); +@define('FORCE_DELETE', '刪除此目錄內的檔案,包括 Serendipity 無法識別的檔案'); +@define('CREATE_DIRECTORY', '建立目錄'); +@define('CREATE_NEW_DIRECTORY', '建立新目錄'); +@define('CREATE_DIRECTORY_DESC', '在這裡您可以建立新的目錄來存放媒體檔案。輸入目錄名稱然後您可以選擇是否將它放到母目錄內。'); +@define('BASE_DIRECTORY', '基本目錄'); +@define('USERLEVEL_EDITOR_DESC', '一般作者'); +@define('USERLEVEL_CHIEF_DESC', '主編'); +@define('USERLEVEL_ADMIN_DESC', '管理員'); +@define('USERCONF_USERLEVEL', '權限'); +@define('USERCONF_USERLEVEL_DESC', '這個選項可以設定此作者在這個網誌內的權限'); +@define('USER_SELF_INFO', '登入作者是 %s (%s)'); +@define('ADMIN_ENTRIES', '文章'); +@define('RECHECK_INSTALLATION', '重新檢查安裝程序'); +@define('IMAGICK_EXEC_ERROR', '無法執行: "%s", 錯誤: %s, 傳回變數: %d'); +@define('INSTALL_OFFSET_DESC', '以小時計算,請輸入主機的時間 (current: %clock%) 跟您的時區的時差'); +@define('UNMET_REQUIREMENTS', '未達到需求: %s'); +@define('CHARSET', '編碼'); +@define('AUTOLANG', '使用讀者的瀏覽器內設定的語系'); +@define('AUTOLANG_DESC', '如果開啟,這個功能將使用讀者的瀏覽器內所設定的語系。'); +@define('INSTALL_AUTODETECT_URL', '自動偵測 HTTP-Host'); +@define('INSTALL_AUTODETECT_URL_DESC', '如果設定為 "true",Serendipity 會確定讀者的 HTTP Host 跟您的基本 URL 設定相同。開啟這項功能可以允許您使用多數的網域名稱給您的網誌,和使用這個網域給跟進的連結。'); +@define('CONVERT_HTMLENTITIES', '自動改變 HTML entities?'); +@define('EMPTY_SETTING', '您沒有提供 "%s" 的正確值!'); +@define('USERCONF_REALNAME', '全名'); +@define('USERCONF_REALNAME_DESC', '作者的全名,將顯示給全部讀者'); +@define('HOTLINK_DONE', '檔案盜連
結束。'); +@define('ENTER_MEDIA_URL_METHOD', '取得方法:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', '注意: 如果您選擇盜連方法,請先得到來源網站的允許。盜連允許您用其他網站的圖片而不需將圖片儲存在您的主機內。'); +@define('MEDIA_HOTLINKED', '盜連圖片'); +@define('FETCH_METHOD_IMAGE', '下載圖片到主機'); +@define('FETCH_METHOD_HOTLINK', '盜連到主機'); +@define('DELETE_HOTLINK_FILE', '刪除盜連的檔案 %s'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', '顯示電子郵件嗎?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_tw.inc.php b/lang/serendipity_lang_tw.inc.php new file mode 100644 index 0000000..1bbf9b5 --- /dev/null +++ b/lang/serendipity_lang_tw.inc.php @@ -0,0 +1,669 @@ +§¹¦¨.'); +@define('ERROR_FILE_EXISTS_ALREADY', '¿ù»~: Àɮפw¦s¦b!'); +@define('ERROR_UNKNOWN_NOUPLOAD', '¥¼ª¾ªº¿ù»~µo¥Í, ÀÉ®×ÁÙ¨S¤W¶Ç. ¤]³\§AªºÀɮפj©ó­­¨îªº¤j¤p. ½Ð¸ß°Ý±zªº ISP ©Î­×§ï±zªº php.ini ÀÉ.'); +@define('GO', 'Ä~Äò!'); +@define('NEWSIZE', '·s¤j¤p: '); +@define('RESIZE_BLAHBLAH', '­«³]¤j¤p %s

'); +@define('ORIGINAL_SIZE', '­ì¦³ªº¤j¤p: %sx%s ¹³¯À'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

¦b³o¸Ì±z¥i¥H­×§ï¹Ï¤ù¤j¤p. ¦pªG±z­n­×§ï¦¨¬Û¦Pªº¹Ï¤ù¤ñ¨Ò, ±z¥u»Ý­n¿é¤J¤@­Ó¼Æ­ÈµM«á«ö TAB -- ¨t²Î·|¦Û°ÊÀ°±z­pºâ¤ñ¨Ò¥H§K¥X¿ù

'); +@define('QUICKJUMP_CALENDAR', '¤é¾ä§Ö³t¸õÅD'); +@define('QUICKSEARCH', '§Ö³t·j´M'); +@define('SEARCH_FOR_ENTRY', '·j´M¤å³¹'); +@define('ARCHIVES', '«O¦s¤å®w'); +@define('BROWSE_ARCHIVES', '¥H¤ë¥÷ÂsÄý«O¦s¤å®w'); +@define('TOP_REFERRER', '¥D­n¨Ó·½'); +@define('SHOWS_TOP_SITES', 'Åã¥Ü³sµ²¨ì±zªº¤é°Oªººô¯¸'); +@define('TOP_EXITS', '¥D­n¥X·½'); +@define('SHOWS_TOP_EXIT', 'Åã¥Ü±zªº¤é°Oªº¥D­n¥X·½'); +@define('SYNDICATION', '¤å³¹¦P¨B'); +@define('SHOWS_RSS_BLAHBLAH', 'Åã¥Ü RSS ¦P¨B³sµ²'); +@define('ADVERTISES_BLAHBLAH', '«Å¶Ç±zªººô¸ô¤é°O'); +@define('HTML_NUGGET', 'HTML °T®§'); +@define('HOLDS_A_BLAHBLAH', 'Åã¥Ü HTML °T®§¨ì°¼¦C'); +@define('TITLE_FOR_NUGGET', '°T®§ªº¼ÐÃD'); +@define('THE_NUGGET', 'HTML °T®§!'); +@define('SYNDICATE_THIS_BLOG', '¦P¨B³o­Ó¤é°O'); +@define('YOU_CHOSE', '±z¿ï¾Ü %s'); +@define('IMAGE_SIZE', '¹Ï¤ù¤j¤p'); +@define('IMAGE_AS_A_LINK', '¿é¤J¹Ï¤ù'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', '¤Þ¥Î'); +@define('TRACKBACK', '¤Þ¥Î'); +@define('NO_TRACKBACKS', '¨S¦³¤Þ¥Î'); +@define('TOPICS_OF', '¥DÃD'); +@define('VIEW_FULL', 'ÂsÄý¥þ³¡'); +@define('VIEW_TOPICS', 'ÂsÄý¥DÃD'); +@define('AT', '¦b'); +@define('SET_AS_TEMPLATE', '¨Ï¥Î§G´º'); +@define('IN', '¦b'); +@define('EXCERPT', 'ºK­n'); +@define('TRACKED', '¤Þ¥Î'); +@define('LINK_TO_ENTRY', '³sµ²¨ì¤å³¹'); +@define('LINK_TO_REMOTE_ENTRY', '³sµ²¨ì»·ºÝ¤å³¹'); +@define('IP_ADDRESS', 'IP ¦ì§}'); +@define('USER', '§@ªÌ'); +@define('THUMBNAIL_USING_OWN', '¨Ï¥Î %s ·í¥¦ªºÁY¹Ï¤Ø¤o¦]¬°¹Ï¤ù¤w¸g«Ü¤p¤F.'); +@define('THUMBNAIL_FAILED_COPY', '¨Ï¥Î %s ·í¥¦ªºÁY¹Ï, ¦ý¬OµLªk½Æ»s!'); +@define('AUTHOR', 'µoªíªÌ'); +@define('LAST_UPDATED', '³Ì«á§ó·s'); +@define('TRACKBACK_SPECIFIC', '¤Þ¥Î¦¹¤å³¹¯S©wªº URI (ºô§})'); +@define('DIRECT_LINK', 'ª½±µªº¤å³¹³sµ²'); +@define('COMMENT_ADDED', '±zªº°jÅT¤w¦¨¥\¼W¤J. '); +@define('COMMENT_ADDED_CLICK', 'ÂI %s³o¸Ìªð¦^%s ¨ì°jÅT, ©MÂI %s³o¸ÌÃö³¬%s ³o­Óµøµ¡.'); +@define('COMMENT_NOT_ADDED', '±zªº°jÅT¤£¯à¼W¤J¦]¬°¦¹½g¤å³¹¤£¤¹³\°jÅT. '); +@define('COMMENT_NOT_ADDED_CLICK', 'ÂI %s³o¸Ìªð¦^%s ¨ì°jÅT, ©MÂI %s³o¸ÌÃö³¬%s ³o­Óµøµ¡.'); +@define('COMMENTS_DISABLE', '¤£¤¹³\°jÅT¨ì³o½g¤å³¹'); +@define('COMMENTS_ENABLE', '¤¹³\°jÅT¨ì³o½g¤å³¹'); +@define('COMMENTS_CLOSED', '§@ªÌ¤£¤¹³\°jÅT¨ì³o½g¤å³¹'); +@define('EMPTY_COMMENT', '±zªº°jÅT¨S¦³¥ô¦ó°T®§, ½Ð %sªð¦^%s ­«¸Õ'); +@define('ENTRIES_FOR', '¤å³¹µ¹ %s'); +@define('DOCUMENT_NOT_FOUND', '§ä¤£¨ì¦¹½g¤å¥ó %s.'); +@define('USERNAME', '±b¸¹'); +@define('PASSWORD', '±K½X'); +@define('AUTOMATIC_LOGIN', '¦Û°Êµn¤J'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity ¦w¸Ëµ{¦¡'); +@define('LEFT', '¥ª'); +@define('RIGHT', '¥k'); +@define('HIDDEN', 'ÁôÂÃ'); +@define('REMOVE_TICKED_PLUGINS', '²¾°£¤Ä¿ïªº¥~±¾'); +@define('SAVE_CHANGES_TO_LAYOUT', 'Àx¦s¥~Æ[°t¸m'); +@define('COMMENTS_FROM', '°jÅT¨Ó·½'); +@define('ERROR', '¿ù»~'); +@define('ENTRY_SAVED', '±zªº¤å³¹¤wÀx¦s'); +@define('DELETE_SURE', '½T©w­n§R°£ #%s ¶Ü?'); +@define('NOT_REALLY', 'ºâ¤F...'); +@define('DUMP_IT', '§R°£§a!'); +@define('RIP_ENTRY', 'R.I.P. ¤å³¹ #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Ãþ§O #%s ¤w§R°£. ¤峹¤w³Q²¾°Ê¨ìÃþ§O #%s'); +@define('CATEGORY_DELETED', 'Ãþ§O #%s ¤w§R°£.'); +@define('INVALID_CATEGORY', '¨S¦³´£¨Ñ§R°£ªºÃþ§O'); +@define('CATEGORY_SAVED', 'Ãþ§O¤wÀx¦s'); +@define('SELECT_TEMPLATE', '½Ð¿ï¾Üºô¸ô¤é°Oªº§G´º'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', '¨S¦³§¹¦¨¼W¤J¤å³¹!'); +@define('MT_DATA_FILE', 'Movable Type ¸ê®ÆÀÉ'); +@define('FORCE', '±j¨î'); +@define('CREATE_AUTHOR', '·s¼W§@ªÌ \'%s\'.'); +@define('CREATE_CATEGORY', '·s¼WÃþ§O \'%s\'.'); +@define('MYSQL_REQUIRED', '±z¥²¶·­n¦³ MySQL ªºÂX¥R¥\¯à¤~¯à°õ¦æ³o­Ó°Ê§@.'); +@define('COULDNT_CONNECT', '¤£¯àÁpµ²¨ì MySQL ¸ê®Æ®w: %s.'); +@define('COULDNT_SELECT_DB', '¤£¯à¿ï¾Ü¸ê®Æ®w: %s.'); +@define('COULDNT_SELECT_USER_INFO', '¤£¯à¿ï¾Ü¨Ï¥ÎªÌªº¸ê®Æ: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', '¤£¯à¿ï¾ÜÃþ§Oªº¸ê®Æ: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', '¤£¯à¿ï¾Ü¤å³¹ªº¸ê®Æ: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', '¤£¯à¿ï¾Ü°jÅTªº¸ê®Æ: %s.'); +@define('YES', '¬O'); +@define('NO', '§_'); +@define('USE_DEFAULT', '¹w³]'); +@define('CHECK_N_SAVE', 'Àx¦s'); +@define('DIRECTORY_WRITE_ERROR', '¤£¯àŪ¼gÀÉ®×§¨ %s. ½ÐÀˬdÅv­­.'); +@define('DIRECTORY_CREATE_ERROR', 'ÀÉ®×§¨ %s ¤£¦s¦b¤]µLªk«Ø¥ß. ½Ð¦Û¤v«Ø¥ß³o­ÓÀÉ®×§¨'); +@define('DIRECTORY_RUN_CMD', ' -> run %s %s'); +@define('CANT_EXECUTE_BINARY', 'µLªk°õ¦æ %s ¸ê·½ÀÉ®×'); +@define('FILE_WRITE_ERROR', 'µLªkŪ¼gÀÉ®× %s.'); +@define('FILE_CREATE_YOURSELF', '½Ð¦Û¤v«Ø¥ß³o­ÓÀɮשÎÀˬdÅv­­'); +@define('COPY_CODE_BELOW', '
* ½Ð½Æ»s¤U­±ªº¥N½XµM«á©ñ¤J %s ¨ì±zªº %s ÀÉ®×§¨:
%s
' . "\n"); +@define('WWW_USER', '½Ð§ïÅÜ www ¨ì¨Ï¥ÎªÌªº Apache (i.e. nobody).'); +@define('BROWSER_RELOAD', '§¹¦¨¤§«á, ­«·s¨ê·s±zªºÂsÄý¾¹.'); +@define('DIAGNOSTIC_ERROR', '¨t²Î°»´ú¨ì¤@¨Ç¿ù»~:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity ÁÙ¨S¦w¸Ë§¹¦¨. ½Ð«ö ¦w¸Ë.'); +@define('INCLUDE_ERROR', 'serendipity ¿ù»~: µLªk¥]¬A %s - °h¥X.'); +@define('DATABASE_ERROR', 'serendipity ¿ù»~: µLªk³sµ²¨ì¸ê®Æ®w - °h¥X.'); +@define('CHECK_DATABASE_EXISTS', 'Àˬd¸ê®Æ®w¬O§_¦s¦b. ¦pªG±z¬Ý¨ì¸ê®Æ®w¬d¸ß¿ù»~, ½Ð¤£¥ÎºÞ¥¦...'); +@define('CREATE_DATABASE', '«Ø¥ß¹w³]¸ê®Æ®w³]©w...'); +@define('ATTEMPT_WRITE_FILE', 'Ū¼g %s ÀÉ®×...'); +@define('SERENDIPITY_INSTALLED', '%sSerendipity ¤w¦w¸Ë§¹¦¨.%s ½Ð°O±o±zªº±K½X: "%s", ±zªº±b¸¹¬O "%s".%s±z²{¦b¥i¥H¨ì·s«Ø¥ßªº ºô¸ô¤é°O'); +@define('WRITTEN_N_SAVED', 'Àx¦s§¹²¦'); +@define('IMAGE_ALIGNMENT', '¹Ï¤ù¹ï»ô'); +@define('ENTER_NEW_NAME', '¿é¤J·s¦WºÙµ¹: '); +@define('RESIZING', '­«³]¤j¤p'); +@define('RESIZE_DONE', '§¹¦¨ (­«³] %s ­Ó¹Ï¤ù).'); +@define('SYNCING', '¶i¦æ¸ê®Æ®w©M¹Ï¤ùÀÉ®×§¨¦P¨B¤Æ'); +@define('SYNC_DONE', '§¹¦¨ (¦P¨B¤F %s ­Ó¹Ï¤ù).'); +@define('FILE_NOT_FOUND', '§ä¤£¨ìÀɮצWºÙ %s, ¤]³\¤w¸g³Q§R°£¤F?'); +@define('ABORT_NOW', '©ñ±ó'); +@define('REMOTE_FILE_NOT_FOUND', 'Àɮפ£¦b»·ºÝ¥D¾÷¤º, ±z½T©w³o­Ó URL: %s ¬O¥¿½Tªº¶Ü?'); +@define('FILE_FETCHED', '%s ¨ú¦^¬° %s'); +@define('FILE_UPLOADED', 'ÀÉ®× %s ¤W¶Ç¬° %s'); +@define('WORD_OR', '©Î'); +@define('SCALING_IMAGE', 'ÁY©ñ %s ¨ì %s x %s px'); +@define('KEEP_PROPORTIONS', 'ºû«ù¤ñ¨Ò'); +@define('REALLY_SCALE_IMAGE', '½T©w­nÁY©ñ¹Ï¤ù¶Ü? ³o­Ó°Ê§@¤£¯à´_­ì!'); +@define('TOGGLE_ALL', '¤Á´«®i¶}'); +@define('TOGGLE_OPTION', '¤Á´«¿ï¶µ'); +@define('SUBSCRIBE_TO_THIS_ENTRY', '­q¾\³o½g¤å³¹'); +@define('UNSUBSCRIBE_OK', "%s ¤w¨ú®ø­q¾\³o½g¤å³¹"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', '·s°jÅT¨ì­q¾\ªº¤å³¹ "%s"'); +@define('SUBSCRIPTION_MAIL', "±z¦n %s,\n\n±z­q¾\ªº¤å³¹¦³¤F·sªº°jÅT¦b \"%s\", ¼ÐÃD¬O \"%s\"\n°jÅTªºµoªíªÌ¬O: %s\n\n±z¥i¥H¦b³o§ä¨ì¦¹¤å³¹: %s\n\n±z¥i¥HÂI³o­Ó³sµ²¨ú®ø­q¾\: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "±z¦n %s,\n\n±z­q¾\ªº¤å³¹¦³¤F·sªº¤Þ¥Î¦b \"%s\", ¼ÐÃD¬O \"%s\"\n¤Þ¥Îªº§@ªÌ¬O: %s\n\n±z¥i¥H¦b³o§ä¨ì¦¹¤å³¹: %s\n\n±z¥i¥HÂI³o­Ó³sµ²¨ú®ø­q¾\: %s\n"); +@define('SIGNATURE', "\n-- \n%s is powered by Serendipity.\nThe best blog around, you can use it too.\nCheck out to find out how."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comments'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'Äæ¦ì "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'Äæ¦ì "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'RSS feed ªº¹Ï¤ù'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', '¹Ï¤ù¼e«×'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', '¹Ï¤ù°ª«×'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', 'ºÞ²z­ûªº¹q¤l¶l¥ó, ¦pªG¦³. (ªÅ¥Õ: ÁôÂÃ) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', '§@ªÌªº¹q¤l¶l¥ó, ¦pªG¦³. (ªÅ¥Õ: ÁôÂÃ) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', '¹Ï¤ùªº¦ì§} URL, ¥H GIF/JPEG/PNG ®æ¦¡, ¦pªG¦³. (ªÅ¥Õ: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', '¹³¯À, ³Ì¤j. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', '¹³¯À, ³Ì¤j. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'Äæ¦ì "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', '¹L´X¤ÀÄÁ«á±zªº¤å³¹¤£·|³Q¥~¨Óªººô¯¸©Îµ{¦¡Àx¦s¨ì§Ö¨ú°O¾Ð¸Ì (ªÅ¥Õ: ÁôÂÃ) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Äæ¦ì "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', '"pubDate"-Äæ¦ì»Ý­n¤º´O¨ìRSS-ÀW¹D, ¥HÅã¥Ü³Ì«á¤å³¹ªº¤é´Á¶Ü?'); +@define('CONTENT', '¤º®e'); +@define('TYPE', 'Ãþ«¬'); +@define('DRAFT', '¯ó½Z'); +@define('PUBLISH', '¤½¶}'); +@define('PREVIEW', '¹wÄý'); +@define('DATE', '¤é´Á'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', 'ĵ§i: ±z´£¨Ñªº¤é´Á¤£¥¿½T. ¥¦¥²¶·¬O YYYY-MM-DD HH:MM ®æ¦¡.'); +@define('CATEGORY_PLUGIN_DESC', 'Åã¥ÜÃþ§O²M³æ.'); +@define('ALL_AUTHORS', '¥þ³¡§@ªÌ'); +@define('CATEGORIES_TO_FETCH', 'Åã¥ÜÃþ§O'); +@define('CATEGORIES_TO_FETCH_DESC', 'Åã¥Ü­þ¦ì§@ªÌªºÃþ§O?'); +@define('PAGE_BROWSE_ENTRIES', '­¶¼Æ %s ¦@ %s, Á`¦@ %s ½g¤å³¹'); +@define('PREVIOUS_PAGE', '¤W¤@­¶'); +@define('NEXT_PAGE', '¤U¤@­¶'); +@define('ALL_CATEGORIES', '¥þ³¡Ãþ§O'); +@define('DO_MARKUP', '°õ¦æ¼Ð°OÂà´«'); +@define('GENERAL_PLUGIN_DATEFORMAT', '¤é´Á®æ¦¡¤Æ'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', '¤å³¹ªº¤é´Á®æ¦¡, ¨Ï¥Î PHP ªº strftime() ÅܼÆ. (¹w³]: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'µLªk¶}±Ò§G´ºÀÉ®×, ½Ð§ó·s serendipity!'); +@define('ADVANCED_OPTIONS', '¶i¶¥¿ï¶µ'); +@define('EDIT_ENTRY', '½s¿è¤å³¹'); +@define('HTACCESS_ERROR', '­nÀˬd±zªº¥D¾÷¦w¸Ë³]©w, serendipity »Ý­nŪ¼gÀÉ®× ".htaccess". ¦ý¬O¦]¬°Åv­­¿ù»~, ¨S¦³¿ìªk¬°±zÀˬd. ½Ð§ïÅÜÀÉ®×Åv­­¹³³o¼Ë:
  %s
µM«á­«·s¨ê·s³o­Óºô­¶.'); +@define('SIDEBAR_PLUGINS', '°¼¦C¥~±¾'); +@define('EVENT_PLUGINS', '¨Æ¥ó¥~±¾'); +@define('SORT_ORDER', '±Æ§Ç'); +@define('SORT_ORDER_NAME', 'ÀɮצWºÙ'); +@define('SORT_ORDER_EXTENSION', '°ÆÀɦW'); +@define('SORT_ORDER_SIZE', 'Àɮפj¤p'); +@define('SORT_ORDER_WIDTH', '¹Ï¤ù¼e«×'); +@define('SORT_ORDER_HEIGHT', '¹Ï¤ùªø«×'); +@define('SORT_ORDER_DATE', '¤W¶Ç¤é´Á'); +@define('SORT_ORDER_ASC', '»¼¼W±Æ§Ç'); +@define('SORT_ORDER_DESC', '»¼´î±Æ§Ç'); +@define('THUMBNAIL_SHORT', 'ÁY¹Ï'); +@define('ORIGINAL_SHORT', '­ì©l'); +@define('APPLY_MARKUP_TO', '®M¥Î¼Ð°O¨ì %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', '¤@¶gªº²Ä¤@¤Ñ'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity °»´ú¨ì±zªº°t¸mª©¥»¬O %s, ¦ý¬O Serendipity ¥»¨­ªº¦w¸Ëª©¥»¬O %s, ½Ð§ó·s±zªºµ{¦¡ª©¥»! §ó·s'); +@define('SERENDIPITY_UPGRADER_WELCOME', '±z¦n, Åwªï¨Ó¨ì Serendipity ªº§ó·s¨t²Î.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', '§ó·s¨t²Î·|À°±z§ó·s¨ì Serendipity ª©¥» %s.'); +@define('SERENDIPITY_UPGRADER_WHY', '±z¬Ý¨ì³o­Ó°T®§¬O¦]¬°±z¦w¸Ë¤F Serendipity ª©¥» %s, ¦ý¬O±z¨S¦³§ó·s¸ê®Æ®w'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', '¸ê®Æ®w§ó·s (%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', '¨t²Î§ä¨ì¥H¤Uªº .sql ÀÉ, ¨º¨ÇÀÉ®×¥²¶·¥ý°õ¦æ¤~¯àÄ~Äò¦w¸Ë Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', '¯S©wªºª©¥»¥ô°È'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', '¨S¦³¯S©wªºª©¥»¥ô°È'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', '½T©w­n°õ¦æ¤W­±ªº¥ô°È¶Ü?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', '§Ú¦Û¤v°õ¦æ'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', '½ÐÀ°§Ú°õ¦æ'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', '±z¤£»Ý­n¶i¦æ¥ô¦ó§ó·s'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', '°²¸Ë Serendipity §ó·s§¹¦¨§a'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', '±z²¤¹L¤F§ó·s¥ô°È, ½Ð½T©w¸ê®Æ®w¤w¦w¸Ë§¹¦¨, ©M¨ä¥Lªº¥ô°È¦w¸ËµL»~'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', '±zªº Serendipity ¥H§ó·s¦Üª©¥» %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', '±z¥i¥HÂI %s³o¸Ì%s ªð¦^¤é°O­º­¶'); +@define('MANAGE_USERS', 'ºÞ²z§@ªÌ'); +@define('CREATE_NEW_USER', '·s¼W§@ªÌ'); +@define('CREATE_NOT_AUTHORIZED', '±z¤£¯à­×§ï¸ò±z¬Û¦PÅv­­ªº§@ªÌ'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', '±z¤£¯à·s¼W¤ñ±z°ªÅv­­ªº§@ªÌ'); +@define('CREATED_USER', '·s§@ªÌ %s ¤w¸g·s¼W'); +@define('MODIFIED_USER', '§@ªÌ %s ªº¸ê®Æ¤w¸g§ó§ï'); +@define('USER_LEVEL', '§@ªÌÅv­­'); +@define('DELETE_USER', '±z­n§R°£³o­Ó§@ªÌ #%d %s. ½T©w¶Ü? ³o·|¦b¥D­¶ÁôÂÃ¥L©Ò¼gªº¥ô¦ó¤å³¹.'); +@define('DELETED_USER', '§@ªÌ #%d %s ¤w³Q§R°£.'); +@define('LIMIT_TO_NUMBER', '­nÅã¥Ü¦h¤Ö¶µ¥Ø?'); +@define('ENTRIES_PER_PAGE', '¨C­¶Åã¥Üªº¤å³¹'); +@define('XML_IMAGE_TO_DISPLAY', 'XML «ö¶s'); +@define('XML_IMAGE_TO_DISPLAY_DESC','³sµ²¨ì XML Feeds ªº³£·|¥Î³o­Ó¹Ï¤ùªí¥Ü. ¤£¶ñ¼g±N·|¨Ï¥Î¹w³]ªº¹Ï¤ù, ©Î¿é¤J \'none\' Ãö³¬³o­Ó¥\¯à.'); + +@define('DIRECTORIES_AVAILABLE', '±z¥i¥H¦b¤l¥Ø¿ý¤ºÂI¥ô¦ó¥Ø¿ý¨Ó«Ø¥ß·sªº¥Ø¿ý.'); +@define('ALL_DIRECTORIES', '¥þ³¡¥Øºñ'); +@define('MANAGE_DIRECTORIES', 'ºÞ²z¥Ø¿ý'); +@define('DIRECTORY_CREATED', '¥Ø¿ý %s ¤w¸g·s¼W.'); +@define('PARENT_DIRECTORY', '¥À¥Ø¿ý'); +@define('CONFIRM_DELETE_DIRECTORY', '½T©w­n§R°£³o­Ó¥Ø¿ý¤ºªº¥þ³¡¤º®e¶Ü %s?'); +@define('ERROR_NO_DIRECTORY', '¿ù»~: ¥Ø¿ý %s ¤£¦s¦b'); +@define('CHECKING_DIRECTORY', 'Àˬd¦¹¥Ø¿ýªºÀÉ®× %s'); +@define('DELETING_FILE', '§R°£ÀÉ®× %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', '¤£¯à²¾°£¥¼²MªÅªº¥Ø¿ý. ¤Ä¿ï "±j¨î§R°£" ®Ö¨ú¤è¶ô¦pªG±z­n²¾°£³o¨ÇÀÉ®×, µM«á¦bÄ~Äò. ¦s¦bªºÀɮ׬O:'); +@define('DIRECTORY_DELETE_FAILED', '¤£¯à§R°£¥Ø¿ý %s. ½ÐÀˬdÅv­­©Î¬Ý¤W­±ªº°T®§.'); +@define('DIRECTORY_DELETE_SUCCESS', '¥Ø¿ý %s ¦¨¥\§R°£.'); +@define('SKIPPING_FILE_EXTENSION', '²¤¹LÀÉ®×: ¨S¦³ %s ªº°ÆÀɦW.'); +@define('SKIPPING_FILE_UNREADABLE', '²¤¹LÀÉ®×: %s ¤£¯àŪ¨ú.'); +@define('FOUND_FILE', '§ä¨ì ·s/­×§ï ¹LªºÀÉ®×: %s.'); +@define('ALREADY_SUBCATEGORY', '%s ¤w¸g¬O¦¹Ãþ§Oªº¤lÃþ§O %s.'); +@define('PARENT_CATEGORY', '¥ÀÃþ§O'); +@define('IN_REPLY_TO', '¦^ÂШì'); +@define('TOP_LEVEL', '³Ì°ª¼h'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'Åv­­'); +@define('SETTINGS_SAVED_AT', '·s³]©w¤w¸g³QÀx¦s¨ì %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', '¸ê®Æ®w³]©w'); +@define('INSTALL_CAT_DB_DESC', '±z¥i¥H¦b³o¿é¤J¥þ³¡ªº¸ê®Æ®w¸ê®Æ. Serendipity »Ý­n³o¨Ç¸ê®Æ¤~¯à¥¿±`¹B§@'); +@define('INSTALL_DBTYPE', '¸ê®Æ®wÃþ«¬'); +@define('INSTALL_DBTYPE_DESC', '¸ê®Æ®wÃþ«¬'); +@define('INSTALL_DBHOST', '¸ê®Æ®w¥D¾÷'); +@define('INSTALL_DBHOST_DESC', '¸ê®Æ®w¥D¾÷¦WºÙ'); +@define('INSTALL_DBUSER', '¸ê®Æ®w±b¸¹'); +@define('INSTALL_DBUSER_DESC', 'µn¤J¸ê®Æ®wªº±b¸¹'); +@define('INSTALL_DBPASS', '¸ê®Æ®w±K½X'); +@define('INSTALL_DBPASS_DESC', '±zªº¸ê®Æ®w±K½X'); +@define('INSTALL_DBNAME', '¸ê®Æ®w¦WºÙ'); +@define('INSTALL_DBNAME_DESC', '¸ê®Æ®w¦WºÙ'); +@define('INSTALL_DBPREFIX', '¸ê®Æªí«e¸m¦WºÙ'); +@define('INSTALL_DBPREFIX_DESC', '¸ê®Æªíªº«e¸m¦WºÙ, ¨Ò¦p serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', '¸ô®|³]©w'); +@define('INSTALL_CAT_PATHS_DESC', 'µ¹ÀÉ®×§¨ªº¸ô®|. ¤£­n§Ñ¤F³Ì«áªº±×½u!'); +@define('INSTALL_FULLPATH', '§¹¥þ¸ô®|'); +@define('INSTALL_FULLPATH_DESC', '±zªº Serendipity ¦w¸Ëªº§¹¥þ¸ô®|©Mµ´¹ï¸ô®|'); +@define('INSTALL_UPLOADPATH', '¤W¶Ç¸ô®|'); +@define('INSTALL_UPLOADPATH_DESC', '¥þ³¡ªº¤W¶ÇÀÉ®×·|¦s¨ì³o¸Ì, ¥H \'§¹¥þ¸ô®|\' ªí¥Üªº¬Û¹ï¸ô®| - ¨Ò¦p \'uploads/\''); +@define('INSTALL_RELPATH', '¬Û¹ï¸ô®|'); +@define('INSTALL_RELPATH_DESC', 'µ¹ÂsÄý¾¹ªº¸ô®|, ¨Ò¦p \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', '¬Û¹ïªº§G´º¸ô®|'); +@define('INSTALL_RELTEMPLPATH_DESC', '±z©ñ§G´ºªº¸ô®| - ¥H \'¬Û¹ï¸ô®|\' ªí¥Üªº¬Û¹ï¸ô®|'); +@define('INSTALL_RELUPLOADPATH', '¬Û¹ïªº¤W¶Ç¸ô®|'); +@define('INSTALL_RELUPLOADPATH_DESC', 'µ¹ÂsÄý¾¹¤W¶ÇÀɮתº¸ô®| - ¥H \'¬Û¹ï¸ô®|\' ªí¥Üªº¬Û¹ï¸ô®|'); +@define('INSTALL_URL', 'ºô¸ô¤é°O URL'); +@define('INSTALL_URL_DESC', '±zªº Serendipity ¦w¸Ëªº°ò¥» URL'); +@define('INSTALL_INDEXFILE', 'Index ÀÉ®×'); +@define('INSTALL_INDEXFILE_DESC', 'Serendipity ªº index ÀÉ®×'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', '¤@¯ë³]©w'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Serendipity ªº¤@¯ë³]©w'); +@define('INSTALL_USERNAME', 'ºÞ²z­û±b¸¹'); +@define('INSTALL_USERNAME_DESC', 'ºÞ²z­ûªºµn¤J¦WºÙ'); +@define('INSTALL_PASSWORD', 'ºÞ²z­û±K½X'); +@define('INSTALL_PASSWORD_DESC', 'ºÞ²z­ûªºµn¤J±K½X'); +@define('INSTALL_EMAIL', '¹q¤l¶l¥ó'); +@define('INSTALL_EMAIL_DESC', 'ºÞ²z­ûªº¹q¤l¶l¥ó'); +@define('INSTALL_SENDMAIL', '±H°e¹q¤l¶l¥óµ¹ºÞ²z­û?'); +@define('INSTALL_SENDMAIL_DESC', '·í¦³¤Hµo§G°jÅT¨ì±zªº¤å³¹®É­n¦¬¨ì¹q¤l¶l¥ó³qª¾¶Ü?'); +@define('INSTALL_SUBSCRIBE', '¤¹³\¨Ï¥ÎªÌ­q¾\¤å³¹?'); +@define('INSTALL_SUBSCRIBE_DESC', '±z¥i¥H¤¹³\¨Ï¥ÎªÌ¦¬¨ì¹q¤l¶l¥ó³qª¾, ·í¦³°jÅTµo§G®É¦o­Ì·|¦¬¨ì³qª¾.'); +@define('INSTALL_BLOGNAME', '¤é°O¦WºÙ'); +@define('INSTALL_BLOGNAME_DESC', '±zªº¤é°O¼ÐÃD'); +@define('INSTALL_BLOGDESC', '¤é°O²¤¶'); +@define('INSTALL_BLOGDESC_DESC', '¤¶²Ð±zªº¤é°O'); +@define('INSTALL_LANG', '»y¨t'); +@define('INSTALL_LANG_DESC', '±z¤é°O¨Ï¥Îªº»y¨t'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', '¥~Æ[¤Î¿ï¶µ³]©w'); +@define('INSTALL_CAT_DISPLAY_DESC', 'Åý±z³]©w Serendipity ªº¥~Æ[©M¨ä¥L³]©w'); +@define('INSTALL_WYSIWYG', '¨Ï¥Î WYSIWYG ½s¿è¾¹'); +@define('INSTALL_WYSIWYG_DESC', '±z­n¨Ï¥Î WYSIWYG ½s¿è¾¹¶Ü? (¥i¦b IE5+ ¨Ï¥Î, ¬Y¨Ç³¡¤À¥i¨Ï¥Î©ó Mozilla 1.3+)'); +@define('INSTALL_XHTML11', '±j¨î²Å¦X XHTML 1.1 ­n¨D'); +@define('INSTALL_XHTML11_DESC', '±z¥i¥HÅý±zªº¤é°O±j¨î²Å¦X XHTML 1.1 ªº­n¨D (¹ïªºÂsÄý¾¹¥i¯à·|¦³ «á¥x/«e¥x ªº°ÝÃD)'); +@define('INSTALL_POPUP', '¨Ï¥Î¼u¥Xµøµ¡'); +@define('INSTALL_POPUP_DESC', '±z­n¦b°jÅT, ¤Þ¥Îµ¥¦a¤è¨Ï¥Î¼u¥Xµøµ¡¶Ü?'); +@define('INSTALL_EMBED', '¨Ï¥Î¤º´O¥\¯à?'); +@define('INSTALL_EMBED_DESC', '¦pªG§A­n±N Serendipity ¥H¤º´Oªº¤è¦¡©ñ¨ìºô­¶¤º, ¿ï¾Ü ¬O ·|Åý±z±Ë±ó¥ô¦ó¼ÐÃDµM«á¥uÅã¥Ü¤é°O¤º®e. ±z¥i¥H¥Î indexFile ³]©w¨Ó¨Ï¥Î¥]¸Ë¨ç¦¡Ãþ§O¥H«K±z©ñ¤Jºô­¶¼ÐÃD. ¸Ô±¡½Ð¬d¸ß README ÀÉ®×!'); +@define('INSTALL_TOP_AS_LINKS', '¥H³sµ²Åã¥Ü ¥D­n¥X·½/¥D­n¨Ó·½?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"§_": ¥X·½©M¨Ó·½±N¥Î¤å¦rÅã¥Ü¥HÁ×§K google ªº¼s§i. "¬O": ¥X·½©M¨Ó·½±N¥Î³sµ²Åã¥Ü. "¹w³]": ¥Î¥þ°Ï¸Ì­±ªº³]©w («ØÄ³).'); +@define('INSTALL_BLOCKREF', 'ªý¾×¨Ó·½'); +@define('INSTALL_BLOCKREF_DESC', '¦³¥ô¦ó¯S®íªº¥D¾÷±z¤£·Q¦b¨Ó·½¸ÌÅã¥Ü¶Ü? ¥Î \';\' ¨Ó¤À¶}¥D¾÷¦WºÙ, ª`·N¥D¾÷¬O¥H¤l¦r¦ê¤è¦¡ªý¾×!'); +@define('INSTALL_REWRITE', 'URL Rewriting'); +@define('INSTALL_REWRITE_DESC', '½Ð¿ï¾Ü±z·Q¥Îªº URL Rewriting ¤è¦¡. ¶}±Ò rewrite ³W«h·|¥H¤ñ¸û²M·¡ªº¤è¦¡Åã¥Ü URL, ¥H«K·j´Mºô¯¸¯à¥¿½Tªºµn¤J±zªº¤å³¹. ±zªº¥D¾÷¥²¶·¤ä´© mod_rewrite ©Î "AllowOverride All" ¨ì±zªº Serendipity ÀÉ®×§¨. ¹w³]ªº³]©w¬O¨t²Î¦Û°ÊÀ°±z°»´úªº'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', '¹Ï¤ùÂà´«³]©w'); +@define('INSTALL_CAT_IMAGECONV_DESC', '½Ð³]©w Serendipity ³]©w¹Ï¤ùÂà´«ªº¤è¦¡'); +@define('INSTALL_IMAGEMAGICK', '¨Ï¥Î Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', '¦pªG¦³¦w¸Ë image magick, ±z­n¥Î¥¦¨Ó§ïÅܹϤù¤j¤p¶Ü?'); +@define('INSTALL_IMAGEMAGICKPATH', 'Âà´«µ{¦¡¸ô®|'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'image magick Âà´«µ{¦¡ªº§¹¥þ¸ô®|©M¦WºÙ'); +@define('INSTALL_THUMBSUFFIX', 'ÁY¹Ï«á¸m¦r¤¸'); +@define('INSTALL_THUMBSUFFIX_DESC', 'ÁY¹Ï·|¥H¤U­±ªº®æ¦¡­«·s©R¦W: original.[«á¸m¦r¤¸].ext'); +@define('INSTALL_THUMBWIDTH', 'ÁY¹Ï¤Ø«×'); +@define('INSTALL_THUMBWIDTH_DESC', '¦Û°Ê«Ø¥ßÁY¹Ïªº³Ì¤j¼e«×'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', '­Ó¤H¸ê®Æ³]©w'); +@define('USERCONF_CAT_PERSONAL_DESC', '§ïÅܱzªº­Ó¤H¸ê®Æ'); +@define('USERCONF_USERNAME', '±zªº±b¸¹'); +@define('USERCONF_USERNAME_DESC', '±zµn¤Jºô¸ô¤é°Oªº¦WºÙ'); +@define('USERCONF_PASSWORD', '±zªº±K½X'); +@define('USERCONF_PASSWORD_DESC', '±zµn¤Jºô¸ô¤é°Oªº±K½X'); +@define('USERCONF_EMAIL', '±zªº¹q¤l¶l¥ó'); +@define('USERCONF_EMAIL_DESC', '±z¨Ï¥Îªº¹q¤l¶l¥ó'); +@define('USERCONF_SENDCOMMENTS', '±H°e°jÅT³qª¾?'); +@define('USERCONF_SENDCOMMENTS_DESC', '·í¦³·s°jÅT¨ì±zªº¤å³¹®É­n³qª¾±z¶Ü?'); +@define('USERCONF_SENDTRACKBACKS', '±H°e¤Þ¥Î³qª¾?'); +@define('USERCONF_SENDTRACKBACKS_DESC', '·í¦³·s¤Þ¥Î¨ì±zªº¤å³¹®É­n³qª¾±z¶Ü?'); +@define('USERCONF_ALLOWPUBLISH', 'Åv­­: ¥iµo§G¤å³¹?'); +@define('USERCONF_ALLOWPUBLISH_DESC', '¤¹³\³o¦ì§@ªÌµo§G¤å³¹¶Ü?'); +@define('SUCCESS', '§¹¦¨'); +@define('POWERED_BY_SHOW_TEXT', '¥H¤å¦rÅã¥Ü "Serendipity"'); +@define('POWERED_BY_SHOW_TEXT_DESC', '±N¥Î¤å¦rÅã¥Ü "Serendipity Weblog"'); +@define('POWERED_BY_SHOW_IMAGE', '¥H logo Åã¥Ü "Serendipity"'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'Åã¥Ü Serendipity ªº logo'); +@define('PLUGIN_ITEM_DISPLAY', '¸Ó¶µ¥ØªºÅã¥Ü¦ì§}?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', '¥u¦b°Æ¤º®eÅã¥Ü'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', '¥u¦b·§Æ[¤ºÅã¥Ü'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', '¥Ã»·Åã¥Ü'); + +@define('COMMENTS_WILL_BE_MODERATED', 'µo§Gªº°jÅT±N»Ý­nºÞ²z­ûªº¼f®Ö.'); +@define('YOU_HAVE_THESE_OPTIONS', '±z¦³¥H¤U¿ï¾Ü:'); +@define('THIS_COMMENT_NEEDS_REVIEW', 'ĵ§i: ³o­Ó°jÅT¶·¼f®Ö¤~·|Åã¥Ü'); +@define('DELETE_COMMENT', '§R°£°jÅT'); +@define('APPROVE_COMMENT', '»{¥i°jÅT'); +@define('REQUIRES_REVIEW', '»Ý­n¼f®Ö'); +@define('COMMENT_APPROVED', '°jÅT #%s ¤w¸g³q¹L¼f®Ö'); +@define('COMMENT_DELETED', '°jÅT #%s ¤w¸g¦¨¥\§R°£'); +@define('COMMENTS_MODERATE', '°jÅT©M¤Þ¥Î¨ì³o­Ó¤å³¹»Ý­nºÞ²z­ûªº¼f®Ö'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', 'ĵ§i: ³o­Ó¤Þ¥Î»Ý­nºÞ²z­ûªº¼f®Ö¤~·|Åã¥Ü'); +@define('DELETE_TRACKBACK', '§R°£¤Þ¥Î'); +@define('APPROVE_TRACKBACK', '»{¥i¤Þ¥Î'); +@define('TRACKBACK_APPROVED', '¤Þ¥Î #%s ¤w¸g³q¹L¼f®Ö'); +@define('TRACKBACK_DELETED', '¤Þ¥Î #%s ¤w¸g¦¨¥\§R°£'); +@define('VIEW', 'ÂsÄý'); +@define('COMMENT_ALREADY_APPROVED', '°jÅT #%s ¤w¸g³q¹L¼f®Ö'); +@define('COMMENT_EDITED', '¤å³¹¤w³Q½s¿è'); +@define('HIDE', 'ÁôÂÃ'); +@define('VIEW_EXTENDED_ENTRY', 'Ä~Äò¾\Ū "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', '³o­Ó³sµ²¤£¬O¥Î¨ÓÂIªº. ¥¦¥]§t¤F³o­Ó¤å³¹ªº¤Þ¥Î URI. ±z¥i¥H±q±zªº¤é°O¤º¥Î³o­Ó URI ¨Ó¶Ç°e ping ©M¤Þ¥Î¨ì³o­Ó¤å³¹. ¦pªG­n½Æ»s³o­Ó³sµ², ¦b³sµ²¤WÂI¥kÁäµM«á¿ï¾Ü "½Æ»s³sµ²" (IE) ©Î "½Æ»s³sµ²¦ì§}" (Mozilla).'); +@define('PLUGIN_SUPERUSER_HTTPS', '¥Î https µn¤J'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'Åýµn¤J³sµ²³s¨ì https ºô§}. ±zªº¥D¾÷¥²¶·¤ä´©³o¶µ¥\¯à!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'Åý¥~¨Ó³sµ²¥H³sµ²Åã¥Ü?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"§_": ¥~¨Ó³sµ² (¥D­n¥X·½, ¥D­n¨Ó·½, °jÅT) ³£¤£·|¥H¤å¦rÅã¥Ü¥HÁ×§K google ¼s§i («ØÄ³¨Ï¥Î). "¬O": ¥~¨Ó³sµ²±N¥H¶W³sµ²ªº¤è¦¡Åã¥Ü. ¥i¥H¦b°¼¦C¥~±¾»\¹L¦¹³]©w!'); +@define('PAGE_BROWSE_COMMENTS', '­¶¼Æ %s ¦@ %s, Á`¦@ %s ­Ó°jÅT'); +@define('FILTERS', '¹LÂo'); +@define('FIND_ENTRIES', '·j´M¤å³¹'); +@define('FIND_COMMENTS', '·j´M°jÅT'); +@define('FIND_MEDIA', '·j´M´CÅé'); +@define('FILTER_DIRECTORY', '¥Ø¿ý'); +@define('SORT_BY', '±Æ§Ç'); +@define('TRACKBACK_COULD_NOT_CONNECT', '¨S¦³°e¥X¤Þ¥Î: µLªk¶}±Ò½u¸ô¨ì %s ¥Î³s±µ°ð %d'); +@define('MEDIA', '´CÅé'); +@define('MEDIA_LIBRARY', '´CÅé¦s®w'); +@define('ADD_MEDIA', '·s¼W´CÅé'); +@define('ENTER_MEDIA_URL', '½Ð¿é¤JÀɮתº URL:'); +@define('ENTER_MEDIA_UPLOAD', '½Ð¿ï¾Ü­n¤W¶ÇªºÀÉ®×:'); +@define('SAVE_FILE_AS', 'Àx¦sÀÉ®×:'); +@define('STORE_IN_DIRECTORY', 'Àx¦s¨ì¥H¤U¥Ø¿ý: '); +@define('ADD_MEDIA_BLAHBLAH', '·s¼WÀɮרì´CÅé¦s®w:

±z¥i¥H¦b³o¤W¶Ç´CÅéÀÉ, ©Î§i¶D¨t²Î¨ì­þ´M§ä! ¦pªG±z¨S¦³·Q­nªº¹Ï¤ù, ±z¥i¥H¨ì google´M§ä¹Ï¤ù.

¿ï¾Ü¤è¦¡:
'); +@define('MEDIA_RENAME', '§ó§ïÀɮצWºÙ'); +@define('IMAGE_RESIZE', '§ó§ï¹Ï¤ù¤Ø¤o'); +@define('MEDIA_DELETE', '§R°£³o­ÓÀÉ®×'); +@define('FILES_PER_PAGE', '¨C­¶Åã¥ÜªºÀÉ®×¼Æ'); +@define('CLICK_FILE_TO_INSERT', 'ÂI¿ï±z­n¿é¤JªºÀÉ®×:'); +@define('SELECT_FILE', '¿ï¾Ü­n¿é¤JªºÀÉ®×'); +@define('MEDIA_FULLSIZE', '§¹¾ã¤Ø¤o'); +@define('CALENDAR_BOW_DESC', '¤@­Ó§«ôªº²Ä¤@¤Ñ. ¹w³]¬O¬P´Á¤@'); +@define('SUPERUSER', '¤é°OºÞ²z'); +@define('ALLOWS_YOU_BLAHBLAH', '¦b°¼¦C´£¨Ñ³sµ²¨ì¤é°OºÞ²z'); +@define('CALENDAR', '¤é¾ä'); +@define('SUPERUSER_OPEN_ADMIN', '¶}±ÒºÞ²z­¶­±'); +@define('SUPERUSER_OPEN_LOGIN', '¶}±Òµn¤J­¶­±'); +@define('INVERT_SELECTIONS', 'ÄA­Ë¤Ä¿ï'); +@define('COMMENTS_DELETE_CONFIRM', '½T©w­n§R°£¤Ä¿ïªº°jÅT¶Ü?'); +@define('COMMENT_DELETE_CONFIRM', '½T©w­n§R°£°jÅT #%d, µo§GªÌ¬O %s?'); +@define('DELETE_SELECTED_COMMENTS', '§R°£¤Ä¿ïªº°jÅT'); +@define('VIEW_COMMENT', 'ÂsÄý°jÅT'); +@define('VIEW_ENTRY', 'ÂsÄý¤å³¹'); +@define('DELETE_FILE_FAIL' , 'µLªk§R°£ÀÉ®× %s'); +@define('DELETE_THUMBNAIL', '§R°£¤F¹Ï¤ùÁY¹Ï %s'); +@define('DELETE_FILE', '§R°£¤FÀÉ®× %s'); +@define('ABOUT_TO_DELETE_FILE', '±z±N§R°£ÀÉ®× %s
¦pªG±z¦³¦b¨ä¥Lªº¤å³¹¤º¨Ï¥Î³o­ÓÀÉ®×, ¨º­Ó³sµ²©Î¹Ï¤ù±N·|µL®Ä
½T©w­nÄ~Äò¶Ü?

'); +@define('TRACKBACK_SENDING', '¶Ç°e¤Þ¥Î¨ì URI %s...'); +@define('TRACKBACK_SENT', '¤Þ¥Î§¹¦¨'); +@define('TRACKBACK_FAILED', '¤Þ¥Î¿ù»~: %s'); +@define('TRACKBACK_NOT_FOUND', '§ä¤£¨ì¤Þ¥ÎªºURI.'); +@define('TRACKBACK_URI_MISMATCH', '¦Û°Ê·j´Mªº¤Þ¥Î¸ò¤Þ¥Î¥Ø¼Ð¤£¬Û¦P.'); +@define('TRACKBACK_CHECKING', '·j´M %s ªº¤Þ¥Î...'); +@define('TRACKBACK_NO_DATA', '¥Ø¼Ð¨S¦³¥ô¦ó¸ê®Æ'); +@define('TRACKBACK_SIZE', '¥Ø¼Ð URI ¶W¥X¤F¤¹³\ªº %s bytes Àɮפj¤p.'); +@define('COMMENTS_VIEWMODE_THREADED', '¤À½uµ{'); +@define('COMMENTS_VIEWMODE_LINEAR', 'ª½½uµ{'); +@define('DISPLAY_COMMENTS_AS', '°jÅTÅã¥Ü¤è¦¡'); +@define('COMMENTS_FILTER_SHOW', 'Åã¥Ü'); +@define('COMMENTS_FILTER_ALL', '¥þ³¡'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'Åã¥Ü¼f®Ö°jÅT'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'Åã¥Üµ¥«Ý¼f®Ö'); +@define('RSS_IMPORT_BODYONLY', '±N¿é¤Jªº¤å¦r©ñ¨ì¥D¤º®e, ±N¤£©î¶}¹Lªøªº¤å³¹¨ì°Æ¤º®e¦a°Ï.'); +@define('SYNDICATION_PLUGIN_FULLFEED', '¦b RSS feed ¸ÌÅã¥Ü¥þ³¡ªº¤å³¹'); +@define('WEEK', '¶g'); +@define('WEEKS', '¶g'); +@define('MONTHS', '¤ë'); +@define('DAYS', '¤é'); +@define('ARCHIVE_FREQUENCY', '«O¦s¤å®wªº¶µ¥ØÀW²v'); +@define('ARCHIVE_FREQUENCY_DESC', '«O¦s¤å®w¨Ï¥Îªº¶µ¥Ø²M³æ¶¡¹j'); +@define('ARCHIVE_COUNT', '«O¦s¤å®wªº¶µ¥Ø¼Æ'); +@define('ARCHIVE_COUNT_DESC', 'Åã¥Üªº¤ë, ¶g, ©Î¤é'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', '¤U­±¬O¦w¸Ë¦nªº¥~±¾'); +@define('SIDEBAR_PLUGIN', '°¼¦C¥~±¾'); +@define('EVENT_PLUGIN', '¨Æ¥ó¥~±¾'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'ÂI³o¸Ì¦w¸Ë·s %s'); +@define('VERSION', 'ª©¥»'); +@define('INSTALL', '¦w¸Ë'); +@define('ALREADY_INSTALLED', '¤w¸g¦w¸Ë'); +@define('SELECT_A_PLUGIN_TO_ADD', '½Ð¿ï¾Ü­n¦w¸Ëªº¥~±¾'); +@define('RSS_IMPORT_CATEGORY', '¥Î³o­ÓÃþ§Oµ¹¤£¬Û¦Pªº¿é¤J¤å³¹'); + +@define('INSTALL_OFFSET', '¥D¾÷®É°Ï'); +@define('STICKY_POSTINGS', '³»¸m¤å³¹'); +@define('INSTALL_FETCHLIMIT', '¦b¥D­¶Åã¥Üªº¤å³¹'); +@define('INSTALL_FETCHLIMIT_DESC', '¥D­¶Åã¥Üªº¤å³¹¼Æ'); +@define('IMPORT_ENTRIES', '¿é¤J¸ê®Æ'); +@define('EXPORT_ENTRIES', '¿é¥X¸ê®Æ'); +@define('IMPORT_WELCOME', 'Åwªï¨Ó¨ì Serendipity ªº¿é¤J¤u¨ã'); +@define('IMPORT_WHAT_CAN', '¦b³o¸Ì±z¥i¥H¿é¤J¦b¨ä¥Lºô¸ô¤é°Oµ{¦¡¸Ìªº¤å³¹'); +@define('IMPORT_SELECT', '½Ð¿ï¾Ü¿é¤J¤å³¹ªº¤é°Oµ{¦¡'); +@define('IMPORT_PLEASE_ENTER', '½Ð¿é¤J¸ê®Æ'); +@define('IMPORT_NOW', '¶}©l¿é¤J!'); +@define('IMPORT_STARTING', '¶}©l¿é¤Jµ{§Ç...'); +@define('IMPORT_FAILED', '¿é¤J¥¢±Ñ'); +@define('IMPORT_DONE', '§¹¦¨¿é¤J'); +@define('IMPORT_WEBLOG_APP', '¤é°Oµ{¦¡'); +@define('EXPORT_FEED', '¿é¥X§¹¾ãªº RSS'); +@define('STATUS', '¿é¤J«áªºª¬ºA'); +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); +@define('ACTIVATE_AUTODISCOVERY', '¶Ç°e¦b¤å³¹¤º§ä¨ìªº¤Þ¥Î³sµ²'); +@define('WELCOME_TO_ADMIN', 'Åwªï¨ì Serendipity ºÞ²z¤¶­±.'); +@define('PLEASE_ENTER_CREDENTIALS', '½Ð¿é¤J±zªº¸ê®Æ.'); +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); +@define('INSTALL_USEGZIP', '¨Ï¥Î gzip À£ÁYºô­¶'); +@define('INSTALL_USEGZIP_DESC', '¬°¤F¯àÅýºô­¶§ó§Ö³tªºÅã¥Ü, §Ú­Ì·|±Nºô­¶À£ÁYµM«áÅã¥Ü³X«È, ¦pªG³X«È¨Ï¥ÎªºÂsÄý¾¹¤ä´©À£ÁYºô­¶. «ØÄ³¨Ï¥Î'); +@define('INSTALL_SHOWFUTURE', 'Åã¥Ü¥¼¨Ó¤å³¹'); +@define('INSTALL_SHOWFUTURE_DESC', '¦pªG¶}±Ò, ±zªº¤é°O±N·|Åã¥Ü©Ò¦³ªº¥¼¨Ó¤å³¹. ¹w³]ªº³]©w¬O±N¥¼¨Ó¤å³¹ÁôÂÃ, µM«áµo§G¤é´Á¨ì®É¦Û°ÊÅã¥Ü.'); +@define('INSTALL_DBPERSISTENT', '¨Ï¥Î«ùÄò³s½u'); +@define('INSTALL_DBPERSISTENT_DESC', '¹ï¸ê®Æ®w¨Ï¥Î«ùÄò³s½u, ¸Ô±¡½Ð¨ì ³o¸Ì. ³q±`¨Ã¤£«ØÄ³¨Ï¥Î'); +@define('NO_IMAGES_FOUND', '§ä¤£¨ì¹Ï¤ù'); +@define('PERSONAL_SETTINGS', '­Ó¤H³]©w'); +@define('REFERER', '¨Ó·½'); +@define('NOT_FOUND', '§ä¤£¨ì'); +@define('NOT_WRITABLE', '¤£¥iŪ¼g'); +@define('WRITABLE', '¥iŪ¼g'); +@define('PROBLEM_DIAGNOSTIC', '¦]¬°¤W­±¥X²{ªº°ÝÃD, ±z¥²¶·±N¿ù»~¸Ñ¨M¤~¯àÄ~Äò¦w¸Ë'); +@define('SELECT_INSTALLATION_TYPE', '½Ð¿ï¾Ü¦w¸ËÃþ«¬'); +@define('WELCOME_TO_INSTALLATION', 'Åwªï¨ì Serendipity ¦w¸Ëµ{¦¡'); +@define('FIRST_WE_TAKE_A_LOOK', '­º¥ý¦w¸Ëµ{¦¡·|Àˬd±zªº¥D¾÷³]©w¥HÁ×§K¥X²{¿ù»~'); +@define('ERRORS_ARE_DISPLAYED_IN', '¿ù»~Åã¥Ü %s, «ØÄ³ %s §¹¦¨µL»~ %s'); +@define('RED', '¬õ'); +@define('YELLOW', '¶À'); +@define('GREEN', 'ºñ'); +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s ¦w¸Ë«e³ø§i'); +@define('RECOMMENDED', '«ØÄ³'); +@define('ACTUAL', '¹ê»Ú'); +@define('PHPINI_CONFIGURATION', 'php.ini ³]©w'); +@define('PHP_INSTALLATION', 'PHP ¦w¸Ë'); +@define('THEY_DO', 'they do'); // translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', '²³æ¦w¸Ë'); +@define('EXPERT_INSTALLATION', '±Mªù¦w¸Ë'); +@define('COMPLETE_INSTALLATION', '§¹¾ã¦w¸Ë'); +@define('WONT_INSTALL_DB_AGAIN', '¤£·|­«·s¦w¸Ë¸ê®Æ®w'); +@define('CHECK_DATABASE_EXISTS', 'Àˬd¬O§_¸ê®Æ®w©M¸ê®Æªí¤w¸g¦s¦b'); +@define('CREATING_PRIMARY_AUTHOR', '«Ø¥ß¥D­n§@ªÌ \'%s\''); +@define('SETTING_DEFAULT_TEMPLATE', '³]©w¹w³]§G´º'); +@define('INSTALLING_DEFAULT_PLUGINS', '¦w¸Ë¹w³]¥~±¾'); +@define('SERENDIPITY_INSTALLED', 'Serendipity ¤w§¹¦¨¦w¸Ë'); +@define('VISIT_BLOG_HERE', '°ÑÆ[±zªººô¸ô¤é°O'); +@define('THANK_YOU_FOR_CHOOSING', '·PÁ±z¿ï¾Ü Serendipity'); +@define('ERROR_DETECTED_IN_INSTALL', '¦w¸Ë®Éµo¥Í¿ù»~'); +@define('OPERATING_SYSTEM', '§@·~¨t²Î'); +@define('WEBSERVER_SAPI', '¥D¾÷ SAPI'); +@define('TEMPLATE_SET', '\'%s\' ¤w³Q³]©w¬°±zªº¥D­n§G´º'); +@define('SEARCH_ERROR', '·j´M¥\¯àµo¥Í¿ù»~. §iª¾ºÞ²z­û: µo¥Í³o­Ó¿ù»~¥i¯à¦]¬°¸ê®Æ®w¨S¦³¥¿½Tªº index keys. ¦pªG¨Ï¥Î MySQL, ±zªº±b¸¹¥²¶·¦³¥i°õ¦æ:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
ªºÅv­­. ¸ê®Æ®wÅã¥Üªº¿ù»~¬O:
%s
'); +@define('EDIT_THIS_CAT', '½s¿è "%s"'); +@define('CATEGORY_REMAINING', '§R°£³o­ÓÃþ§OµM«á±N¸Ì­±ªº¤å³¹²¾¨ì³o­ÓÃþ§O'); +@define('CATEGORY_INDEX', '¤U­±¬O¥i²¾°Ê¨ìªºÃþ§O'); +@define('NO_CATEGORIES', '¨S¦³Ãþ§O'); +@define('RESET_DATE', '­«³]¤é´Á'); +@define('RESET_DATE_DESC', 'ÂI³o¸Ì­«³]¤é´Á'); +@define('PROBLEM_PERMISSIONS_HOWTO', 'Åv­­¥i¥H¥Î¤U­±ªº Shell ©R¥O¨Ó°õ¦æ: `%s` µM«á°õ¦æ¦b­n§ïÅv­­ªºÀÉ®×§¨¡A©Î¥Î FTP ³nÅé'); +@define('WARNING_TEMPLATE_DEPRECATED', 'ĵ§i: ±z¥Ø«e¨Ï¥Îªº§G´º¬O¥Îªº¤èªk»s§@¡A½ÐºÉ§Ö§ó·s'); +@define('ENTRY_PUBLISHED_FUTURE', '³o½g¤å³¹ÁÙ¥¼¤½¶}¡C'); +@define('ENTRIES_BY', '§@ªÌ %s'); +@define('PREVIOUS', '¤W¤@­¶'); +@define('NEXT', '¤U¤@­¶'); +@define('APPROVE', '»{¥i'); +@define('DO_MARKUP_DESCRIPTION', '®M¥Î¦Û°Ê®æ¦¡¤Æ¨ì¤å³¹¤º (ªí±¡¹Ï®×, ²Å¸¹ *, /, _, ...)¡CÃö³¬³o¶µ¥\¯à±N·|«O¦s¥ô¦ó¤å³¹¤º¥X²{ªº HTML ½X¡C'); +@define('CATEGORY_ALREADY_EXIST', 'Ãþ§O "%s" ¤w¸g¦s¦b'); +@define('IMPORT_NOTES', 'ª`·N:'); +@define('ERROR_FILE_FORBIDDEN', '±z¤£¯à¤W¶Ç¦¹ÃþÀÉ®×'); +@define('ADMIN', 'ºÞ²z¤¶­±'); +@define('ADMIN_FRONTPAGE', 'ºÞ²z­º­¶'); +@define('QUOTE', '¤Þ¨¥'); +@define('IFRAME_SAVE', 'Serendipity ¥¿¦bÀx¦s±zªº¤å³¹¡A«Ø¥ß¤Þ¥Î©M°õ¦æ XML-RPC calls¡A½Ðµy«Ý..'); +@define('IFRAME_SAVE_DRAFT', '¤å³¹¯ó½Z¤w³QÀx¦s'); +@define('IFRAME_PREVIEW', 'Serendipity ¥¿¦b«Ø¥ß±zªº¹wÄý¤å³¹...'); +@define('IFRAME_WARNING', '±zªºÂsÄý¾¹¤£¤ä´© iframes. ½Ð¥´¶} serendipity_config.inc.php ÀÉ®×µM«á³]©w $serendipity[\'use_iframe\'] ÅÜ¼Æ¦Ü FALSE.'); +@define('NONE', '¨S¦³'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', '·s¤å³¹±N¨Ï¥Î¹w³]³]©w'); +@define('UPGRADE', '§ó·s'); +@define('UPGRADE_TO_VERSION', '§ó·s¦Üª©¥» %s'); +@define('DELETE_DIRECTORY', '§R°£¥Ø¿ý'); +@define('DELETE_DIRECTORY_DESC', '±z±N§R°£¥Ø¿ý¤ºªº´CÅéÀɮסAª`·NÀɮפ]³\¥X²{¦b¨ä¥L¤å³¹¤º¡C'); +@define('FORCE_DELETE', '§R°£¦¹¥Ø¿ý¤ºªºÀɮסA¥]¬A Serendipity µLªkÃѧOªºÀÉ®×'); +@define('CREATE_DIRECTORY', '«Ø¥ß¥Ø¿ý'); +@define('CREATE_NEW_DIRECTORY', '«Ø¥ß·s¥Ø¿ý'); +@define('CREATE_DIRECTORY_DESC', '¦b³o¸Ì±z¥i¥H«Ø¥ß·sªº¥Ø¿ý¨Ó¦s©ñ´CÅéÀɮסC¿é¤J¥Ø¿ý¦WºÙµM«á±z¥i¥H¿ï¾Ü¬O§_±N¥¦©ñ¨ì¥À¥Ø¿ý¤º¡C'); +@define('BASE_DIRECTORY', '°ò¥»¥Ø¿ý'); +@define('USERLEVEL_EDITOR_DESC', '¤@¯ë§@ªÌ'); +@define('USERLEVEL_CHIEF_DESC', '¥D½s'); +@define('USERLEVEL_ADMIN_DESC', 'ºÞ²z­û'); +@define('USERCONF_USERLEVEL', 'Åv­­'); +@define('USERCONF_USERLEVEL_DESC', '³o­Ó¿ï¶µ¥i¥H³]©w¦¹§@ªÌ¦b³o­Óºô»x¤ºªºÅv­­'); +@define('USER_SELF_INFO', 'µn¤J§@ªÌ¬O %s (%s)'); +@define('ADMIN_ENTRIES', '¤å³¹'); +@define('RECHECK_INSTALLATION', '­«·sÀˬd¦w¸Ëµ{§Ç'); +@define('IMAGICK_EXEC_ERROR', 'µLªk°õ¦æ: "%s", ¿ù»~: %s, ¶Ç¦^ÅܼÆ: %d'); +@define('INSTALL_OFFSET_DESC', '¥H¤p®É­pºâ¡A½Ð¿é¤J¥D¾÷ªº®É¶¡ (current: %clock%) ¸ò±zªº®É°Ïªº®É®t'); +@define('UNMET_REQUIREMENTS', '¥¼¹F¨ì»Ý¨D: %s'); +@define('CHARSET', '½s½X'); +@define('AUTOLANG', '¨Ï¥ÎŪªÌªºÂsÄý¾¹¤º³]©wªº»y¨t'); +@define('AUTOLANG_DESC', '¦pªG¶}±Ò¡A³o­Ó¥\¯à±N¨Ï¥ÎŪªÌªºÂsÄý¾¹¤º©Ò³]©wªº»y¨t¡C'); +@define('INSTALL_AUTODETECT_URL', '¦Û°Ê°»´ú HTTP-Host'); +@define('INSTALL_AUTODETECT_URL_DESC', '¦pªG³]©w¬° "true"¡ASerendipity ·|½T©wŪªÌªº HTTP Host ¸ò±zªº°ò¥» URL ³]©w¬Û¦P¡C¶}±Ò³o¶µ¥\¯à¥i¥H¤¹³\±z¨Ï¥Î¦h¼Æªººô°ì¦WºÙµ¹±zªººô»x¡A©M¨Ï¥Î³o­Óºô°ìµ¹¸ò¶iªº³sµ²¡C'); +@define('CONVERT_HTMLENTITIES', '¦Û°Ê§ïÅÜ HTML entities?'); +@define('EMPTY_SETTING', '±z¨S¦³´£¨Ñ "%s" ªº¥¿½T­È!'); +@define('USERCONF_REALNAME', '¥þ¦W'); +@define('USERCONF_REALNAME_DESC', '§@ªÌªº¥þ¦W¡A±NÅã¥Üµ¹¥þ³¡ÅªªÌ'); +@define('HOTLINK_DONE', 'ÀÉ®×µs³s
µ²§ô¡C'); +@define('ENTER_MEDIA_URL_METHOD', '¨ú±o¤èªk:'); +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'ª`·N: ¦pªG±z¿ï¾Üµs³s¤èªk¡A½Ð¥ý±o¨ì¨Ó·½ºô¯¸ªº¤¹³\¡Cµs³s¤¹³\±z¥Î¨ä¥Lºô¯¸ªº¹Ï¤ù¦Ó¤£»Ý±N¹Ï¤ùÀx¦s¦b±zªº¥D¾÷¤º¡C'); +@define('MEDIA_HOTLINKED', 'µs³s¹Ï¤ù'); +@define('FETCH_METHOD_IMAGE', '¤U¸ü¹Ï¤ù¨ì¥D¾÷'); +@define('FETCH_METHOD_HOTLINK', 'µs³s¨ì¥D¾÷'); +@define('DELETE_HOTLINK_FILE', '§R°£µs³sªºÀÉ®× %s'); +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Åã¥Ü¹q¤l¶l¥ó¶Ü?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/lang/serendipity_lang_zh.inc.php b/lang/serendipity_lang_zh.inc.php new file mode 100644 index 0000000..54b6fed --- /dev/null +++ b/lang/serendipity_lang_zh.inc.php @@ -0,0 +1,669 @@ +Íê³É.'); +@define('ERROR_FILE_EXISTS_ALREADY', '´íÎó: µµ°¸ÒÑ´æÔÚ!'); +@define('ERROR_UNKNOWN_NOUPLOAD', 'δ֪µÄ´íÎó·¢Éú, µµ°¸»¹Ã»ÉÏ´«. Ò²ÐíÄãµÄµµ°¸´óì¶ÏÞÖÆµÄ´óС. ÇëѯÎÊÄúµÄ ISP »òÐÞ¸ÄÄúµÄ php.ini µµ.'); +@define('GO', '¼ÌÐø!'); +@define('NEWSIZE', 'дóС: '); +@define('RESIZE_BLAHBLAH', 'ÖØÉè´óС %s

'); +@define('ORIGINAL_SIZE', 'Ô­ÓеĴóС: %sx%s ÏñËØ'); +@define('HERE_YOU_CAN_ENTER_BLAHBLAH', '

ÔÚÕâÀïÄú¿ÉÒÔÐÞ¸ÄͼƬ´óС. Èç¹ûÄúÒªÐ޸ijÉÏàͬµÄͼƬ±ÈÀý, ÄúÖ»ÐèÒªÊäÈëÒ»¸öÊýֵȻºó°´ TAB -- ϵͳ»á×Ô¶¯°ïÄú¼ÆËã±ÈÀýÒÔÃâ³ö´í

'); +@define('QUICKJUMP_CALENDAR', 'ÈÕÀú¿ìËÙÌøÔ¾'); +@define('QUICKSEARCH', '¿ìËÙËÑѰ'); +@define('SEARCH_FOR_ENTRY', 'ËÑѰÎÄÕÂ'); +@define('ARCHIVES', '±£´æÎÄ¿â'); +@define('BROWSE_ARCHIVES', 'ÒÔÔ·Ýä¯ÀÀ±£´æÎÄ¿â'); +@define('TOP_REFERRER', 'Ö÷ÒªÀ´Ô´'); +@define('SHOWS_TOP_SITES', 'ÏÔʾÁ¬½áµ½ÄúµÄÈռǵÄÍøÕ¾'); +@define('TOP_EXITS', 'Ö÷Òª³öÔ´'); +@define('SHOWS_TOP_EXIT', 'ÏÔʾÄúµÄÈռǵÄÖ÷Òª³öÔ´'); +@define('SYNDICATION', 'ÎÄÕÂͬ²½'); +@define('SHOWS_RSS_BLAHBLAH', 'ÏÔʾ RSS ͬ²½Á¬½á'); +@define('ADVERTISES_BLAHBLAH', 'Ðû´«ÄúµÄÍøÂ·ÈÕ¼Ç'); +@define('HTML_NUGGET', 'HTML ѶϢ'); +@define('HOLDS_A_BLAHBLAH', 'ÏÔʾ HTML ѶϢµ½²àÁÐ'); +@define('TITLE_FOR_NUGGET', 'ѶϢµÄ±êÌâ'); +@define('THE_NUGGET', 'HTML ѶϢ!'); +@define('SYNDICATE_THIS_BLOG', 'ͬ²½Õâ¸öÈÕ¼Ç'); +@define('YOU_CHOSE', 'ÄúÑ¡Ôñ %s'); +@define('IMAGE_SIZE', 'ͼƬ´óС'); +@define('IMAGE_AS_A_LINK', 'ÊäÈëͼƬ'); +@define('POWERED_BY', 'Powered by'); +@define('TRACKBACKS', 'ÒýÓÃ'); +@define('TRACKBACK', 'ÒýÓÃ'); +@define('NO_TRACKBACKS', 'ûÓÐÒýÓÃ'); +@define('TOPICS_OF', 'Ö÷Ìâ'); +@define('VIEW_FULL', 'ä¯ÀÀÈ«²¿'); +@define('VIEW_TOPICS', 'ä¯ÀÀÖ÷Ìâ'); +@define('AT', 'ÔÚ'); +@define('SET_AS_TEMPLATE', 'ʹÓò¼¾°'); +@define('IN', 'ÔÚ'); +@define('EXCERPT', 'ÕªÒª'); +@define('TRACKED', 'ÒýÓÃ'); +@define('LINK_TO_ENTRY', 'Á¬½áµ½ÎÄÕÂ'); +@define('LINK_TO_REMOTE_ENTRY', 'Á¬½áµ½Ô¶¶ËÎÄÕÂ'); +@define('IP_ADDRESS', 'IP λַ'); +@define('USER', '×÷Õß'); +@define('THUMBNAIL_USING_OWN', 'ʹÓà %s µ±ËüµÄËõͼ³ß´çÒòΪͼƬÒѾ­ºÜСÁË.'); +@define('THUMBNAIL_FAILED_COPY', 'ʹÓà %s µ±ËüµÄËõͼ, µ«ÊÇÎÞ·¨¸´ÖÆ!'); +@define('AUTHOR', '·¢±íÕß'); +@define('LAST_UPDATED', '×îºó¸üÐÂ'); +@define('TRACKBACK_SPECIFIC', 'ÒýÓôËÎÄÕÂÌØ¶¨µÄ URI (ÍøÖ·)'); +@define('DIRECT_LINK', 'Ö±½ÓµÄÎÄÕÂÁ¬½á'); +@define('COMMENT_ADDED', 'ÄúµÄ»ØÏìÒѳɹ¦ÔöÈë. '); +@define('COMMENT_ADDED_CLICK', 'µã %sÕâÀï·µ»Ø%s µ½»ØÏì, ºÍµã %sÕâÀï¹Ø±Õ%s Õâ¸öÊÓ´°.'); +@define('COMMENT_NOT_ADDED', 'ÄúµÄ»ØÏì²»ÄÜÔöÈëÒòΪ´ËƪÎÄÕ²»ÔÊÐí»ØÏì. '); +@define('COMMENT_NOT_ADDED_CLICK', 'µã %sÕâÀï·µ»Ø%s µ½»ØÏì, ºÍµã %sÕâÀï¹Ø±Õ%s Õâ¸öÊÓ´°.'); +@define('COMMENTS_DISABLE', '²»ÔÊÐí»ØÏìµ½ÕâÆªÎÄÕÂ'); +@define('COMMENTS_ENABLE', 'ÔÊÐí»ØÏìµ½ÕâÆªÎÄÕÂ'); +@define('COMMENTS_CLOSED', '×÷Õß²»ÔÊÐí»ØÏìµ½ÕâÆªÎÄÕÂ'); +@define('EMPTY_COMMENT', 'ÄúµÄ»ØÏìûÓÐÈκÎѶϢ, Çë %s·µ»Ø%s ÖØÊÔ'); +@define('ENTRIES_FOR', 'ÎÄÕ¸ø %s'); +@define('DOCUMENT_NOT_FOUND', 'ÕÒ²»µ½´ËƪÎļþ %s.'); +@define('USERNAME', 'ÕʺÅ'); +@define('PASSWORD', 'ÃÜÂë'); +@define('AUTOMATIC_LOGIN', '×Ô¶¯µÇÈë'); +@define('SERENDIPITY_INSTALLATION', 'Serendipity °²×°³Ìʽ'); +@define('LEFT', '×ó'); +@define('RIGHT', 'ÓÒ'); +@define('HIDDEN', 'Òþ²Ø'); +@define('REMOVE_TICKED_PLUGINS', 'ÒÆ³ý¹´Ñ¡µÄÍâ¹Ò'); +@define('SAVE_CHANGES_TO_LAYOUT', '´¢´æÍâ¹ÛÅäÖÃ'); +@define('COMMENTS_FROM', '»ØÏìÀ´Ô´'); +@define('ERROR', '´íÎó'); +@define('ENTRY_SAVED', 'ÄúµÄÎÄÕÂÒÑ´¢´æ'); +@define('DELETE_SURE', 'È·¶¨ÒªÉ¾³ý #%s Âð?'); +@define('NOT_REALLY', 'ËãÁË...'); +@define('DUMP_IT', 'ɾ³ý°É!'); +@define('RIP_ENTRY', 'R.I.P. ÎÄÕ #%s'); +@define('CATEGORY_DELETED_ARTICLES_MOVED', 'Àà±ð #%s ÒÑɾ³ý. ¾ÉÎÄÕÂÒѱ»Òƶ¯µ½Àà±ð #%s'); +@define('CATEGORY_DELETED', 'Àà±ð #%s ÒÑɾ³ý.'); +@define('INVALID_CATEGORY', 'ûÓÐÌṩɾ³ýµÄÀà±ð'); +@define('CATEGORY_SAVED', 'Àà±ðÒÑ´¢´æ'); +@define('SELECT_TEMPLATE', 'ÇëÑ¡ÔñÍøÂ·ÈռǵIJ¼¾°'); +@define('ENTRIES_NOT_SUCCESSFULLY_INSERTED', 'ûÓÐÍê³ÉÔöÈëÎÄÕÂ!'); +@define('MT_DATA_FILE', 'Movable Type ×ÊÁϵµ'); +@define('FORCE', 'Ç¿ÖÆ'); +@define('CREATE_AUTHOR', 'ÐÂÔö×÷Õß \'%s\'.'); +@define('CREATE_CATEGORY', 'ÐÂÔöÀà±ð \'%s\'.'); +@define('MYSQL_REQUIRED', 'Äú±ØÐëÒªÓÐ MySQL µÄÀ©³ä¹¦ÄܲÅÄÜÖ´ÐÐÕâ¸ö¶¯×÷.'); +@define('COULDNT_CONNECT', '²»ÄÜÁª½áµ½ MySQL ×ÊÁÏ¿â: %s.'); +@define('COULDNT_SELECT_DB', '²»ÄÜÑ¡Ôñ×ÊÁÏ¿â: %s.'); +@define('COULDNT_SELECT_USER_INFO', '²»ÄÜÑ¡ÔñʹÓÃÕßµÄ×ÊÁÏ: %s.'); +@define('COULDNT_SELECT_CATEGORY_INFO', '²»ÄÜÑ¡ÔñÀà±ðµÄ×ÊÁÏ: %s.'); +@define('COULDNT_SELECT_ENTRY_INFO', '²»ÄÜÑ¡ÔñÎÄÕµÄ×ÊÁÏ: %s.'); +@define('COULDNT_SELECT_COMMENT_INFO', '²»ÄÜÑ¡Ôñ»ØÏìµÄ×ÊÁÏ: %s.'); +@define('YES', 'ÊÇ'); +@define('NO', '·ñ'); +@define('USE_DEFAULT', 'Ô¤Éè'); +@define('CHECK_N_SAVE', '´¢´æ'); +@define('DIRECTORY_WRITE_ERROR', '²»ÄܶÁдµµ°¸¼Ð %s. Çë¼ì²éȨÏÞ.'); +@define('DIRECTORY_CREATE_ERROR', 'µµ°¸¼Ð %s ²»´æÔÚÒ²ÎÞ·¨½¨Á¢. Çë×Ô¼º½¨Á¢Õâ¸öµµ°¸¼Ð'); +@define('DIRECTORY_RUN_CMD', ' -> run %s %s'); +@define('CANT_EXECUTE_BINARY', 'ÎÞ·¨Ö´ÐÐ %s ×ÊÔ´µµ°¸'); +@define('FILE_WRITE_ERROR', 'ÎÞ·¨¶Áдµµ°¸ %s.'); +@define('FILE_CREATE_YOURSELF', 'Çë×Ô¼º½¨Á¢Õâ¸öµµ°¸»ò¼ì²éȨÏÞ'); +@define('COPY_CODE_BELOW', '
* Çë¸´ÖÆÏÂÃæµÄ´úÂëÈ»ºó·ÅÈë %s µ½ÄúµÄ %s µµ°¸¼Ð:
%s
' . "\n"); +@define('WWW_USER', 'Çë¸Ä±ä www µ½Ê¹ÓÃÕßµÄ Apache (i.e. nobody).'); +@define('BROWSER_RELOAD', 'Íê³ÉÖ®ºó, ÖØÐÂË¢ÐÂÄúµÄä¯ÀÀÆ÷.'); +@define('DIAGNOSTIC_ERROR', 'ϵͳÕì²âµ½Ò»Ð©´íÎó:'); +@define('SERENDIPITY_NOT_INSTALLED', 'Serendipity »¹Ã»°²×°Íê³É. Çë°´ °²×°.'); +@define('INCLUDE_ERROR', 'serendipity ´íÎó: ÎÞ·¨°üÀ¨ %s - Í˳ö.'); +@define('DATABASE_ERROR', 'serendipity ´íÎó: ÎÞ·¨Á¬½áµ½×ÊÁÏ¿â - Í˳ö.'); +@define('CHECK_DATABASE_EXISTS', '¼ì²é×ÊÁÏ¿âÊÇ·ñ´æÔÚ. Èç¹ûÄú¿´µ½×ÊÁÏ¿â²éѯ´íÎó, Çë²»ÓùÜËü...'); +@define('CREATE_DATABASE', '½¨Á¢Ô¤Éè×ÊÁÏ¿âÉ趨...'); +@define('ATTEMPT_WRITE_FILE', '¶Áд %s µµ°¸...'); +@define('SERENDIPITY_INSTALLED', '%sSerendipity ÒѰ²×°Íê³É.%s Çë¼ÇµÃÄúµÄÃÜÂë: "%s", ÄúµÄÕʺÅÊÇ "%s".%sÄúÏÖÔÚ¿ÉÒÔµ½Ð½¨Á¢µÄ ÍøÂ·ÈÕ¼Ç'); +@define('WRITTEN_N_SAVED', '´¢´æÍê±Ï'); +@define('IMAGE_ALIGNMENT', 'ͼƬ¶ÔÆë'); +@define('ENTER_NEW_NAME', 'ÊäÈëÐÂÃû³Æ¸ø: '); +@define('RESIZING', 'ÖØÉè´óС'); +@define('RESIZE_DONE', 'Íê³É (ÖØÉè %s ¸öͼƬ).'); +@define('SYNCING', '½øÐÐ×ÊÁÏ¿âºÍͼƬµµ°¸¼Ðͬ²½»¯'); +@define('SYNC_DONE', 'Íê³É (ͬ²½ÁË %s ¸öͼƬ).'); +@define('FILE_NOT_FOUND', 'ÕÒ²»µ½µµ°¸Ãû³Æ %s, Ò²ÐíÒѾ­±»É¾³ýÁË?'); +@define('ABORT_NOW', '·ÅÆú'); +@define('REMOTE_FILE_NOT_FOUND', 'µµ°¸²»ÔÚÔ¶¶ËÖ÷»úÄÚ, ÄúÈ·¶¨Õâ¸ö URL: %s ÊÇÕýÈ·µÄÂð?'); +@define('FILE_FETCHED', '%s È¡»ØÎª %s'); +@define('FILE_UPLOADED', 'µµ°¸ %s ÉÏ´«Îª %s'); +@define('WORD_OR', '»ò'); +@define('SCALING_IMAGE', 'Ëõ·Å %s µ½ %s x %s px'); +@define('KEEP_PROPORTIONS', 'ά³Ö±ÈÀý'); +@define('REALLY_SCALE_IMAGE', 'È·¶¨ÒªËõ·ÅͼƬÂð? Õâ¸ö¶¯×÷²»Äܸ´Ô­!'); +@define('TOGGLE_ALL', 'Çл»Õ¹¿ª'); +@define('TOGGLE_OPTION', 'Çл»Ñ¡Ïî'); +@define('SUBSCRIBE_TO_THIS_ENTRY', '¶©ÔÄÕâÆªÎÄÕÂ'); +@define('UNSUBSCRIBE_OK', "%s ÒÑÈ¡Ïû¶©ÔÄÕâÆªÎÄÕÂ"); +@define('NEW_COMMENT_TO_SUBSCRIBED_ENTRY', 'лØÏìµ½¶©ÔĵÄÎÄÕ "%s"'); +@define('SUBSCRIPTION_MAIL', "ÄúºÃ %s,\n\nÄú¶©ÔĵÄÎÄÕÂÓÐÁËÐµĻØÏìÔÚ \"%s\", ±êÌâÊÇ \"%s\"\n»ØÏìµÄ·¢±íÕßÊÇ: %s\n\nÄú¿ÉÒÔÔÚÕâÕÒµ½´ËÎÄÕÂ: %s\n\nÄú¿ÉÒÔµãÕâ¸öÁ¬½áÈ¡Ïû¶©ÔÄ: %s\n"); +@define('SUBSCRIPTION_TRACKBACK_MAIL', "ÄúºÃ %s,\n\nÄú¶©ÔĵÄÎÄÕÂÓÐÁËеÄÒýÓÃÔÚ \"%s\", ±êÌâÊÇ \"%s\"\nÒýÓõÄ×÷ÕßÊÇ: %s\n\nÄú¿ÉÒÔÔÚÕâÕÒµ½´ËÎÄÕÂ: %s\n\nÄú¿ÉÒÔµãÕâ¸öÁ¬½áÈ¡Ïû¶©ÔÄ: %s\n"); +@define('SIGNATURE', "\n-- \n%s is powered by Serendipity.\nThe best blog around, you can use it too.\nCheck out to find out how."); +@define('SYNDICATION_PLUGIN_091', 'RSS 0.91 feed'); +@define('SYNDICATION_PLUGIN_10', 'RSS 1.0 feed'); +@define('SYNDICATION_PLUGIN_20', 'RSS 2.0 feed'); +@define('SYNDICATION_PLUGIN_20c', 'RSS 2.0 comments'); +@define('SYNDICATION_PLUGIN_ATOM03', 'ATOM 0.3 feed'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR', 'À¸Î» "managingEditor"'); +@define('SYNDICATION_PLUGIN_WEBMASTER', 'À¸Î» "webMaster"'); +@define('SYNDICATION_PLUGIN_BANNERURL', 'RSS feed µÄͼƬ'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH', 'ͼƬ¿í¶È'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT', 'ͼƬ¸ß¶È'); +@define('SYNDICATION_PLUGIN_WEBMASTER_DESC', '¹ÜÀíÔ±µÄµç×ÓÓʼþ, Èç¹ûÓÐ. (¿Õ°×: Òþ²Ø) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_MANAGINGEDITOR_DESC', '×÷Õߵĵç×ÓÓʼþ, Èç¹ûÓÐ. (¿Õ°×: Òþ²Ø) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_BANNERURL_DESC', 'ͼƬµÄλַ URL, ÒÔ GIF/JPEG/PNG ¸ñʽ, Èç¹ûÓÐ. (¿Õ°×: serendipity-logo)'); +@define('SYNDICATION_PLUGIN_BANNERWIDTH_DESC', 'ÏñËØ, ×î´ó. 144'); +@define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'ÏñËØ, ×î´ó. 400'); +@define('SYNDICATION_PLUGIN_TTL', 'À¸Î» "ttl" (time-to-live)'); +@define('SYNDICATION_PLUGIN_TTL_DESC', '¹ý¼¸·ÖÖÓºóÄúµÄÎÄÕ²»»á±»ÍâÀ´µÄÍøÕ¾»ò³Ìʽ´¢´æµ½¿ìÈ¡¼ÇÒäÀï (¿Õ°×: Òþ²Ø) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'À¸Î» "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', '"pubDate"-À¸Î»ÐèÒªÄÚǶµ½RSS-ƵµÀ, ÒÔÏÔʾ×îºóÎÄÕµÄÈÕÆÚÂð?'); +@define('CONTENT', 'ÄÚÈÝ'); +@define('TYPE', 'ÀàÐÍ'); +@define('DRAFT', '²Ý¸å'); +@define('PUBLISH', '¹«¿ª'); +@define('PREVIEW', 'Ô¤ÀÀ'); +@define('DATE', 'ÈÕÆÚ'); +@define('DATE_FORMAT_2', 'Y-m-d H:i'); // Needs to be ISO 8601 compliant for date conversion! +@define('DATE_INVALID', '¾¯¸æ: ÄúÌṩµÄÈÕÆÚ²»ÕýÈ·. Ëü±ØÐëÊÇ YYYY-MM-DD HH:MM ¸ñʽ.'); +@define('CATEGORY_PLUGIN_DESC', 'ÏÔʾÀà±ðÇåµ¥.'); +@define('ALL_AUTHORS', 'È«²¿×÷Õß'); +@define('CATEGORIES_TO_FETCH', 'ÏÔʾÀà±ð'); +@define('CATEGORIES_TO_FETCH_DESC', 'ÏÔʾÄÄλ×÷ÕßµÄÀà±ð?'); +@define('PAGE_BROWSE_ENTRIES', 'Ò³Êý %s ¹² %s, ×ܹ² %s ƪÎÄÕÂ'); +@define('PREVIOUS_PAGE', 'ÉÏÒ»Ò³'); +@define('NEXT_PAGE', 'ÏÂÒ»Ò³'); +@define('ALL_CATEGORIES', 'È«²¿Àà±ð'); +@define('DO_MARKUP', 'Ö´Ðбê¼Çת»»'); +@define('GENERAL_PLUGIN_DATEFORMAT', 'ÈÕÆÚ¸ñʽ»¯'); +@define('GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH', 'ÎÄÕµÄÈÕÆÚ¸ñʽ, ʹÓà PHP µÄ strftime() ±äÊý. (Ô¤Éè: "%s")'); +@define('ERROR_TEMPLATE_FILE', 'ÎÞ·¨¿ªÆô²¼¾°µµ°¸, Çë¸üРserendipity!'); +@define('ADVANCED_OPTIONS', '½ø½×Ñ¡Ïî'); +@define('EDIT_ENTRY', '±à¼­ÎÄÕÂ'); +@define('HTACCESS_ERROR', 'Òª¼ì²éÄúµÄÖ÷»ú°²×°É趨, serendipity ÐèÒª¶Áдµµ°¸ ".htaccess". µ«ÊÇÒòΪȨÏÞ´íÎó, ûÓа취ΪÄú¼ì²é. Çë¸Ä±äµµ°¸È¨ÏÞÏñÕâÑù:
  %s
È»ºóÖØÐÂË¢ÐÂÕâ¸öÍøÒ³.'); +@define('SIDEBAR_PLUGINS', '²àÁÐÍâ¹Ò'); +@define('EVENT_PLUGINS', 'ʼþÍâ¹Ò'); +@define('SORT_ORDER', 'ÅÅÐò'); +@define('SORT_ORDER_NAME', 'µµ°¸Ãû³Æ'); +@define('SORT_ORDER_EXTENSION', '¸±µµÃû'); +@define('SORT_ORDER_SIZE', 'µµ°¸´óС'); +@define('SORT_ORDER_WIDTH', 'ͼƬ¿í¶È'); +@define('SORT_ORDER_HEIGHT', 'ͼƬ³¤¶È'); +@define('SORT_ORDER_DATE', 'ÉÏ´«ÈÕÆÚ'); +@define('SORT_ORDER_ASC', 'µÝÔöÅÅÐò'); +@define('SORT_ORDER_DESC', 'µÝ¼õÅÅÐò'); +@define('THUMBNAIL_SHORT', 'Ëõͼ'); +@define('ORIGINAL_SHORT', 'ԭʼ'); +@define('APPLY_MARKUP_TO', 'Ì×Óñê¼Çµ½ %s'); +@define('CALENDAR_BEGINNING_OF_WEEK', 'Ò»ÖܵĵÚÒ»Ìì'); +@define('SERENDIPITY_NEEDS_UPGRADE', 'Serendipity Õì²âµ½ÄúµÄÅäÖð汾ÊÇ %s, µ«ÊÇ Serendipity ±¾ÉíµÄ°²×°°æ±¾ÊÇ %s, Çë¸üÐÂÄúµÄ³Ìʽ°æ±¾! ¸üÐÂ'); +@define('SERENDIPITY_UPGRADER_WELCOME', 'ÄúºÃ, »¶Ó­À´µ½ Serendipity µÄ¸üÐÂϵͳ.'); +@define('SERENDIPITY_UPGRADER_PURPOSE', '¸üÐÂϵͳ»á°ïÄú¸üе½ Serendipity °æ±¾ %s.'); +@define('SERENDIPITY_UPGRADER_WHY', 'Äú¿´µ½Õâ¸öѶϢÊÇÒòΪÄú°²×°ÁË Serendipity °æ±¾ %s, µ«ÊÇÄúûÓиüÐÂ×ÊÁÏ¿â'); +@define('SERENDIPITY_UPGRADER_DATABASE_UPDATES', '×ÊÁÏ¿â¸üР(%s)'); +@define('SERENDIPITY_UPGRADER_FOUND_SQL_FILES', 'ϵͳÕÒµ½ÒÔÏ嵀 .sql µµ, ÄÇЩµµ°¸±ØÐëÏÈÖ´ÐвÅÄܼÌÐø°²×° Serendipity'); +@define('SERENDIPITY_UPGRADER_VERSION_SPECIFIC', 'ÌØ¶¨µÄ°æ±¾ÈÎÎñ'); +@define('SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC', 'ûÓÐÌØ¶¨µÄ°æ±¾ÈÎÎñ'); +@define('SERENDIPITY_UPGRADER_PROCEED_QUESTION', 'È·¶¨ÒªÖ´ÐÐÉÏÃæµÄÈÎÎñÂð?'); +@define('SERENDIPITY_UPGRADER_PROCEED_ABORT', 'ÎÒ×Ô¼ºÖ´ÐÐ'); +@define('SERENDIPITY_UPGRADER_PROCEED_DOIT', 'Çë°ïÎÒÖ´ÐÐ'); +@define('SERENDIPITY_UPGRADER_NO_UPGRADES', 'Äú²»ÐèÒª½øÐÐÈκθüÐÂ'); +@define('SERENDIPITY_UPGRADER_CONSIDER_DONE', '¼Ù×° Serendipity ¸üÐÂÍê³É°É'); +@define('SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED', 'ÄúÂÔ¹ýÁ˸üÐÂÈÎÎñ, ÇëÈ·¶¨×ÊÁÏ¿âÒѰ²×°Íê³É, ºÍÆäËûµÄÈÎÎñ°²×°ÎÞÎó'); +@define('SERENDIPITY_UPGRADER_NOW_UPGRADED', 'ÄúµÄ Serendipity ÒÔ¸üÐÂÖÁ°æ±¾ %s'); +@define('SERENDIPITY_UPGRADER_RETURN_HERE', 'Äú¿ÉÒÔµã %sÕâÀï%s ·µ»ØÈÕ¼ÇÊ×Ò³'); +@define('MANAGE_USERS', '¹ÜÀí×÷Õß'); +@define('CREATE_NEW_USER', 'ÐÂÔö×÷Õß'); +@define('CREATE_NOT_AUTHORIZED', 'Äú²»ÄÜÐ޸ĸúÄúÏàͬȨÏÞµÄ×÷Õß'); +@define('CREATE_NOT_AUTHORIZED_USERLEVEL', 'Äú²»ÄÜÐÂÔö±ÈÄú¸ßȨÏÞµÄ×÷Õß'); +@define('CREATED_USER', 'ÐÂ×÷Õß %s ÒѾ­ÐÂÔö'); +@define('MODIFIED_USER', '×÷Õß %s µÄ×ÊÁÏÒѾ­¸ü¸Ä'); +@define('USER_LEVEL', '×÷ÕßȨÏÞ'); +@define('DELETE_USER', 'ÄúҪɾ³ýÕâ¸ö×÷Õß #%d %s. È·¶¨Âð? Õâ»áÔÚÖ÷Ò³Òþ²ØËûËùдµÄÈκÎÎÄÕÂ.'); +@define('DELETED_USER', '×÷Õß #%d %s Òѱ»É¾³ý.'); +@define('LIMIT_TO_NUMBER', 'ÒªÏÔʾ¶àÉÙÏîÄ¿?'); +@define('ENTRIES_PER_PAGE', 'ÿҳÏÔʾµÄÎÄÕÂ'); +@define('XML_IMAGE_TO_DISPLAY', 'XML °´Å¥'); +@define('XML_IMAGE_TO_DISPLAY_DESC','Á¬½áµ½ XML Feeds µÄ¶¼»áÓÃÕâ¸öͼƬ±íʾ. ²»Ìîд½«»áʹÓÃÔ¤ÉèµÄͼƬ, »òÊäÈë \'none\' ¹Ø±ÕÕâ¸ö¹¦ÄÜ.'); + +@define('DIRECTORIES_AVAILABLE', 'Äú¿ÉÒÔÔÚ×ÓĿ¼ÄÚµãÈκÎĿ¼À´½¨Á¢ÐµÄĿ¼.'); +@define('ALL_DIRECTORIES', 'È«²¿Ä¿ÂÌ'); +@define('MANAGE_DIRECTORIES', '¹ÜÀíĿ¼'); +@define('DIRECTORY_CREATED', 'Ŀ¼ %s ÒѾ­ÐÂÔö.'); +@define('PARENT_DIRECTORY', 'ĸĿ¼'); +@define('CONFIRM_DELETE_DIRECTORY', 'È·¶¨ÒªÉ¾³ýÕâ¸öĿ¼ÄÚµÄÈ«²¿ÄÚÈÝÂð %s?'); +@define('ERROR_NO_DIRECTORY', '´íÎó: Ŀ¼ %s ²»´æÔÚ'); +@define('CHECKING_DIRECTORY', '¼ì²é´ËĿ¼µÄµµ°¸ %s'); +@define('DELETING_FILE', 'ɾ³ýµµ°¸ %s...'); +@define('ERROR_DIRECTORY_NOT_EMPTY', '²»ÄÜÒÆ³ýδÇå¿ÕµÄĿ¼. ¹´Ñ¡ "Ç¿ÖÆÉ¾³ý" ºËÈ¡·½¿éÈç¹ûÄúÒªÒÆ³ýÕâЩµµ°¸, È»ºóÔÚ¼ÌÐø. ´æÔڵĵµ°¸ÊÇ:'); +@define('DIRECTORY_DELETE_FAILED', '²»ÄÜɾ³ýĿ¼ %s. Çë¼ì²éȨÏÞ»ò¿´ÉÏÃæµÄѶϢ.'); +@define('DIRECTORY_DELETE_SUCCESS', 'Ŀ¼ %s ³É¹¦É¾³ý.'); +@define('SKIPPING_FILE_EXTENSION', 'ÂÔ¹ýµµ°¸: ûÓÐ %s µÄ¸±µµÃû.'); +@define('SKIPPING_FILE_UNREADABLE', 'ÂÔ¹ýµµ°¸: %s ²»ÄܶÁÈ¡.'); +@define('FOUND_FILE', 'ÕÒµ½ ÐÂ/ÐÞ¸Ä ¹ýµÄµµ°¸: %s.'); +@define('ALREADY_SUBCATEGORY', '%s ÒѾ­ÊÇ´ËÀà±ðµÄ×ÓÀà±ð %s.'); +@define('PARENT_CATEGORY', 'ĸÀà±ð'); +@define('IN_REPLY_TO', '»Ø¸²µ½'); +@define('TOP_LEVEL', '×î¸ß²ã'); +@define('SYNDICATION_PLUGIN_GENERIC_FEED', '%s feed'); +@define('PERMISSIONS', 'ȨÏÞ'); +@define('SETTINGS_SAVED_AT', 'ÐÂÉ趨ÒѾ­±»´¢´æµ½ %s'); + +/* DATABASE SETTINGS */ +@define('INSTALL_CAT_DB', '×ÊÁÏ¿âÉ趨'); +@define('INSTALL_CAT_DB_DESC', 'Äú¿ÉÒÔÔÚÕâÊäÈëÈ«²¿µÄ×ÊÁÏ¿â×ÊÁÏ. Serendipity ÐèÒªÕâЩ×ÊÁϲÅÄÜÕý³£ÔË×÷'); +@define('INSTALL_DBTYPE', '×ÊÁÏ¿âÀàÐÍ'); +@define('INSTALL_DBTYPE_DESC', '×ÊÁÏ¿âÀàÐÍ'); +@define('INSTALL_DBHOST', '×ÊÁÏ¿âÖ÷»ú'); +@define('INSTALL_DBHOST_DESC', '×ÊÁÏ¿âÖ÷»úÃû³Æ'); +@define('INSTALL_DBUSER', '×ÊÁÏ¿âÕʺÅ'); +@define('INSTALL_DBUSER_DESC', 'µÇÈë×ÊÁÏ¿âµÄÕʺÅ'); +@define('INSTALL_DBPASS', '×ÊÁÏ¿âÃÜÂë'); +@define('INSTALL_DBPASS_DESC', 'ÄúµÄ×ÊÁÏ¿âÃÜÂë'); +@define('INSTALL_DBNAME', '×ÊÁÏ¿âÃû³Æ'); +@define('INSTALL_DBNAME_DESC', '×ÊÁÏ¿âÃû³Æ'); +@define('INSTALL_DBPREFIX', '×ÊÁϱíǰÖÃÃû³Æ'); +@define('INSTALL_DBPREFIX_DESC', '×ÊÁϱíµÄǰÖÃÃû³Æ, ÀýÈç serendipity_'); + +/* PATHS */ +@define('INSTALL_CAT_PATHS', '·¾¶É趨'); +@define('INSTALL_CAT_PATHS_DESC', '¸øµµ°¸¼ÐµÄ·¾¶. ²»ÒªÍüÁË×îºóµÄбÏß!'); +@define('INSTALL_FULLPATH', 'Íêȫ·¾¶'); +@define('INSTALL_FULLPATH_DESC', 'ÄúµÄ Serendipity °²×°µÄÍêȫ·¾¶ºÍ¾ø¶Ô·¾¶'); +@define('INSTALL_UPLOADPATH', 'ÉÏ´«Â·¾¶'); +@define('INSTALL_UPLOADPATH_DESC', 'È«²¿µÄÉÏ´«µµ°¸»á´æµ½ÕâÀï, ÒÔ \'Íêȫ·¾¶\' ±íʾµÄÏà¶Ô·¾¶ - ÀýÈç \'uploads/\''); +@define('INSTALL_RELPATH', 'Ïà¶Ô·¾¶'); +@define('INSTALL_RELPATH_DESC', '¸øä¯ÀÀÆ÷µÄ·¾¶, ÀýÈç \'/serendipity/\''); +@define('INSTALL_RELTEMPLPATH', 'Ïà¶ÔµÄ²¼¾°Â·¾¶'); +@define('INSTALL_RELTEMPLPATH_DESC', 'Äú·Å²¼¾°µÄ·¾¶ - ÒÔ \'Ïà¶Ô·¾¶\' ±íʾµÄÏà¶Ô·¾¶'); +@define('INSTALL_RELUPLOADPATH', 'Ïà¶ÔµÄÉÏ´«Â·¾¶'); +@define('INSTALL_RELUPLOADPATH_DESC', '¸øä¯ÀÀÆ÷ÉÏ´«µµ°¸µÄ·¾¶ - ÒÔ \'Ïà¶Ô·¾¶\' ±íʾµÄÏà¶Ô·¾¶'); +@define('INSTALL_URL', 'ÍøÂ·ÈÕ¼Ç URL'); +@define('INSTALL_URL_DESC', 'ÄúµÄ Serendipity °²×°µÄ»ù±¾ URL'); +@define('INSTALL_INDEXFILE', 'Index µµ°¸'); +@define('INSTALL_INDEXFILE_DESC', 'Serendipity µÄ index µµ°¸'); + +/* Generel settings */ +@define('INSTALL_CAT_SETTINGS', 'Ò»°ãÉ趨'); +@define('INSTALL_CAT_SETTINGS_DESC', 'Serendipity µÄÒ»°ãÉ趨'); +@define('INSTALL_USERNAME', '¹ÜÀíÔ±ÕʺÅ'); +@define('INSTALL_USERNAME_DESC', '¹ÜÀíÔ±µÄµÇÈëÃû³Æ'); +@define('INSTALL_PASSWORD', '¹ÜÀíÔ±ÃÜÂë'); +@define('INSTALL_PASSWORD_DESC', '¹ÜÀíÔ±µÄµÇÈëÃÜÂë'); +@define('INSTALL_EMAIL', 'µç×ÓÓʼþ'); +@define('INSTALL_EMAIL_DESC', '¹ÜÀíÔ±µÄµç×ÓÓʼþ'); +@define('INSTALL_SENDMAIL', '¼ÄË͵ç×ÓÓʼþ¸ø¹ÜÀíÔ±?'); +@define('INSTALL_SENDMAIL_DESC', 'µ±ÓÐÈË·¢²¼»ØÏìµ½ÄúµÄÎÄÕÂʱҪÊÕµ½µç×ÓÓʼþ֪ͨÂð?'); +@define('INSTALL_SUBSCRIBE', 'ÔÊÐíʹÓÃÕß¶©ÔÄÎÄÕÂ?'); +@define('INSTALL_SUBSCRIBE_DESC', 'Äú¿ÉÒÔÔÊÐíʹÓÃÕßÊÕµ½µç×ÓÓʼþ֪ͨ, µ±ÓлØÏì·¢²¼Ê±ËýÃÇ»áÊÕµ½Í¨Öª.'); +@define('INSTALL_BLOGNAME', 'ÈÕ¼ÇÃû³Æ'); +@define('INSTALL_BLOGNAME_DESC', 'ÄúµÄÈռDZêÌâ'); +@define('INSTALL_BLOGDESC', 'ÈռǼò½é'); +@define('INSTALL_BLOGDESC_DESC', '½éÉÜÄúµÄÈÕ¼Ç'); +@define('INSTALL_LANG', 'Óïϵ'); +@define('INSTALL_LANG_DESC', 'ÄúÈÕ¼ÇʹÓõÄÓïϵ'); + +/* Appearance and options */ +@define('INSTALL_CAT_DISPLAY', 'Íâ¹Û¼°Ñ¡ÏîÉ趨'); +@define('INSTALL_CAT_DISPLAY_DESC', 'ÈÃÄúÉ趨 Serendipity µÄÍâ¹ÛºÍÆäËûÉ趨'); +@define('INSTALL_WYSIWYG', 'ʹÓà WYSIWYG ±à¼­Æ÷'); +@define('INSTALL_WYSIWYG_DESC', 'ÄúҪʹÓà WYSIWYG ±à¼­Æ÷Âð? (¿ÉÔÚ IE5+ ʹÓÃ, ijЩ²¿·Ö¿ÉʹÓÃì¶ Mozilla 1.3+)'); +@define('INSTALL_XHTML11', 'Ç¿ÖÆ·ûºÏ XHTML 1.1 ÒªÇó'); +@define('INSTALL_XHTML11_DESC', 'Äú¿ÉÒÔÈÃÄúµÄÈÕ¼ÇÇ¿ÖÆ·ûºÏ XHTML 1.1 µÄÒªÇó (¶Ô¾ÉµÄä¯ÀÀÆ÷¿ÉÄÜ»áÓÐ ºǫ́/ǰ̨ µÄÎÊÌâ)'); +@define('INSTALL_POPUP', 'ʹÓõ¯³öÊÓ´°'); +@define('INSTALL_POPUP_DESC', 'ÄúÒªÔÚ»ØÏì, ÒýÓõȵط½Ê¹Óõ¯³öÊÓ´°Âð?'); +@define('INSTALL_EMBED', 'ʹÓÃÄÚǶ¹¦ÄÜ?'); +@define('INSTALL_EMBED_DESC', 'Èç¹ûÄãÒª½« Serendipity ÒÔÄÚǶµÄ·½Ê½·Åµ½ÍøÒ³ÄÚ, Ñ¡Ôñ ÊÇ »áÈÃÄúÉáÆúÈκαêÌâÈ»ºóÖ»ÏÔʾÈÕ¼ÇÄÚÈÝ. Äú¿ÉÒÔÓà indexFile É趨À´Ê¹Óðü×°º¯Ê½Àà±ðÒÔ±ãÄú·ÅÈëÍøÒ³±êÌâ. ÏêÇéÇë²éѯ README µµ°¸!'); +@define('INSTALL_TOP_AS_LINKS', 'ÒÔÁ¬½áÏÔʾ Ö÷Òª³öÔ´/Ö÷ÒªÀ´Ô´?'); +@define('INSTALL_TOP_AS_LINKS_DESC', '"·ñ": ³öÔ´ºÍÀ´Ô´½«ÓÃÎÄ×ÖÏÔʾÒÔ±ÜÃâ google µÄ¹ã¸æ. "ÊÇ": ³öÔ´ºÍÀ´Ô´½«ÓÃÁ¬½áÏÔʾ. "Ô¤Éè": ÓÃÈ«ÇøÀïÃæµÄÉ趨 (½¨Òé).'); +@define('INSTALL_BLOCKREF', '×èµ²À´Ô´'); +@define('INSTALL_BLOCKREF_DESC', 'ÓÐÈκÎÌØÊâµÄÖ÷»úÄú²»ÏëÔÚÀ´Ô´ÀïÏÔʾÂð? Óà \';\' À´·Ö¿ªÖ÷»úÃû³Æ, ×¢ÒâÖ÷»úÊÇÒÔ×Ó×Ö´®·½Ê½×èµ²!'); +@define('INSTALL_REWRITE', 'URL Rewriting'); +@define('INSTALL_REWRITE_DESC', 'ÇëÑ¡ÔñÄúÏëÓÃµÄ URL Rewriting ·½Ê½. ¿ªÆô rewrite ¹æÔò»áÒԱȽÏÇå³þµÄ·½Ê½ÏÔʾ URL, ÒÔ±ãËÑÑ°ÍøÕ¾ÄÜÕýÈ·µÄµÇÈëÄúµÄÎÄÕÂ. ÄúµÄÖ÷»ú±ØÐëÖ§Ô® mod_rewrite »ò "AllowOverride All" µ½ÄúµÄ Serendipity µµ°¸¼Ð. Ô¤ÉèµÄÉ趨ÊÇϵͳ×Ô¶¯°ïÄúÕì²âµÄ'); + +/* Imageconversion Settings */ +@define('INSTALL_CAT_IMAGECONV', 'ͼƬת»»É趨'); +@define('INSTALL_CAT_IMAGECONV_DESC', 'ÇëÉ趨 Serendipity É趨ͼƬת»»µÄ·½Ê½'); +@define('INSTALL_IMAGEMAGICK', 'ʹÓà Imagemagick'); +@define('INSTALL_IMAGEMAGICK_DESC', 'Èç¹ûÓа²×° image magick, ÄúÒªÓÃËüÀ´¸Ä±äͼƬ´óСÂð?'); +@define('INSTALL_IMAGEMAGICKPATH', 'ת»»³Ìʽ·¾¶'); +@define('INSTALL_IMAGEMAGICKPATH_DESC', 'image magick ת»»³ÌʽµÄÍêȫ·¾¶ºÍÃû³Æ'); +@define('INSTALL_THUMBSUFFIX', 'ËõͼºóÖÃ×ÖÔª'); +@define('INSTALL_THUMBSUFFIX_DESC', 'Ëõͼ»áÒÔÏÂÃæµÄ¸ñÊ½ÖØÐÂÃüÃû: original.[ºóÖÃ×ÖÔª].ext'); +@define('INSTALL_THUMBWIDTH', 'Ëõͼ³ß¶È'); +@define('INSTALL_THUMBWIDTH_DESC', '×Ô¶¯½¨Á¢ËõͼµÄ×î´ó¿í¶È'); + +/* Personal details */ +@define('USERCONF_CAT_PERSONAL', '¸öÈË×ÊÁÏÉ趨'); +@define('USERCONF_CAT_PERSONAL_DESC', '¸Ä±äÄúµÄ¸öÈË×ÊÁÏ'); +@define('USERCONF_USERNAME', 'ÄúµÄÕʺÅ'); +@define('USERCONF_USERNAME_DESC', 'ÄúµÇÈëÍøÂ·ÈռǵÄÃû³Æ'); +@define('USERCONF_PASSWORD', 'ÄúµÄÃÜÂë'); +@define('USERCONF_PASSWORD_DESC', 'ÄúµÇÈëÍøÂ·ÈռǵÄÃÜÂë'); +@define('USERCONF_EMAIL', 'ÄúµÄµç×ÓÓʼþ'); +@define('USERCONF_EMAIL_DESC', 'ÄúʹÓõĵç×ÓÓʼþ'); +@define('USERCONF_SENDCOMMENTS', '¼ÄËÍ»ØÏì֪ͨ?'); +@define('USERCONF_SENDCOMMENTS_DESC', 'µ±ÓÐлØÏìµ½ÄúµÄÎÄÕÂʱҪ֪ͨÄúÂð?'); +@define('USERCONF_SENDTRACKBACKS', '¼ÄËÍÒýÓÃ֪ͨ?'); +@define('USERCONF_SENDTRACKBACKS_DESC', 'µ±ÓÐÐÂÒýÓõ½ÄúµÄÎÄÕÂʱҪ֪ͨÄúÂð?'); +@define('USERCONF_ALLOWPUBLISH', 'ȨÏÞ: ¿É·¢²¼ÎÄÕÂ?'); +@define('USERCONF_ALLOWPUBLISH_DESC', 'ÔÊÐíÕâλ×÷Õß·¢²¼ÎÄÕÂÂð?'); +@define('SUCCESS', 'Íê³É'); +@define('POWERED_BY_SHOW_TEXT', 'ÒÔÎÄ×ÖÏÔʾ "Serendipity"'); +@define('POWERED_BY_SHOW_TEXT_DESC', '½«ÓÃÎÄ×ÖÏÔʾ "Serendipity Weblog"'); +@define('POWERED_BY_SHOW_IMAGE', 'ÒÔ logo ÏÔʾ "Serendipity"'); +@define('POWERED_BY_SHOW_IMAGE_DESC', 'ÏÔʾ Serendipity µÄ logo'); +@define('PLUGIN_ITEM_DISPLAY', '¸ÃÏîÄ¿µÄÏÔʾλַ?'); +@define('PLUGIN_ITEM_DISPLAY_EXTENDED', 'Ö»ÔÚ¸±ÄÚÈÝÏÔʾ'); +@define('PLUGIN_ITEM_DISPLAY_OVERVIEW', 'Ö»ÔڸŹÛÄÚÏÔʾ'); +@define('PLUGIN_ITEM_DISPLAY_BOTH', 'ÓÀÔ¶ÏÔʾ'); + +@define('COMMENTS_WILL_BE_MODERATED', '·¢²¼µÄ»ØÏ콫ÐèÒª¹ÜÀíÔ±µÄÉóºË.'); +@define('YOU_HAVE_THESE_OPTIONS', 'ÄúÓÐÒÔÏÂÑ¡Ôñ:'); +@define('THIS_COMMENT_NEEDS_REVIEW', '¾¯¸æ: Õâ¸ö»ØÏìÐëÉóºË²Å»áÏÔʾ'); +@define('DELETE_COMMENT', 'ɾ³ý»ØÏì'); +@define('APPROVE_COMMENT', 'ÈϿɻØÏì'); +@define('REQUIRES_REVIEW', 'ÐèÒªÉóºË'); +@define('COMMENT_APPROVED', '»ØÏì #%s ÒѾ­Í¨¹ýÉóºË'); +@define('COMMENT_DELETED', '»ØÏì #%s ÒѾ­³É¹¦É¾³ý'); +@define('COMMENTS_MODERATE', '»ØÏìºÍÒýÓõ½Õâ¸öÎÄÕÂÐèÒª¹ÜÀíÔ±µÄÉóºË'); +@define('THIS_TRACKBACK_NEEDS_REVIEW', '¾¯¸æ: Õâ¸öÒýÓÃÐèÒª¹ÜÀíÔ±µÄÉóºË²Å»áÏÔʾ'); +@define('DELETE_TRACKBACK', 'ɾ³ýÒýÓÃ'); +@define('APPROVE_TRACKBACK', 'ÈÏ¿ÉÒýÓÃ'); +@define('TRACKBACK_APPROVED', 'ÒýÓà #%s ÒѾ­Í¨¹ýÉóºË'); +@define('TRACKBACK_DELETED', 'ÒýÓà #%s ÒѾ­³É¹¦É¾³ý'); +@define('VIEW', 'ä¯ÀÀ'); +@define('COMMENT_ALREADY_APPROVED', '»ØÏì #%s ÒѾ­Í¨¹ýÉóºË'); +@define('COMMENT_EDITED', 'ÎÄÕÂÒѱ»±à¼­'); +@define('HIDE', 'Òþ²Ø'); +@define('VIEW_EXTENDED_ENTRY', '¼ÌÐøÔĶÁ "%s"'); +@define('TRACKBACK_SPECIFIC_ON_CLICK', 'Õâ¸öÁ¬½á²»ÊÇÓÃÀ´µãµÄ. Ëü°üº¬ÁËÕâ¸öÎÄÕµÄÒýÓà URI. Äú¿ÉÒÔ´ÓÄúµÄÈÕ¼ÇÄÚÓÃÕâ¸ö URI À´´«ËÍ ping ºÍÒýÓõ½Õâ¸öÎÄÕÂ. Èç¹ûÒª¸´ÖÆÕâ¸öÁ¬½á, ÔÚÁ¬½áÉϵãÓÒ¼üÈ»ºóÑ¡Ôñ "¸´ÖÆÁ¬½á" (IE) »ò "¸´ÖÆÁ¬½áλַ" (Mozilla).'); +@define('PLUGIN_SUPERUSER_HTTPS', 'Óà https µÇÈë'); +@define('PLUGIN_SUPERUSER_HTTPS_DESC', 'ÈõÇÈëÁ¬½áÁ¬µ½ https ÍøÖ·. ÄúµÄÖ÷»ú±ØÐëÖ§Ô®ÕâÏÄÜ!'); +@define('INSTALL_SHOW_EXTERNAL_LINKS', 'ÈÃÍâÀ´Á¬½áÒÔÁ¬½áÏÔʾ?'); +@define('INSTALL_SHOW_EXTERNAL_LINKS_DESC', '"·ñ": ÍâÀ´Á¬½á (Ö÷Òª³öÔ´, Ö÷ÒªÀ´Ô´, »ØÏì) ¶¼²»»áÒÔÎÄ×ÖÏÔʾÒÔ±ÜÃâ google ¹ã¸æ (½¨ÒéʹÓÃ). "ÊÇ": ÍâÀ´Á¬½á½«ÒÔ³¬Á¬½áµÄ·½Ê½ÏÔʾ. ¿ÉÒÔÔÚ²àÁÐÍâ¹Ò¸Ç¹ý´ËÉ趨!'); +@define('PAGE_BROWSE_COMMENTS', 'Ò³Êý %s ¹² %s, ×ܹ² %s ¸ö»ØÏì'); +@define('FILTERS', '¹ýÂË'); +@define('FIND_ENTRIES', 'ËÑѰÎÄÕÂ'); +@define('FIND_COMMENTS', 'ËÑѰ»ØÏì'); +@define('FIND_MEDIA', 'ËÑѰýÌå'); +@define('FILTER_DIRECTORY', 'Ŀ¼'); +@define('SORT_BY', 'ÅÅÐò'); +@define('TRACKBACK_COULD_NOT_CONNECT', 'ûÓÐËͳöÒýÓÃ: ÎÞ·¨¿ªÆôÏß·µ½ %s ÓÃÁ¬½Ó²º %d'); +@define('MEDIA', 'ýÌå'); +@define('MEDIA_LIBRARY', 'ýÌå´æ¿â'); +@define('ADD_MEDIA', 'ÐÂÔöýÌå'); +@define('ENTER_MEDIA_URL', 'ÇëÊäÈëµµ°¸µÄ URL:'); +@define('ENTER_MEDIA_UPLOAD', 'ÇëÑ¡ÔñÒªÉÏ´«µÄµµ°¸:'); +@define('SAVE_FILE_AS', '´¢´æµµ°¸:'); +@define('STORE_IN_DIRECTORY', '´¢´æµ½ÒÔÏÂĿ¼: '); +@define('ADD_MEDIA_BLAHBLAH', 'ÐÂÔöµµ°¸µ½Ã½Ìå´æ¿â:

Äú¿ÉÒÔÔÚÕâÉÏ´«Ã½Ìåµµ, »ò¸æËßϵͳµ½ÄÄѰÕÒ! Èç¹ûÄúûÓÐÏëÒªµÄͼƬ, Äú¿ÉÒÔµ½ googleѰÕÒͼƬ.

Ñ¡Ôñ·½Ê½:
'); +@define('MEDIA_RENAME', '¸ü¸Äµµ°¸Ãû³Æ'); +@define('IMAGE_RESIZE', '¸ü¸ÄͼƬ³ß´ç'); +@define('MEDIA_DELETE', 'ɾ³ýÕâ¸öµµ°¸'); +@define('FILES_PER_PAGE', 'ÿҳÏÔʾµÄµµ°¸Êý'); +@define('CLICK_FILE_TO_INSERT', 'µãÑ¡ÄúÒªÊäÈëµÄµµ°¸:'); +@define('SELECT_FILE', 'Ñ¡ÔñÒªÊäÈëµÄµµ°¸'); +@define('MEDIA_FULLSIZE', 'ÍêÕû³ß´ç'); +@define('CALENDAR_BOW_DESC', 'Ò»¸öÀñ°ÝµÄµÚÒ»Ìì. Ô¤ÉèÊÇÐÇÆÚÒ»'); +@define('SUPERUSER', 'ÈռǹÜÀí'); +@define('ALLOWS_YOU_BLAHBLAH', 'ÔÚ²àÁÐÌṩÁ¬½áµ½ÈռǹÜÀí'); +@define('CALENDAR', 'ÈÕÀú'); +@define('SUPERUSER_OPEN_ADMIN', '¿ªÆô¹ÜÀíÒ³Ãæ'); +@define('SUPERUSER_OPEN_LOGIN', '¿ªÆôµÇÈëÒ³Ãæ'); +@define('INVERT_SELECTIONS', 'µßµ¹¹´Ñ¡'); +@define('COMMENTS_DELETE_CONFIRM', 'È·¶¨ÒªÉ¾³ý¹´Ñ¡µÄ»ØÏìÂð?'); +@define('COMMENT_DELETE_CONFIRM', 'È·¶¨ÒªÉ¾³ý»ØÏì #%d, ·¢²¼ÕßÊÇ %s?'); +@define('DELETE_SELECTED_COMMENTS', 'ɾ³ý¹´Ñ¡µÄ»ØÏì'); +@define('VIEW_COMMENT', 'ä¯ÀÀ»ØÏì'); +@define('VIEW_ENTRY', 'ä¯ÀÀÎÄÕÂ'); +@define('DELETE_FILE_FAIL' , 'ÎÞ·¨É¾³ýµµ°¸ %s'); +@define('DELETE_THUMBNAIL', 'ɾ³ýÁËͼƬËõͼ %s'); +@define('DELETE_FILE', 'ɾ³ýÁ˵µ°¸ %s'); +@define('ABOUT_TO_DELETE_FILE', 'Äú½«É¾³ýµµ°¸ %s
Èç¹ûÄúÓÐÔÚÆäËûµÄÎÄÕÂÄÚʹÓÃÕâ¸öµµ°¸, ÄǸöÁ¬½á»òͼƬ½«»áÎÞЧ
È·¶¨Òª¼ÌÐøÂð?

'); +@define('TRACKBACK_SENDING', '´«ËÍÒýÓõ½ URI %s...'); +@define('TRACKBACK_SENT', 'ÒýÓÃÍê³É'); +@define('TRACKBACK_FAILED', 'ÒýÓôíÎó: %s'); +@define('TRACKBACK_NOT_FOUND', 'ÕÒ²»µ½ÒýÓõÄURI.'); +@define('TRACKBACK_URI_MISMATCH', '×Ô¶¯ËÑѰµÄÒýÓøúÒýÓÃÄ¿±ê²»Ïàͬ.'); +@define('TRACKBACK_CHECKING', 'ËÑѰ %s µÄÒýÓÃ...'); +@define('TRACKBACK_NO_DATA', 'Ä¿±êûÓÐÈκÎ×ÊÁÏ'); +@define('TRACKBACK_SIZE', 'Ä¿±ê URI ³¬³öÁËÔÊÐíµÄ %s bytes µµ°¸´óС.'); +@define('COMMENTS_VIEWMODE_THREADED', '·ÖÏß³Ì'); +@define('COMMENTS_VIEWMODE_LINEAR', 'Ö±Ïß³Ì'); +@define('DISPLAY_COMMENTS_AS', '»ØÏìÏÔʾ·½Ê½'); +@define('COMMENTS_FILTER_SHOW', 'ÏÔʾ'); +@define('COMMENTS_FILTER_ALL', 'È«²¿'); +@define('COMMENTS_FILTER_APPROVED_ONLY', 'ÏÔʾÉóºË»ØÏì'); +@define('COMMENTS_FILTER_NEED_APPROVAL', 'ÏÔʾµÈ´ýÉóºË'); +@define('RSS_IMPORT_BODYONLY', '½«ÊäÈëµÄÎÄ×ַŵ½Ö÷ÄÚÈÝ, ½«²»²ð¿ª¹ý³¤µÄÎÄÕµ½¸±ÄÚÈݵØÇø.'); +@define('SYNDICATION_PLUGIN_FULLFEED', 'ÔÚ RSS feed ÀïÏÔʾȫ²¿µÄÎÄÕÂ'); +@define('WEEK', 'ÖÜ'); +@define('WEEKS', 'ÖÜ'); +@define('MONTHS', 'ÔÂ'); +@define('DAYS', 'ÈÕ'); +@define('ARCHIVE_FREQUENCY', '±£´æÎÄ¿âµÄÏîĿƵÂÊ'); +@define('ARCHIVE_FREQUENCY_DESC', '±£´æÎÄ¿âʹÓõÄÏîÄ¿Çåµ¥¼ä¸ô'); +@define('ARCHIVE_COUNT', '±£´æÎÄ¿âµÄÏîÄ¿Êý'); +@define('ARCHIVE_COUNT_DESC', 'ÏÔʾµÄÔÂ, ÖÜ, »òÈÕ'); +@define('BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS', 'ÏÂÃæÊǰ²×°ºÃµÄÍâ¹Ò'); +@define('SIDEBAR_PLUGIN', '²àÁÐÍâ¹Ò'); +@define('EVENT_PLUGIN', 'ʼþÍâ¹Ò'); +@define('CLICK_HERE_TO_INSTALL_PLUGIN', 'µãÕâÀﰲװР%s'); +@define('VERSION', '°æ±¾'); +@define('INSTALL', '°²×°'); +@define('ALREADY_INSTALLED', 'ÒѾ­°²×°'); +@define('SELECT_A_PLUGIN_TO_ADD', 'ÇëÑ¡ÔñÒª°²×°µÄÍâ¹Ò'); +@define('RSS_IMPORT_CATEGORY', 'ÓÃÕâ¸öÀà±ð¸ø²»ÏàͬµÄÊäÈëÎÄÕÂ'); + +@define('INSTALL_OFFSET', 'Server time Offset'); // Translate +@define('STICKY_POSTINGS', 'Sticky Postings'); // Translate +@define('INSTALL_FETCHLIMIT', 'Entries to display on frontpage'); // Translate +@define('INSTALL_FETCHLIMIT_DESC', 'Number of entries to display for each page on the frontend'); // Translate +@define('IMPORT_ENTRIES', 'Import data'); // Translate +@define('EXPORT_ENTRIES', 'Export entries'); // Translate +@define('IMPORT_WELCOME', 'Welcome to the Serendipity import utility'); // Translate +@define('IMPORT_WHAT_CAN', 'Here you can import entries from other weblog software applications'); // Translate +@define('IMPORT_SELECT', 'Please select the software you wish to import from'); // Translate +@define('IMPORT_PLEASE_ENTER', 'Please enter the data as requested below'); // Translate +@define('IMPORT_NOW', 'Import now!'); // Translate +@define('IMPORT_STARTING', 'Starting import procedure...'); // Translate +@define('IMPORT_FAILED', 'Import failed'); // Translate +@define('IMPORT_DONE', 'Import successfully completed'); // Translate +@define('IMPORT_WEBLOG_APP', 'Weblog application'); // Translate +@define('EXPORT_FEED', 'Export full RSS feed'); // Translate +@define('STATUS', 'Status after import'); // Translate +@define('IMPORT_GENERIC_RSS', 'Generic RSS import'); // Translate +@define('ACTIVATE_AUTODISCOVERY', 'Send Trackbacks to links found in the entry'); // Translate +@define('WELCOME_TO_ADMIN', 'Welcome to the Serendipity Administration Suite.'); // Translate +@define('PLEASE_ENTER_CREDENTIALS', 'Please enter your credentials below.'); // Translate +@define('ADMIN_FOOTER_POWERED_BY', 'Powered by Serendipity %s and PHP %s'); // Translate +@define('INSTALL_USEGZIP', 'Use gzip compressed pages'); // Translate +@define('INSTALL_USEGZIP_DESC', 'To speed up delivery of pages, we can compress the pages we send to the visitor, given that his browser supports this. This is recommended'); // Translate +@define('INSTALL_SHOWFUTURE', 'Show future entries'); // Translate +@define('INSTALL_SHOWFUTURE_DESC', 'If enabled, this will show all entries in the future on your blog. Default is to hide those entries and only show them if the publish date has arrived.'); // Translate +@define('INSTALL_DBPERSISTENT', 'Use persistent connections'); // Translate +@define('INSTALL_DBPERSISTENT_DESC', 'Enable the usage of persistent database connections, read more here. This is normally not recommended'); // Translate +@define('NO_IMAGES_FOUND', 'No images found'); // Translate +@define('PERSONAL_SETTINGS', 'Personal Settings'); // Translate +@define('REFERER', 'Referer'); // Translate +@define('NOT_FOUND', 'Not found'); // Translate +@define('NOT_WRITABLE', 'Not writable'); // Translate +@define('WRITABLE', 'Writable'); // Translate +@define('PROBLEM_DIAGNOSTIC', 'Due to a problematic diagnostic, you cannot continue with the installation before the above errors are fixed'); // Translate +@define('SELECT_INSTALLATION_TYPE', 'Select which installation type you wish to use'); // Translate +@define('WELCOME_TO_INSTALLATION', 'Welcome to the Serendipity Installation'); // Translate +@define('FIRST_WE_TAKE_A_LOOK', 'First we will take a look at your current setup and attempt to diagnose any compatibility problems'); // Translate +@define('ERRORS_ARE_DISPLAYED_IN', 'Errors are displayed in %s, recommendations in %s and success in %s'); // Translate +@define('RED', 'red'); // Translate +@define('YELLOW', 'yellow'); // Translate +@define('GREEN', 'green'); // Translate +@define('PRE_INSTALLATION_REPORT', 'Serendipity v%s pre-installation report'); // Translate +@define('RECOMMENDED', 'Recommended'); // Translate +@define('ACTUAL', 'Actual'); // Translate +@define('PHPINI_CONFIGURATION', 'php.ini configuration'); // Translate +@define('PHP_INSTALLATION', 'PHP installation'); // Translate +@define('THEY_DO', 'they do'); // Translate +@define('THEY_DONT', 'they don\'t'); // Translate +@define('SIMPLE_INSTALLATION', 'Simple installation'); // Translate +@define('EXPERT_INSTALLATION', 'Expert installation'); // Translate +@define('COMPLETE_INSTALLATION', 'Complete installation'); // Translate +@define('WONT_INSTALL_DB_AGAIN', 'won\'t install the database again'); // Translate +@define('CHECK_DATABASE_EXISTS', 'Checking to see if the database and tables already exists'); // Translate +@define('CREATING_PRIMARY_AUTHOR', 'Creating primary author \'%s\''); // Translate +@define('SETTING_DEFAULT_TEMPLATE', 'Setting default template'); // Translate +@define('INSTALLING_DEFAULT_PLUGINS', 'Installing default plugins'); // Translate +@define('SERENDIPITY_INSTALLED', 'Serendipity has been successfully installed'); // Translate +@define('VISIT_BLOG_HERE', 'Visit your new blog here'); // Translate +@define('THANK_YOU_FOR_CHOOSING', 'Thank you for choosing Serendipity'); // Translate +@define('ERROR_DETECTED_IN_INSTALL', 'An error was detected in the installation'); // Translate +@define('OPERATING_SYSTEM', 'Operating system'); // Translate +@define('WEBSERVER_SAPI', 'Webserver SAPI'); // Translate +@define('TEMPLATE_SET', '\'%s\' has been set as your active template'); // Translate +@define('SEARCH_ERROR', 'The search function did not work as expected. Notice for the administrator of this blog: This may happen because of missing index keys in your database. On MySQL systems your database user account needs to be privileged to execute this query:

CREATE FULLTEXT INDEX entry_idx on %sentries (title,body,extended)
The specific error returned by the database was:
%s
'); // Translate +@define('EDIT_THIS_CAT', 'Editing "%s"'); // Translate +@define('CATEGORY_REMAINING', 'Delete this category and move its entries to this category'); // Translate +@define('CATEGORY_INDEX', 'Below is a list of categories available to your entries'); // Translate +@define('NO_CATEGORIES', 'No categories'); // Translate +@define('RESET_DATE', 'Reset date'); // Translate +@define('RESET_DATE_DESC', 'Click here to reset the date to the current time'); // Translate +@define('PROBLEM_PERMISSIONS_HOWTO', 'Permissions can be set by running shell command: `%s` on the failed directory, or by setting this using an FTP program'); // Translate +@define('WARNING_TEMPLATE_DEPRECATED', 'Warning: Your current template is using a deprecated template method, you are advised to update if possible'); // Translate +@define('ENTRY_PUBLISHED_FUTURE', 'This entry is not yet published.'); // Translate +@define('ENTRIES_BY', 'Entries by %s'); // Translate +@define('PREVIOUS', 'Previous'); // Translate +@define('NEXT', 'Next'); // Translate +@define('APPROVE', 'Approve'); // Translate +@define('DO_MARKUP_DESCRIPTION', 'Apply markup transformations to the text (smilies, shortcut markups via *, /, _, ...). Disabling this will preserve any HTML-code in the text.'); // Translate +@define('CATEGORY_ALREADY_EXIST', 'A category with the name "%s" already exist'); // Translate +@define('IMPORT_NOTES', 'Note:'); // Translate +@define('ERROR_FILE_FORBIDDEN', 'You are not allowed to upload files with active content'); // Translate +@define('ADMIN', 'Administration'); // Re-Translate +@define('ADMIN_FRONTPAGE', 'Frontpage'); // Translate +@define('QUOTE', 'Quote'); // Translate +@define('IFRAME_SAVE', 'Serendipity is now saving your entry, creating trackbacks and performing possible XML-RPC calls. This may take a while..'); // Translate +@define('IFRAME_SAVE_DRAFT', 'A draft of this entry has been saved'); // Translate +@define('IFRAME_PREVIEW', 'Serendipity is now creating the preview of your entry...'); // Translate +@define('IFRAME_WARNING', 'Your browser does not support the concept of iframes. Please open your serendipity_config.inc.php file and set $serendipity[\'use_iframe\'] variable to FALSE.'); // Translate +@define('NONE', 'none'); +@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Default settings for new entries'); // Translate +@define('UPGRADE', 'Upgrade'); // Translate +@define('UPGRADE_TO_VERSION', 'Upgrade to version %s'); // Translate +@define('DELETE_DIRECTORY', 'Delete directory'); // Translate +@define('DELETE_DIRECTORY_DESC', 'You are about to delete the contents of a directory that contains media files, possibly files used in some of your entries.'); // Translate +@define('FORCE_DELETE', 'Delete ALL files in this directory, including those not known by Serendipity'); // Translate +@define('CREATE_DIRECTORY', 'Create directory'); // Translate +@define('CREATE_NEW_DIRECTORY', 'Create new directory'); // Translate +@define('CREATE_DIRECTORY_DESC', 'Here you can create a new directory to place media files in. Choose the name for your new directory and select an optional parent directory to place it in.'); // Translate +@define('BASE_DIRECTORY', 'Base directory'); // Translate +@define('USERLEVEL_EDITOR_DESC', 'Standard editor'); // Translate +@define('USERLEVEL_CHIEF_DESC', 'Chief editor'); // Translate +@define('USERLEVEL_ADMIN_DESC', 'Administrator'); // Translate +@define('USERCONF_USERLEVEL', 'Access level'); // Translate +@define('USERCONF_USERLEVEL_DESC', 'This level is used to determine what kind of access this user has to the blog'); // Translate +@define('USER_SELF_INFO', 'Logged in as %s (%s)'); // Translate +@define('ADMIN_ENTRIES', 'Entries'); // Translate +@define('RECHECK_INSTALLATION', 'Recheck installation'); // Translate +@define('IMAGICK_EXEC_ERROR', 'Unable to execute: "%s", error: %s, return var: %d'); // Translate +@define('INSTALL_OFFSET_DESC', 'Enter the amount of hours between the date of your webserver (current: %clock%) and your desired time zone'); // Translate +@define('UNMET_REQUIREMENTS', 'Requirements failed: %s'); // Translate +@define('CHARSET', 'Charset'); +@define('AUTOLANG', 'Use visitor\'s browser language as default'); +@define('AUTOLANG_DESC', 'If enabled, this will use the visitor\'s browser language setting to determine the default language of your entry and interface language.'); +@define('INSTALL_AUTODETECT_URL', 'Autodetect used HTTP-Host'); // Translate +@define('INSTALL_AUTODETECT_URL_DESC', 'If set to "true", Serendipity will ensure that the HTTP Host which was used by your visitor is used as your BaseURL setting. Enabling this will let you be able to use multiple domain names for your Serendipity Blog, and use the domain for all follow-up links which the user used to access your blog.'); // Translate +@define('CONVERT_HTMLENTITIES', 'Try to auto-convert HTML entities?'); +@define('EMPTY_SETTING', 'You did not specify a valid value for "%s"!'); +@define('USERCONF_REALNAME', 'Real name'); // Translate +@define('USERCONF_REALNAME_DESC', 'The full name of the author. This is the name seen by readers'); // Translate +@define('HOTLINK_DONE', 'File hotlinked.
Done.'); // Translate +@define('ENTER_MEDIA_URL_METHOD', 'Fetch method:'); // Translate +@define('ADD_MEDIA_BLAHBLAH_NOTE', 'Note: If you choose to hotlink to server, make sure you have permission to hotlink to the designated website, or the website is yours. Hotlink allows you to use off-site images without storing them locally.'); // Translate +@define('MEDIA_HOTLINKED', 'hotlinked'); // Translate +@define('FETCH_METHOD_IMAGE', 'Download image to your server'); // Translate +@define('FETCH_METHOD_HOTLINK', 'Hotlink to server'); // Translate +@define('DELETE_HOTLINK_FILE', 'Deleted the hotlinked file entitled %s'); // Translate +@define('SYNDICATION_PLUGIN_SHOW_MAIL', 'Show E-Mail addresses?'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> \ No newline at end of file diff --git a/plugins/serendipity_event_bbcode/lang_ja.inc.php b/plugins/serendipity_event_bbcode/lang_ja.inc.php new file mode 100644 index 0000000..4f60911 --- /dev/null +++ b/plugins/serendipity_event_bbcode/lang_ja.inc.php @@ -0,0 +1,20 @@ + # +# http://www.jannis.to/programming/serendipity.html # +# # +# Translated by # +# (c) 2004-2005 Tadashi Jokagi # +# # +########################################################################## + + @define('PLUGIN_EVENT_BBCODE_NAME', 'マークアップ: BB コード'); + @define('PLUGIN_EVENT_BBCODE_DESC', 'BB コードを使用したテキストマークアップです。'); + @define('PLUGIN_EVENT_BBCODE_TRANSFORM', 'BB コード 書式を許可します。'); + +/* vim: set sts=4 ts=4 expandtab : */ +?> diff --git a/plugins/serendipity_event_bbcode/serendipity_event_bbcode.php b/plugins/serendipity_event_bbcode/serendipity_event_bbcode.php new file mode 100644 index 0000000..b5ad639 --- /dev/null +++ b/plugins/serendipity_event_bbcode/serendipity_event_bbcode.php @@ -0,0 +1,290 @@ +BBCode-Formatierung erlaubt'); + break; + + case 'en': + default: + @define('PLUGIN_EVENT_BBCODE_NAME', 'Markup: BBCode'); + @define('PLUGIN_EVENT_BBCODE_DESC', 'Markup text using BBCode'); + @define('PLUGIN_EVENT_BBCODE_TRANSFORM', 'BBCode format allowed'); + break; +} + +class serendipity_event_bbcode extends serendipity_event +{ + var $title = PLUGIN_EVENT_BBCODE_NAME; + function introspect(&$propbag) + { + global $serendipity; + + $propbag->add('name', PLUGIN_EVENT_BBCODE_NAME); + $propbag->add('description', PLUGIN_EVENT_BBCODE_DESC); + $propbag->add('stackable', false); + $propbag->add('author', 'Jez Hancock, Garvin Hicking'); + $propbag->add('version', '2.0'); + $propbag->add('requirements', array( + 'serendipity' => '0.8', + 'smarty' => '2.6.7', + 'php' => '4.1.0' + )); + $propbag->add('cachable_events', array('frontend_display' => true)); + $propbag->add('event_hooks', array('frontend_display' => true, 'frontend_comment' => true, 'css' => true)); + + $this->markup_elements = array( + array( + 'name' => 'ENTRY_BODY', + 'element' => 'body', + ), + array( + 'name' => 'EXTENDED_BODY', + 'element' => 'extended', + ), + array( + 'name' => 'COMMENT', + 'element' => 'comment', + ), + array( + 'name' => 'HTML_NUGGET', + 'element' => 'html_nugget', + ) + ); + + $conf_array = array(); + $conf_array[] = 'info'; + foreach($this->markup_elements as $element) { + $conf_array[] = $element['name']; + } + $propbag->add('configuration', $conf_array); + + // Only allow numbers and characters for CSS: "red", "#FF0000", ... + $pattern_css = '([ 0-9a-z#-]+?)'; + + // Only allow strings occuring in emails: .-_@, 0-9, a-z + $pattern_mail = '([\.\-\+~@_0-9a-z]+?)'; + + // Only allow strings occuring in URLs: &;?:.-_@/, 0-9, a-z + $pattern_url = '([@\?:&;0-9a-z#\.\-_\/]+?)'; + + // Disallow possibly evil HTML characters which may lead to Javascript XSS: '"(); + $pattern_query = '([^"\'\(\);]+?)'; + + // Note: + // * Anything between ... tags will be caught by htmlspecialchars() and disallows custom HTML tags. + // * (?::\w+)? means "non capturing" match on any word character. + // * (?bbcodes = array( + '/(? "\\2", + '/(? "\\2", + '/(? "\\2", + '/(? "
\\2
", + + '/(? "\\1", + '/(? "\\1", + '/(? "\\1", + '/(? "
\\1
", + + // [email] + '/(? "\\1", + '/(? "\\2", + + // [url] + '/(? "\\2", + '/(? "\\1", + '/(? "\\1", + '/(? "\\2", + + // [img] + '/(? "\"\\1\"", + '/(? "\"\\3\"", + + // [quote] + '/(? "
QUOTE:
\\1
", + '/(? "
QUOTE \\1:
\\2
", + + // [list] + '/(?\s*)?\[\*(?::\w+)?\](.*?)(?=(?:\s*\s*)?\[\*|(?:\s*\s*)?\[\/?list)/si' => "\n
  • \\1
  • ", + '/(?\s*)?\[\/list(:(?!u|o)\w+)?\](?:)?/si' => "\n", + '/(?\s*)?\[\/list:u(:\w+)?\](?:)?/si' => "\n", + '/(?\s*)?\[\/list:o(:\w+)?\](?:)?/si' => "\n", + '/(?\s*)?\[list(:(?!u|o)\w+)?\]\s*(?:)?/si' => "\n